[{"data":1,"prerenderedAt":174412},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu":3,"wiki-doc-nav":1886},{"id":4,"title":5,"body":6,"description":160,"extension":1880,"meta":1881,"navigation":721,"path":1882,"seo":1883,"stem":1884,"__hash__":1885},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":8,"toc":1856},"minimark",[9,13,18,22,25,44,150,153,163,167,170,209,212,230,233,283,286,301,305,308,372,386,390,393,399,413,490,493,514,517,520,526,529,538,541,545,556,639,650,654,660,674,684,688,1103,1106,1119,1122,1133,1136,1139,1157,1160,1163,1181,1192,1195,1210,1220,1223,1244,1262,1284,1290,1331,1347,1363,1369,1372,1397,1413,1418,1448,1465,1492,1495,1511,1521,1536,1545,1560,1567,1571,1581,1594,1602,1605,1644,1651,1655,1712,1716,1722,1725,1733,1740,1743,1746,1765,1768,1771,1805,1820,1824,1827,1849,1852],[10,11,5],"h1",{"id":12},"_2xml-与-mjcf-物理建模基础",[14,15,17],"h2",{"id":16},"_1目标说明","1.目标说明",[19,20,21],"p",{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,23,24],{},"本章结束后，你应该能看懂一个简单模型里：",[26,27,28,32,35,38,41],"ol",{},[29,30,31],"li",{},"地面在哪里。",[29,33,34],{},"物体初始位置在哪里。",[29,36,37],{},"几何体是什么形状。",[29,39,40],{},"哪些 body 可以自由运动。",[29,42,43],{},"如何用名字在 Python 里找到 XML 中的对象。",[45,46,47,61],"table",{},[48,49,50],"thead",{},[51,52,53,58],"tr",{},[54,55,57],"th",{"align":56},"left","标签",[54,59,60],{"align":56},"作用",[62,63,64,76,86,96,106,116,130,140],"tbody",{},[51,65,66,73],{},[67,68,69],"td",{"align":56},[70,71,72],"code",{},"\u003Cmujoco>",[67,74,75],{"align":56},"根节点",[51,77,78,83],{},[67,79,80],{"align":56},[70,81,82],{},"\u003Coption>",[67,84,85],{"align":56},"仿真参数",[51,87,88,93],{},[67,89,90],{"align":56},[70,91,92],{},"\u003Cworldbody>",[67,94,95],{"align":56},"世界中的物体",[51,97,98,103],{},[67,99,100],{"align":56},[70,101,102],{},"\u003Cbody>",[67,104,105],{"align":56},"刚体",[51,107,108,113],{},[67,109,110],{"align":56},[70,111,112],{},"\u003Cgeom>",[67,114,115],{"align":56},"几何体、碰撞体、可视体",[51,117,118,127],{},[67,119,120,123,124],{"align":56},[70,121,122],{},"\u003Cjoint>"," \u002F ",[70,125,126],{},"\u003Cfreejoint>",[67,128,129],{"align":56},"关节",[51,131,132,137],{},[67,133,134],{"align":56},[70,135,136],{},"\u003Csite>",[67,138,139],{"align":56},"标记点",[51,141,142,147],{},[67,143,144],{"align":56},[70,145,146],{},"\u003Cactuator>",[67,148,149],{"align":56},"控制器",[19,151,152],{},"初学时可以先记住：",[154,155,161],"pre",{"className":156,"code":158,"language":159,"meta":160},[157],"language-text","body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n","text","",[70,162,158],{"__ignoreMap":160},[14,164,166],{"id":165},"_2环境与依赖安装","2.环境与依赖安装",[19,168,169],{},"Fedora 44 系统依赖:",[154,171,175],{"className":172,"code":173,"language":174,"meta":160,"style":160},"language-bash shiki shiki-themes github-light github-dark","sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n","bash",[70,176,177],{"__ignoreMap":160},[178,179,182,186,190,193,197,200,203,206],"span",{"class":180,"line":181},"line",1,[178,183,185],{"class":184},"sScJk","sudo",[178,187,189],{"class":188},"sZZnC"," dnf",[178,191,192],{"class":188}," install",[178,194,196],{"class":195},"sj4cs"," -y",[178,198,199],{"class":188}," mesa-libGL",[178,201,202],{"class":188}," mesa-dri-drivers",[178,204,205],{"class":188}," glfw",[178,207,208],{"class":188}," glfw-devel\n",[19,210,211],{},"pip:",[154,213,215],{"className":172,"code":214,"language":174,"meta":160,"style":160},"pip install \"mujoco>=2.3\" numpy\n",[70,216,217],{"__ignoreMap":160},[178,218,219,222,224,227],{"class":180,"line":181},[178,220,221],{"class":184},"pip",[178,223,192],{"class":188},[178,225,226],{"class":188}," \"mujoco>=2.3\"",[178,228,229],{"class":188}," numpy\n",[19,231,232],{},"conda:",[154,234,236],{"className":172,"code":235,"language":174,"meta":160,"style":160},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[70,237,238,261,272],{"__ignoreMap":160},[178,239,240,243,246,249,252,255,258],{"class":180,"line":181},[178,241,242],{"class":184},"conda",[178,244,245],{"class":188}," create",[178,247,248],{"class":195}," -n",[178,250,251],{"class":188}," mujoco-xml",[178,253,254],{"class":188}," python=",[178,256,257],{"class":195},"3.10",[178,259,260],{"class":195}," -y\n",[178,262,264,266,269],{"class":180,"line":263},2,[178,265,242],{"class":184},[178,267,268],{"class":188}," activate",[178,270,271],{"class":188}," mujoco-xml\n",[178,273,275,277,279,281],{"class":180,"line":274},3,[178,276,221],{"class":184},[178,278,192],{"class":188},[178,280,226],{"class":188},[178,282,229],{"class":188},[19,284,285],{},"版本冲突说明:",[26,287,288,291,298],{},[29,289,290],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[29,292,293,294,297],{},"本章使用基础标签，适用于 ",[70,295,296],{},"mujoco>=2.3","。",[29,299,300],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,302,304],{"id":303},"_3核心概念解释","3.核心概念解释",[19,306,307],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[154,309,313],{"className":310,"code":311,"language":312,"meta":160,"style":160},"language-xml shiki shiki-themes github-light github-dark","\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n","xml",[70,314,315,337,347,352,362],{"__ignoreMap":160},[178,316,317,321,325,328,331,334],{"class":180,"line":181},[178,318,320],{"class":319},"sVt8B","\u003C",[178,322,324],{"class":323},"s9eBZ","mujoco",[178,326,327],{"class":184}," model",[178,329,330],{"class":319},"=",[178,332,333],{"class":188},"\"name\"",[178,335,336],{"class":319},">\n",[178,338,339,342,345],{"class":180,"line":263},[178,340,341],{"class":319},"  \u003C",[178,343,344],{"class":323},"worldbody",[178,346,336],{"class":319},[178,348,349],{"class":180,"line":274},[178,350,351],{"class":319},"    ...\n",[178,353,355,358,360],{"class":180,"line":354},4,[178,356,357],{"class":319},"  \u003C\u002F",[178,359,344],{"class":323},[178,361,336],{"class":319},[178,363,365,368,370],{"class":180,"line":364},5,[178,366,367],{"class":319},"\u003C\u002F",[178,369,324],{"class":323},[178,371,336],{"class":319},[19,373,374,377,378,381,382,385],{},[70,375,376],{},"body"," 表示刚体。",[70,379,380],{},"geom"," 表示几何形状，可以用于碰撞、质量、渲染。",[70,383,384],{},"joint"," 表示刚体相对父刚体如何运动。",[387,388,389],"h3",{"id":389},"层级结构非常重要",[19,391,392],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[154,394,397],{"className":395,"code":396,"language":159,"meta":160},[157],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[70,398,396],{"__ignoreMap":160},[19,400,401,404,405,408,409,412],{},[70,402,403],{},"red_box_geom"," 和 ",[70,406,407],{},"box_center"," 都属于 ",[70,410,411],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[154,414,416],{"className":310,"code":415,"language":312,"meta":160,"style":160},"\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",[70,417,418,442,459,482],{"__ignoreMap":160},[178,419,420,422,424,427,429,432,435,437,440],{"class":180,"line":181},[178,421,320],{"class":319},[178,423,376],{"class":323},[178,425,426],{"class":184}," name",[178,428,330],{"class":319},[178,430,431],{"class":188},"\"box\"",[178,433,434],{"class":184}," pos",[178,436,330],{"class":319},[178,438,439],{"class":188},"\"0 0 1\"",[178,441,336],{"class":319},[178,443,444,446,449,451,453,456],{"class":180,"line":263},[178,445,341],{"class":319},[178,447,448],{"class":323},"freejoint",[178,450,426],{"class":184},[178,452,330],{"class":319},[178,454,455],{"class":188},"\"box_free\"",[178,457,458],{"class":319},"\u002F>\n",[178,460,461,463,465,468,470,472,475,477,480],{"class":180,"line":274},[178,462,341],{"class":319},[178,464,380],{"class":323},[178,466,467],{"class":184}," type",[178,469,330],{"class":319},[178,471,431],{"class":188},[178,473,474],{"class":184}," size",[178,476,330],{"class":319},[178,478,479],{"class":188},"\"0.1 0.1 0.1\"",[178,481,458],{"class":319},[178,483,484,486,488],{"class":180,"line":354},[178,485,367],{"class":319},[178,487,376],{"class":323},[178,489,336],{"class":319},[19,491,492],{},"含义:",[26,494,495,502,508,511],{},[29,496,497,498,501],{},"创建名为 ",[70,499,500],{},"box"," 的刚体",[29,503,504,505],{},"初始位置在世界坐标 ",[70,506,507],{},"(0, 0, 1)",[29,509,510],{},"它有一个自由关节",[29,512,513],{},"它有一个盒子几何体",[387,515,516],{"id":516},"坐标怎么理解",[19,518,519],{},"MuJoCo 默认使用三维坐标：",[154,521,524],{"className":522,"code":523,"language":159,"meta":160},[157],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[70,525,523],{"__ignoreMap":160},[19,527,528],{},"例如：",[154,530,532],{"className":310,"code":531,"language":312,"meta":160,"style":160},"pos=\"0 0 1\"\n",[70,533,534],{"__ignoreMap":160},[178,535,536],{"class":180,"line":181},[178,537,531],{"class":319},[19,539,540],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[387,542,544],{"id":543},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,546,547,548,551,552,555],{},"不同 ",[70,549,550],{},"type"," 的 ",[70,553,554],{},"size"," 含义不同：",[45,557,558,574],{},[48,559,560],{},[51,561,562,566,571],{},[54,563,564],{"align":56},[70,565,550],{},[54,567,568,570],{"align":56},[70,569,554],{}," 示例",[54,572,573],{"align":56},"含义",[62,575,576,590,605,624],{},[51,577,578,582,587],{},[67,579,580],{"align":56},[70,581,500],{},[67,583,584],{"align":56},[70,585,586],{},"size=\"0.1 0.2 0.3\"",[67,588,589],{"align":56},"x\u002Fy\u002Fz 半边长，不是完整长度",[51,591,592,597,602],{},[67,593,594],{"align":56},[70,595,596],{},"sphere",[67,598,599],{"align":56},[70,600,601],{},"size=\"0.1\"",[67,603,604],{"align":56},"球半径",[51,606,607,612,617],{},[67,608,609],{"align":56},[70,610,611],{},"capsule",[67,613,614],{"align":56},[70,615,616],{},"size=\"0.03\"",[67,618,619,620,623],{"align":56},"胶囊半径，长度常用 ",[70,621,622],{},"fromto"," 指定",[51,625,626,631,636],{},[67,627,628],{"align":56},[70,629,630],{},"plane",[67,632,633],{"align":56},[70,634,635],{},"size=\"3 3 0.1\"",[67,637,638],{"align":56},"可视平面大小，通常当地面",[19,640,641,642,645,646,649],{},"最容易踩坑的是 box：",[70,643,644],{},"size=\"0.1 0.1 0.1\""," 表示边长大约是 ",[70,647,648],{},"0.2","，因为 MuJoCo 用的是半边长。",[387,651,653],{"id":652},"site-是什么","site 是什么",[19,655,656,659],{},[70,657,658],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[26,661,662,665,668,671],{},[29,663,664],{},"标记机械臂末端。",[29,666,667],{},"标记目标位置。",[29,669,670],{},"放传感器或相机参考点。",[29,672,673],{},"在 Python 中读取某个关键点的世界坐标。",[19,675,676,677,404,680,683],{},"在后面的 Reacher 任务中，",[70,678,679],{},"tip",[70,681,682],{},"target"," 就会用 site 表示。",[14,685,687],{"id":686},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[154,689,693],{"className":690,"code":691,"language":692,"meta":160,"style":160},"language-python shiki shiki-themes github-light github-dark","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","python",[70,694,695,704,717,723,727,738,744,750,755,761,767,772,778,784,790,796,802,808,814,820,825,830,848,864,875,880,896,912,917,933,950,964,978,983,1006,1012,1017,1031,1044,1057,1070,1075,1080,1097],{"__ignoreMap":160},[178,696,697,701],{"class":180,"line":181},[178,698,700],{"class":699},"szBVR","import",[178,702,703],{"class":319}," mujoco\n",[178,705,706,708,711,714],{"class":180,"line":263},[178,707,700],{"class":699},[178,709,710],{"class":319}," numpy ",[178,712,713],{"class":699},"as",[178,715,716],{"class":319}," np\n",[178,718,719],{"class":180,"line":274},[178,720,722],{"emptyLinePlaceholder":721},true,"\n",[178,724,725],{"class":180,"line":354},[178,726,722],{"emptyLinePlaceholder":721},[178,728,729,732,735],{"class":180,"line":364},[178,730,731],{"class":195},"XML",[178,733,734],{"class":699}," =",[178,736,737],{"class":188}," \"\"\"\n",[178,739,741],{"class":180,"line":740},6,[178,742,743],{"class":188},"\u003Cmujoco model=\"xml_basic\">\n",[178,745,747],{"class":180,"line":746},7,[178,748,749],{"class":188},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[178,751,753],{"class":180,"line":752},8,[178,754,722],{"emptyLinePlaceholder":721},[178,756,758],{"class":180,"line":757},9,[178,759,760],{"class":188},"  \u003Cworldbody>\n",[178,762,764],{"class":180,"line":763},10,[178,765,766],{"class":188},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[178,768,770],{"class":180,"line":769},11,[178,771,722],{"emptyLinePlaceholder":721},[178,773,775],{"class":180,"line":774},12,[178,776,777],{"class":188},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[178,779,781],{"class":180,"line":780},13,[178,782,783],{"class":188},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[178,785,787],{"class":180,"line":786},14,[178,788,789],{"class":188},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[178,791,793],{"class":180,"line":792},15,[178,794,795],{"class":188},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[178,797,799],{"class":180,"line":798},16,[178,800,801],{"class":188},"    \u003C\u002Fbody>\n",[178,803,805],{"class":180,"line":804},17,[178,806,807],{"class":188},"  \u003C\u002Fworldbody>\n",[178,809,811],{"class":180,"line":810},18,[178,812,813],{"class":188},"\u003C\u002Fmujoco>\n",[178,815,817],{"class":180,"line":816},19,[178,818,819],{"class":188},"\"\"\"\n",[178,821,823],{"class":180,"line":822},20,[178,824,722],{"emptyLinePlaceholder":721},[178,826,828],{"class":180,"line":827},21,[178,829,722],{"emptyLinePlaceholder":721},[178,831,833,836,839,842,845],{"class":180,"line":832},22,[178,834,835],{"class":699},"def",[178,837,838],{"class":184}," main",[178,840,841],{"class":319},"() -> ",[178,843,844],{"class":195},"None",[178,846,847],{"class":319},":\n",[178,849,851,854,856,859,861],{"class":180,"line":850},23,[178,852,853],{"class":319},"    model ",[178,855,330],{"class":699},[178,857,858],{"class":319}," mujoco.MjModel.from_xml_string(",[178,860,731],{"class":195},[178,862,863],{"class":319},")\n",[178,865,867,870,872],{"class":180,"line":866},24,[178,868,869],{"class":319},"    data ",[178,871,330],{"class":699},[178,873,874],{"class":319}," mujoco.MjData(model)\n",[178,876,878],{"class":180,"line":877},25,[178,879,722],{"emptyLinePlaceholder":721},[178,881,883,886,888,891,894],{"class":180,"line":882},26,[178,884,885],{"class":319},"    box_body_id ",[178,887,330],{"class":699},[178,889,890],{"class":319}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[178,892,893],{"class":188},"\"red_box\"",[178,895,863],{"class":319},[178,897,899,902,904,907,910],{"class":180,"line":898},27,[178,900,901],{"class":319},"    site_id ",[178,903,330],{"class":699},[178,905,906],{"class":319}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[178,908,909],{"class":188},"\"box_center\"",[178,911,863],{"class":319},[178,913,915],{"class":180,"line":914},28,[178,916,722],{"emptyLinePlaceholder":721},[178,918,920,923,926,928,931],{"class":180,"line":919},29,[178,921,922],{"class":699},"    if",[178,924,925],{"class":319}," box_body_id ",[178,927,320],{"class":699},[178,929,930],{"class":195}," 0",[178,932,847],{"class":319},[178,934,936,939,942,945,948],{"class":180,"line":935},30,[178,937,938],{"class":699},"        raise",[178,940,941],{"class":195}," RuntimeError",[178,943,944],{"class":319},"(",[178,946,947],{"class":188},"\"body red_box not found\"",[178,949,863],{"class":319},[178,951,953,955,958,960,962],{"class":180,"line":952},31,[178,954,922],{"class":699},[178,956,957],{"class":319}," site_id ",[178,959,320],{"class":699},[178,961,930],{"class":195},[178,963,847],{"class":319},[178,965,967,969,971,973,976],{"class":180,"line":966},32,[178,968,938],{"class":699},[178,970,941],{"class":195},[178,972,944],{"class":319},[178,974,975],{"class":188},"\"site box_center not found\"",[178,977,863],{"class":319},[178,979,981],{"class":180,"line":980},33,[178,982,722],{"emptyLinePlaceholder":721},[178,984,986,989,992,995,998,1000,1003],{"class":180,"line":985},34,[178,987,988],{"class":699},"    for",[178,990,991],{"class":319}," _ ",[178,993,994],{"class":699},"in",[178,996,997],{"class":195}," range",[178,999,944],{"class":319},[178,1001,1002],{"class":195},"200",[178,1004,1005],{"class":319},"):\n",[178,1007,1009],{"class":180,"line":1008},35,[178,1010,1011],{"class":319},"        mujoco.mj_step(model, data)\n",[178,1013,1015],{"class":180,"line":1014},36,[178,1016,722],{"emptyLinePlaceholder":721},[178,1018,1020,1023,1025,1028],{"class":180,"line":1019},37,[178,1021,1022],{"class":195},"    print",[178,1024,944],{"class":319},[178,1026,1027],{"class":188},"\"simulation time:\"",[178,1029,1030],{"class":319},", data.time)\n",[178,1032,1034,1036,1038,1041],{"class":180,"line":1033},38,[178,1035,1022],{"class":195},[178,1037,944],{"class":319},[178,1039,1040],{"class":188},"\"box body position:\"",[178,1042,1043],{"class":319},", data.xpos[box_body_id].copy())\n",[178,1045,1047,1049,1051,1054],{"class":180,"line":1046},39,[178,1048,1022],{"class":195},[178,1050,944],{"class":319},[178,1052,1053],{"class":188},"\"site position:\"",[178,1055,1056],{"class":319},", data.site_xpos[site_id].copy())\n",[178,1058,1060,1062,1064,1067],{"class":180,"line":1059},40,[178,1061,1022],{"class":195},[178,1063,944],{"class":319},[178,1065,1066],{"class":188},"\"box qpos:\"",[178,1068,1069],{"class":319},", np.array(data.qpos))\n",[178,1071,1073],{"class":180,"line":1072},41,[178,1074,722],{"emptyLinePlaceholder":721},[178,1076,1078],{"class":180,"line":1077},42,[178,1079,722],{"emptyLinePlaceholder":721},[178,1081,1083,1086,1089,1092,1095],{"class":180,"line":1082},43,[178,1084,1085],{"class":699},"if",[178,1087,1088],{"class":195}," __name__",[178,1090,1091],{"class":699}," ==",[178,1093,1094],{"class":188}," \"__main__\"",[178,1096,847],{"class":319},[178,1098,1100],{"class":180,"line":1099},44,[178,1101,1102],{"class":319},"    main()\n",[19,1104,1105],{},"保存为：",[154,1107,1109],{"className":172,"code":1108,"language":174,"meta":160,"style":160},"touch ch2_xml_basic.py\n",[70,1110,1111],{"__ignoreMap":160},[178,1112,1113,1116],{"class":180,"line":181},[178,1114,1115],{"class":184},"touch",[178,1117,1118],{"class":188}," ch2_xml_basic.py\n",[19,1120,1121],{},"运行:",[154,1123,1125],{"className":172,"code":1124,"language":174,"meta":160,"style":160},"python ch2_xml_basic.py\n",[70,1126,1127],{"__ignoreMap":160},[178,1128,1129,1131],{"class":180,"line":181},[178,1130,692],{"class":184},[178,1132,1118],{"class":188},[387,1134,1135],{"id":1135},"代码逐段解释",[19,1137,1138],{},"用名字查找 body：",[154,1140,1142],{"className":690,"code":1141,"language":692,"meta":160,"style":160},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[70,1143,1144],{"__ignoreMap":160},[178,1145,1146,1149,1151,1153,1155],{"class":180,"line":181},[178,1147,1148],{"class":319},"box_body_id ",[178,1150,330],{"class":699},[178,1152,890],{"class":319},[178,1154,893],{"class":188},[178,1156,863],{"class":319},[19,1158,1159],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,1161,1162],{},"用名字查找 site：",[154,1164,1166],{"className":690,"code":1165,"language":692,"meta":160,"style":160},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[70,1167,1168],{"__ignoreMap":160},[178,1169,1170,1173,1175,1177,1179],{"class":180,"line":181},[178,1171,1172],{"class":319},"site_id ",[178,1174,330],{"class":699},[178,1176,906],{"class":319},[178,1178,909],{"class":188},[178,1180,863],{"class":319},[19,1182,1183,1184,1187,1188,1191],{},"注意第二个参数是对象类型。查 body 就用 ",[70,1185,1186],{},"mjOBJ_BODY","，查 site 就用 ",[70,1189,1190],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,1193,1194],{},"读取世界坐标：",[154,1196,1198],{"className":690,"code":1197,"language":692,"meta":160,"style":160},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[70,1199,1200,1205],{"__ignoreMap":160},[178,1201,1202],{"class":180,"line":181},[178,1203,1204],{"class":319},"data.xpos[box_body_id]\n",[178,1206,1207],{"class":180,"line":263},[178,1208,1209],{"class":319},"data.site_xpos[site_id]\n",[19,1211,1212,1215,1216,1219],{},[70,1213,1214],{},"xpos"," 是 body 的世界坐标，",[70,1217,1218],{},"site_xpos"," 是 site 的世界坐标。",[387,1221,1222],{"id":1222},"代码逐行细讲",[154,1224,1226],{"className":690,"code":1225,"language":692,"meta":160,"style":160},"import mujoco\nimport numpy as np\n",[70,1227,1228,1234],{"__ignoreMap":160},[178,1229,1230,1232],{"class":180,"line":181},[178,1231,700],{"class":699},[178,1233,703],{"class":319},[178,1235,1236,1238,1240,1242],{"class":180,"line":263},[178,1237,700],{"class":699},[178,1239,710],{"class":319},[178,1241,713],{"class":699},[178,1243,716],{"class":319},[19,1245,1246,1247,1250,1251,1254,1255,1258,1259,297],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[70,1248,1249],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[70,1252,1253],{},"as np"," 是习惯写法，后面就可以写 ",[70,1256,1257],{},"np.array(...)","、",[70,1260,1261],{},"np.round(...)",[154,1263,1265],{"className":690,"code":1264,"language":692,"meta":160,"style":160},"XML = \"\"\"\n...\n\"\"\"\n",[70,1266,1267,1275,1280],{"__ignoreMap":160},[178,1268,1269,1271,1273],{"class":180,"line":181},[178,1270,731],{"class":195},[178,1272,734],{"class":699},[178,1274,737],{"class":188},[178,1276,1277],{"class":180,"line":263},[178,1278,1279],{"class":188},"...\n",[178,1281,1282],{"class":180,"line":274},[178,1283,819],{"class":188},[19,1285,1286,1287,297],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[70,1288,1289],{},"mujoco.MjModel.from_xml_string(XML)",[154,1291,1293],{"className":310,"code":1292,"language":312,"meta":160,"style":160},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[70,1294,1295],{"__ignoreMap":160},[178,1296,1297,1299,1301,1303,1305,1307,1309,1311,1314,1316,1318,1321,1324,1326,1329],{"class":180,"line":181},[178,1298,320],{"class":319},[178,1300,658],{"class":323},[178,1302,426],{"class":184},[178,1304,330],{"class":319},[178,1306,909],{"class":188},[178,1308,434],{"class":184},[178,1310,330],{"class":319},[178,1312,1313],{"class":188},"\"0 0 0\"",[178,1315,474],{"class":184},[178,1317,330],{"class":319},[178,1319,1320],{"class":188},"\"0.03\"",[178,1322,1323],{"class":184}," rgba",[178,1325,330],{"class":319},[178,1327,1328],{"class":188},"\"0 1 0 1\"",[178,1330,458],{"class":319},[19,1332,1333,1335,1336,1339,1340,1342,1343,1346],{},[70,1334,658],{}," 是标记点。",[70,1337,1338],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[70,1341,616],{}," 表示显示出来的小球大小。",[70,1344,1345],{},"rgba=\"0 1 0 1\""," 表示绿色。",[154,1348,1349],{"className":690,"code":1141,"language":692,"meta":160,"style":160},[70,1350,1351],{"__ignoreMap":160},[178,1352,1353,1355,1357,1359,1361],{"class":180,"line":181},[178,1354,1148],{"class":319},[178,1356,330],{"class":699},[178,1358,890],{"class":319},[178,1360,893],{"class":188},[178,1362,863],{"class":319},[19,1364,1365,1366,1368],{},"这行的作用是：根据名字 ",[70,1367,893],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,1370,1371],{},"拆开看：",[26,1373,1374,1380,1386,1392],{},[29,1375,1376,1379],{},[70,1377,1378],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[29,1381,1382,1385],{},[70,1383,1384],{},"model"," 是被查询的模型。",[29,1387,1388,1391],{},[70,1389,1390],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[29,1393,1394,1396],{},[70,1395,893],{}," 是 XML 里写的名字。",[154,1398,1399],{"className":690,"code":1165,"language":692,"meta":160,"style":160},[70,1400,1401],{"__ignoreMap":160},[178,1402,1403,1405,1407,1409,1411],{"class":180,"line":181},[178,1404,1172],{"class":319},[178,1406,330],{"class":699},[178,1408,906],{"class":319},[178,1410,909],{"class":188},[178,1412,863],{"class":319},[19,1414,1415,1416,297],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[70,1417,909],{},[154,1419,1421],{"className":690,"code":1420,"language":692,"meta":160,"style":160},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[70,1422,1423,1435],{"__ignoreMap":160},[178,1424,1425,1427,1429,1431,1433],{"class":180,"line":181},[178,1426,1085],{"class":699},[178,1428,925],{"class":319},[178,1430,320],{"class":699},[178,1432,930],{"class":195},[178,1434,847],{"class":319},[178,1436,1437,1440,1442,1444,1446],{"class":180,"line":263},[178,1438,1439],{"class":699},"    raise",[178,1441,941],{"class":195},[178,1443,944],{"class":319},[178,1445,947],{"class":188},[178,1447,863],{"class":319},[19,1449,1450,1452,1453,1456,1457,1460,1461,1464],{},[70,1451,1085],{}," 是条件判断。",[70,1454,1455],{},"mj_name2id"," 找不到对象时会返回 ",[70,1458,1459],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[70,1462,1463],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[154,1466,1468],{"className":690,"code":1467,"language":692,"meta":160,"style":160},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[70,1469,1470,1487],{"__ignoreMap":160},[178,1471,1472,1475,1477,1479,1481,1483,1485],{"class":180,"line":181},[178,1473,1474],{"class":699},"for",[178,1476,991],{"class":319},[178,1478,994],{"class":699},[178,1480,997],{"class":195},[178,1482,944],{"class":319},[178,1484,1002],{"class":195},[178,1486,1005],{"class":319},[178,1488,1489],{"class":180,"line":263},[178,1490,1491],{"class":319},"    mujoco.mj_step(model, data)\n",[19,1493,1494],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[154,1496,1498],{"className":690,"code":1497,"language":692,"meta":160,"style":160},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[70,1499,1500],{"__ignoreMap":160},[178,1501,1502,1505,1507,1509],{"class":180,"line":181},[178,1503,1504],{"class":195},"print",[178,1506,944],{"class":319},[178,1508,1040],{"class":188},[178,1510,1043],{"class":319},[19,1512,1513,1516,1517,1520],{},[70,1514,1515],{},"data.xpos"," 保存所有 body 的世界坐标。",[70,1518,1519],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[154,1522,1524],{"className":690,"code":1523,"language":692,"meta":160,"style":160},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[70,1525,1526],{"__ignoreMap":160},[178,1527,1528,1530,1532,1534],{"class":180,"line":181},[178,1529,1504],{"class":195},[178,1531,944],{"class":319},[178,1533,1053],{"class":188},[178,1535,1056],{"class":319},[19,1537,1538,1541,1542,1544],{},[70,1539,1540],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[70,1543,407],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[154,1546,1548],{"className":690,"code":1547,"language":692,"meta":160,"style":160},"print(\"box qpos:\", np.array(data.qpos))\n",[70,1549,1550],{"__ignoreMap":160},[178,1551,1552,1554,1556,1558],{"class":180,"line":181},[178,1553,1504],{"class":195},[178,1555,944],{"class":319},[178,1557,1066],{"class":188},[178,1559,1069],{"class":319},[19,1561,1562,1563,1566],{},"这里打印广义位置数组。",[70,1564,1565],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,1568,1570],{"id":1569},"_5运行结果说明","5.运行结果说明",[19,1572,1573,1574,1577,1578,297],{},"程序会输出 ",[70,1575,1576],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[70,1579,1580],{},"qpos",[19,1582,1583,1585,1586,1589,1590,1593],{},[70,1584,1519],{}," 是 body 的世界坐标位置。",[70,1587,1588],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[70,1591,1592],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,1595,1596,1597,551,1599,1601],{},"如果 ",[70,1598,407],{},[70,1600,1338],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,1603,1604],{},"如果你把 site 改成：",[154,1606,1608],{"className":310,"code":1607,"language":312,"meta":160,"style":160},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[70,1609,1610],{"__ignoreMap":160},[178,1611,1612,1614,1616,1618,1620,1623,1625,1627,1630,1632,1634,1636,1638,1640,1642],{"class":180,"line":181},[178,1613,320],{"class":319},[178,1615,658],{"class":323},[178,1617,426],{"class":184},[178,1619,330],{"class":319},[178,1621,1622],{"class":188},"\"box_top\"",[178,1624,434],{"class":184},[178,1626,330],{"class":319},[178,1628,1629],{"class":188},"\"0 0 0.15\"",[178,1631,474],{"class":184},[178,1633,330],{"class":319},[178,1635,1320],{"class":188},[178,1637,1323],{"class":184},[178,1639,330],{"class":319},[178,1641,1328],{"class":188},[178,1643,458],{"class":319},[19,1645,1646,1647,1650],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[70,1648,1649],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,1652,1654],{"id":1653},"_6验证步骤","6.验证步骤",[26,1656,1657,1670,1673,1680,1686,1698],{},[29,1658,1659,1660,1662,1663,1666,1667,297],{},"把 ",[70,1661,411],{}," 的初始高度从 ",[70,1664,1665],{},"1"," 改成 ",[70,1668,1669],{},"2",[29,1671,1672],{},"重新运行程序。",[29,1674,1675,1676,1679],{},"观察 ",[70,1677,1678],{},"box qpos"," 和最终位置是否变化。",[29,1681,1682,1683,1685],{},"故意把 ",[70,1684,658],{}," 名称改错，确认程序能报错。",[29,1687,1659,1688,1690,1691,1666,1694,1697],{},[70,1689,380],{}," 的颜色 ",[70,1692,1693],{},"rgba=\"1 0 0 1\"",[70,1695,1696],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[29,1699,1659,1700,551,1702,1666,1705,1708,1709,1711],{},[70,1701,407],{},[70,1703,1704],{},"pos",[70,1706,1707],{},"0 0 0.2","，观察 ",[70,1710,1649],{}," 如何变化。",[14,1713,1715],{"id":1714},"_7常见错误与解决方案","7.常见错误与解决方案",[387,1717,1719],{"id":1718},"xml-error-schema-violation",[70,1720,1721],{},"XML Error: Schema violation",[19,1723,1724],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[387,1726,1728,1730,1731],{"id":1727},"mj_name2id-返回-1",[70,1729,1455],{}," 返回 ",[70,1732,1459],{},[19,1734,1735,1736,1739],{},"说明名字没有找到。检查 XML 中 ",[70,1737,1738],{},"name=\"...\"","，并确认对象类型正确。",[387,1741,1742],{"id":1742},"物体不下落",[19,1744,1745],{},"检查:",[26,1747,1748,1753,1759],{},[29,1749,1750,1751],{},"body 是否有 ",[70,1752,448],{},[29,1754,1755,1756],{},"gravity 是否为 ",[70,1757,1758],{},"0 0 -9.81",[29,1760,1761,1762,1764],{},"body 是否被固定在 ",[70,1763,344],{}," 中",[387,1766,1767],{"id":1767},"坐标看起来不符合预期",[19,1769,1770],{},"先区分两种坐标：",[45,1772,1773,1782],{},[48,1774,1775],{},[51,1776,1777,1780],{},[54,1778,1779],{"align":56},"坐标",[54,1781,573],{"align":56},[62,1783,1784,1794],{},[51,1785,1786,1791],{},[67,1787,1788,1789],{"align":56},"XML 里的 ",[70,1790,1704],{},[67,1792,1793],{"align":56},"相对父 body 的局部坐标",[51,1795,1796,1802],{},[67,1797,1798,123,1800],{"align":56},[70,1799,1515],{},[70,1801,1540],{},[67,1803,1804],{"align":56},"仿真更新后的世界坐标",[19,1806,1807,1808,1811,1812,1815,1816,1819],{},"如果你修改了 ",[70,1809,1810],{},"data.qpos","，但还没调用 ",[70,1813,1814],{},"mj_forward"," 或 ",[70,1817,1818],{},"mj_step","，世界坐标可能还没有更新。",[14,1821,1823],{"id":1822},"_8本章小结","8.本章小结",[19,1825,1826],{},"MJCF 建模先掌握四件事：",[26,1828,1829,1834,1839,1844],{},[29,1830,1831,1833],{},[70,1832,376],{}," 表示刚体层级。",[29,1835,1836,1838],{},[70,1837,380],{}," 表示形状、碰撞和质量。",[29,1840,1841,1843],{},[70,1842,384],{}," 决定 body 能不能动、怎么动。",[29,1845,1846,1848],{},[70,1847,658],{}," 用来标记关键点，方便 Python 读取位置。",[19,1850,1851],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[1853,1854,1855],"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 .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":160,"searchDepth":263,"depth":263,"links":1857},[1858,1859,1860,1866,1870,1871,1872,1879],{"id":16,"depth":263,"text":17},{"id":165,"depth":263,"text":166},{"id":303,"depth":263,"text":304,"children":1861},[1862,1863,1864,1865],{"id":389,"depth":274,"text":389},{"id":516,"depth":274,"text":516},{"id":543,"depth":274,"text":544},{"id":652,"depth":274,"text":653},{"id":686,"depth":263,"text":687,"children":1867},[1868,1869],{"id":1135,"depth":274,"text":1135},{"id":1222,"depth":274,"text":1222},{"id":1569,"depth":263,"text":1570},{"id":1653,"depth":263,"text":1654},{"id":1714,"depth":263,"text":1715,"children":1873},[1874,1875,1877,1878],{"id":1718,"depth":274,"text":1721},{"id":1727,"depth":274,"text":1876},"mj_name2id 返回 -1",{"id":1742,"depth":274,"text":1742},{"id":1767,"depth":274,"text":1767},{"id":1822,"depth":263,"text":1823},"md",{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":5,"description":160},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",[1887,6933,8039,9459,12440,13791,15280,16368,25129,25142,25736,25762,25886,26127,26192,26210,26223,26270,26393,26562,26760,26939,27144,27280,27375,27412,27425,27735,28473,29181,29202,30221,31851,32002,32015,32027,32323,52125,52140,52157,52190,55054,78398,94538,94559,94672,94793,95563,96226,96587,96625,96731,96831,96874,96900,96961,98613,98714,98739,99230,99730,100810,101093,101835,102337,102349,104284,105681,107184,108882,110799,112718,114740,118210,118642,119105,119854,122798,123146,123168,123524,126831,126843,127246,127269,127416,127583,127788,128089,128646,129303,131234,132832,133481,134975,136406,137641,139335,141087,143497,143613,144548,144759,145644,146879,147107,147120,148275,150687,153055,156376,158853,160497,162274,164287,167339,169519,172046,174240],{"id":1888,"title":1889,"body":1890,"description":160,"extension":1880,"meta":6928,"navigation":721,"path":6929,"seo":6930,"stem":6931,"__hash__":6932},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":1891,"toc":6900},[1892,1895,1899,1902,1906,1917,1921,1925,1928,1931,1934,1937,1940,1966,1970,1973,1976,1979,1982,2032,2036,2054,2056,2070,2073,2081,2084,2938,2945,2962,2966,3052,3056,3062,3148,3152,3190,3194,3258,3262,3266,3273,3284,3288,3293,3297,3302,3306,3311,3315,3319,3324,3573,3578,3716,3721,3976,3979,3987,3991,3996,4099,4102,4400,4409,4510,4513,4516,4519,4522,4782,4787,4925,4928,5106,5109,5237,5240,5392,5396,5401,5404,5415,5423,5426,5532,5536,5540,5545,5595,5600,5605,5629,5634,5687,5690,5695,5871,5876,6161,6166,6563,6567,6572,6629,6634,6642,6645,6785,6788,6897],[10,1893,1889],{"id":1894},"_1基础入门",[14,1896,1898],{"id":1897},"_11注释","1.1注释",[19,1900,1901],{},"\u002F\u002F或者\u002F* *\u002F",[14,1903,1905],{"id":1904},"_12命名","1.2命名",[26,1907,1908,1911,1914],{},[29,1909,1910],{},"字母数字下划线",[29,1912,1913],{},"开头必须是字母或_",[29,1915,1916],{},"不能使用关键词",[14,1918,1920],{"id":1919},"_13数据类型","1.3数据类型",[387,1922,1924],{"id":1923},"_131整形","1.3.1整形",[19,1926,1927],{},"short 短整形 2",[19,1929,1930],{},"int 整形 4",[19,1932,1933],{},"long 长整形 win4 linux32位4 linux64位8",[19,1935,1936],{},"long long 长长整形 8",[19,1938,1939],{},"利用sizeof可以求数据类型占用的内存空间大小",[154,1941,1945],{"className":1942,"code":1943,"language":1944,"meta":160,"style":160},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[70,1946,1947,1959],{"__ignoreMap":160},[178,1948,1949,1952,1954,1957],{"class":180,"line":181},[178,1950,1951],{"class":699},"sizeof",[178,1953,944],{"class":319},[178,1955,1956],{"class":699},"int",[178,1958,863],{"class":319},[178,1960,1961,1963],{"class":180,"line":263},[178,1962,1951],{"class":699},[178,1964,1965],{"class":319},"(num)\n",[387,1967,1969],{"id":1968},"_132浮点型","1.3.2浮点型",[19,1971,1972],{},"float 单精度 4节 7位有效数字",[19,1974,1975],{},"double 双精度 8节 15-16有效数字",[19,1977,1978],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,1980,1981],{},"注意点：",[154,1983,1985],{"className":1942,"code":1984,"language":1944,"meta":160,"style":160},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[70,1986,1987,2010],{"__ignoreMap":160},[178,1988,1989,1992,1995,1997,2000,2003,2006],{"class":180,"line":181},[178,1990,1991],{"class":699},"float",[178,1993,1994],{"class":319}," f1",[178,1996,330],{"class":699},[178,1998,1999],{"class":195},"3.14",[178,2001,2002],{"class":699},"f",[178,2004,2005],{"class":319},";",[178,2007,2009],{"class":2008},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[178,2011,2012,2014,2017,2019,2022,2025,2027,2029],{"class":180,"line":263},[178,2013,1991],{"class":699},[178,2015,2016],{"class":319}," f2",[178,2018,330],{"class":699},[178,2020,2021],{"class":195},"3",[178,2023,2024],{"class":699},"e",[178,2026,1669],{"class":195},[178,2028,2005],{"class":319},[178,2030,2031],{"class":2008}," \u002F\u002F科学记数法\n",[387,2033,2035],{"id":2034},"_133字符型","1.3.3字符型",[154,2037,2039],{"className":1942,"code":2038,"language":1944,"meta":160,"style":160},"char ch='a'\n",[70,2040,2041],{"__ignoreMap":160},[178,2042,2043,2046,2049,2051],{"class":180,"line":181},[178,2044,2045],{"class":699},"char",[178,2047,2048],{"class":319}," ch",[178,2050,330],{"class":699},[178,2052,2053],{"class":188},"'a'\n",[19,2055,1981],{},[26,2057,2058,2061,2064,2067],{},[29,2059,2060],{},"在显示字符型变量时，只能单引号，双引号x",[29,2062,2063],{},"单引号内只能一个字符，不能字符串",[29,2065,2066],{},"c和c++字符型变量只占用一个字符",[29,2068,2069],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,2071,2072],{},"ASCII码大致由以下两部分组成：",[26,2074,2075,2078],{},[29,2076,2077],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[29,2079,2080],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,2082,2083],{},"ASCII码表格：",[45,2085,2086,2127],{},[48,2087,2088],{},[51,2089,2090,2097,2102,2106,2111,2115,2119,2123],{},[54,2091,2092,2096],{},[2093,2094,2095],"strong",{},"ASCII","值",[54,2098,2099],{},[2093,2100,2101],{},"控制字符",[54,2103,2104,2096],{},[2093,2105,2095],{},[54,2107,2108],{},[2093,2109,2110],{},"字符",[54,2112,2113,2096],{},[2093,2114,2095],{},[54,2116,2117],{},[2093,2118,2110],{},[54,2120,2121,2096],{},[2093,2122,2095],{},[54,2124,2125],{},[2093,2126,2110],{},[62,2128,2129,2154,2179,2204,2229,2255,2280,2305,2331,2356,2382,2408,2434,2459,2485,2511,2537,2561,2586,2611,2636,2661,2686,2711,2736,2761,2786,2812,2837,2861,2886,2912],{},[51,2130,2131,2134,2137,2140,2143,2146,2149,2152],{},[67,2132,2133],{},"0",[67,2135,2136],{},"NUT",[67,2138,2139],{},"32",[67,2141,2142],{},"(space)",[67,2144,2145],{},"64",[67,2147,2148],{},"@",[67,2150,2151],{},"96",[67,2153,1258],{},[51,2155,2156,2158,2161,2164,2167,2170,2173,2176],{},[67,2157,1665],{},[67,2159,2160],{},"SOH",[67,2162,2163],{},"33",[67,2165,2166],{},"!",[67,2168,2169],{},"65",[67,2171,2172],{},"A",[67,2174,2175],{},"97",[67,2177,2178],{},"a",[51,2180,2181,2183,2186,2189,2192,2195,2198,2201],{},[67,2182,1669],{},[67,2184,2185],{},"STX",[67,2187,2188],{},"34",[67,2190,2191],{},"\"",[67,2193,2194],{},"66",[67,2196,2197],{},"B",[67,2199,2200],{},"98",[67,2202,2203],{},"b",[51,2205,2206,2208,2211,2214,2217,2220,2223,2226],{},[67,2207,2021],{},[67,2209,2210],{},"ETX",[67,2212,2213],{},"35",[67,2215,2216],{},"#",[67,2218,2219],{},"67",[67,2221,2222],{},"C",[67,2224,2225],{},"99",[67,2227,2228],{},"c",[51,2230,2231,2234,2237,2240,2243,2246,2249,2252],{},[67,2232,2233],{},"4",[67,2235,2236],{},"EOT",[67,2238,2239],{},"36",[67,2241,2242],{},"$",[67,2244,2245],{},"68",[67,2247,2248],{},"D",[67,2250,2251],{},"100",[67,2253,2254],{},"d",[51,2256,2257,2260,2263,2266,2269,2272,2275,2278],{},[67,2258,2259],{},"5",[67,2261,2262],{},"ENQ",[67,2264,2265],{},"37",[67,2267,2268],{},"%",[67,2270,2271],{},"69",[67,2273,2274],{},"E",[67,2276,2277],{},"101",[67,2279,2024],{},[51,2281,2282,2285,2288,2291,2294,2297,2300,2303],{},[67,2283,2284],{},"6",[67,2286,2287],{},"ACK",[67,2289,2290],{},"38",[67,2292,2293],{},"&",[67,2295,2296],{},"70",[67,2298,2299],{},"F",[67,2301,2302],{},"102",[67,2304,2002],{},[51,2306,2307,2310,2313,2316,2319,2322,2325,2328],{},[67,2308,2309],{},"7",[67,2311,2312],{},"BEL",[67,2314,2315],{},"39",[67,2317,2318],{},",",[67,2320,2321],{},"71",[67,2323,2324],{},"G",[67,2326,2327],{},"103",[67,2329,2330],{},"g",[51,2332,2333,2336,2339,2342,2344,2347,2350,2353],{},[67,2334,2335],{},"8",[67,2337,2338],{},"BS",[67,2340,2341],{},"40",[67,2343,944],{},[67,2345,2346],{},"72",[67,2348,2349],{},"H",[67,2351,2352],{},"104",[67,2354,2355],{},"h",[51,2357,2358,2361,2364,2367,2370,2373,2376,2379],{},[67,2359,2360],{},"9",[67,2362,2363],{},"HT",[67,2365,2366],{},"41",[67,2368,2369],{},")",[67,2371,2372],{},"73",[67,2374,2375],{},"I",[67,2377,2378],{},"105",[67,2380,2381],{},"i",[51,2383,2384,2387,2390,2393,2396,2399,2402,2405],{},[67,2385,2386],{},"10",[67,2388,2389],{},"LF",[67,2391,2392],{},"42",[67,2394,2395],{},"*",[67,2397,2398],{},"74",[67,2400,2401],{},"J",[67,2403,2404],{},"106",[67,2406,2407],{},"j",[51,2409,2410,2413,2416,2419,2422,2425,2428,2431],{},[67,2411,2412],{},"11",[67,2414,2415],{},"VT",[67,2417,2418],{},"43",[67,2420,2421],{},"+",[67,2423,2424],{},"75",[67,2426,2427],{},"K",[67,2429,2430],{},"107",[67,2432,2433],{},"k",[51,2435,2436,2439,2442,2445,2447,2450,2453,2456],{},[67,2437,2438],{},"12",[67,2440,2441],{},"FF",[67,2443,2444],{},"44",[67,2446,2318],{},[67,2448,2449],{},"76",[67,2451,2452],{},"L",[67,2454,2455],{},"108",[67,2457,2458],{},"l",[51,2460,2461,2464,2467,2470,2473,2476,2479,2482],{},[67,2462,2463],{},"13",[67,2465,2466],{},"CR",[67,2468,2469],{},"45",[67,2471,2472],{},"-",[67,2474,2475],{},"77",[67,2477,2478],{},"M",[67,2480,2481],{},"109",[67,2483,2484],{},"m",[51,2486,2487,2490,2493,2496,2499,2502,2505,2508],{},[67,2488,2489],{},"14",[67,2491,2492],{},"SO",[67,2494,2495],{},"46",[67,2497,2498],{},".",[67,2500,2501],{},"78",[67,2503,2504],{},"N",[67,2506,2507],{},"110",[67,2509,2510],{},"n",[51,2512,2513,2516,2519,2522,2525,2528,2531,2534],{},[67,2514,2515],{},"15",[67,2517,2518],{},"SI",[67,2520,2521],{},"47",[67,2523,2524],{},"\u002F",[67,2526,2527],{},"79",[67,2529,2530],{},"O",[67,2532,2533],{},"111",[67,2535,2536],{},"o",[51,2538,2539,2542,2545,2548,2550,2553,2556,2559],{},[67,2540,2541],{},"16",[67,2543,2544],{},"DLE",[67,2546,2547],{},"48",[67,2549,2133],{},[67,2551,2552],{},"80",[67,2554,2555],{},"P",[67,2557,2558],{},"112",[67,2560,19],{},[51,2562,2563,2566,2569,2572,2574,2577,2580,2583],{},[67,2564,2565],{},"17",[67,2567,2568],{},"DCI",[67,2570,2571],{},"49",[67,2573,1665],{},[67,2575,2576],{},"81",[67,2578,2579],{},"Q",[67,2581,2582],{},"113",[67,2584,2585],{},"q",[51,2587,2588,2591,2594,2597,2599,2602,2605,2608],{},[67,2589,2590],{},"18",[67,2592,2593],{},"DC2",[67,2595,2596],{},"50",[67,2598,1669],{},[67,2600,2601],{},"82",[67,2603,2604],{},"R",[67,2606,2607],{},"114",[67,2609,2610],{},"r",[51,2612,2613,2616,2619,2622,2624,2627,2630,2633],{},[67,2614,2615],{},"19",[67,2617,2618],{},"DC3",[67,2620,2621],{},"51",[67,2623,2021],{},[67,2625,2626],{},"83",[67,2628,2629],{},"S",[67,2631,2632],{},"115",[67,2634,2635],{},"s",[51,2637,2638,2641,2644,2647,2649,2652,2655,2658],{},[67,2639,2640],{},"20",[67,2642,2643],{},"DC4",[67,2645,2646],{},"52",[67,2648,2233],{},[67,2650,2651],{},"84",[67,2653,2654],{},"T",[67,2656,2657],{},"116",[67,2659,2660],{},"t",[51,2662,2663,2666,2669,2672,2674,2677,2680,2683],{},[67,2664,2665],{},"21",[67,2667,2668],{},"NAK",[67,2670,2671],{},"53",[67,2673,2259],{},[67,2675,2676],{},"85",[67,2678,2679],{},"U",[67,2681,2682],{},"117",[67,2684,2685],{},"u",[51,2687,2688,2691,2694,2697,2699,2702,2705,2708],{},[67,2689,2690],{},"22",[67,2692,2693],{},"SYN",[67,2695,2696],{},"54",[67,2698,2284],{},[67,2700,2701],{},"86",[67,2703,2704],{},"V",[67,2706,2707],{},"118",[67,2709,2710],{},"v",[51,2712,2713,2716,2719,2722,2724,2727,2730,2733],{},[67,2714,2715],{},"23",[67,2717,2718],{},"TB",[67,2720,2721],{},"55",[67,2723,2309],{},[67,2725,2726],{},"87",[67,2728,2729],{},"W",[67,2731,2732],{},"119",[67,2734,2735],{},"w",[51,2737,2738,2741,2744,2747,2749,2752,2755,2758],{},[67,2739,2740],{},"24",[67,2742,2743],{},"CAN",[67,2745,2746],{},"56",[67,2748,2335],{},[67,2750,2751],{},"88",[67,2753,2754],{},"X",[67,2756,2757],{},"120",[67,2759,2760],{},"x",[51,2762,2763,2766,2769,2772,2774,2777,2780,2783],{},[67,2764,2765],{},"25",[67,2767,2768],{},"EM",[67,2770,2771],{},"57",[67,2773,2360],{},[67,2775,2776],{},"89",[67,2778,2779],{},"Y",[67,2781,2782],{},"121",[67,2784,2785],{},"y",[51,2787,2788,2791,2794,2797,2800,2803,2806,2809],{},[67,2789,2790],{},"26",[67,2792,2793],{},"SUB",[67,2795,2796],{},"58",[67,2798,2799],{},":",[67,2801,2802],{},"90",[67,2804,2805],{},"Z",[67,2807,2808],{},"122",[67,2810,2811],{},"z",[51,2813,2814,2817,2820,2823,2825,2828,2831,2834],{},[67,2815,2816],{},"27",[67,2818,2819],{},"ESC",[67,2821,2822],{},"59",[67,2824,2005],{},[67,2826,2827],{},"91",[67,2829,2830],{},"[",[67,2832,2833],{},"123",[67,2835,2836],{},"{",[51,2838,2839,2842,2845,2848,2850,2853,2855,2858],{},[67,2840,2841],{},"28",[67,2843,2844],{},"FS",[67,2846,2847],{},"60",[67,2849,320],{},[67,2851,2852],{},"92",[67,2854,2524],{},[67,2856,2857],{},"124",[67,2859,2860],{},"|",[51,2862,2863,2866,2869,2872,2874,2877,2880,2883],{},[67,2864,2865],{},"29",[67,2867,2868],{},"GS",[67,2870,2871],{},"61",[67,2873,330],{},[67,2875,2876],{},"93",[67,2878,2879],{},"]",[67,2881,2882],{},"125",[67,2884,2885],{},"}",[51,2887,2888,2891,2894,2897,2900,2903,2906,2909],{},[67,2889,2890],{},"30",[67,2892,2893],{},"RS",[67,2895,2896],{},"62",[67,2898,2899],{},">",[67,2901,2902],{},"94",[67,2904,2905],{},"^",[67,2907,2908],{},"126",[67,2910,2911],{},"`",[51,2913,2914,2917,2920,2923,2926,2929,2932,2935],{},[67,2915,2916],{},"31",[67,2918,2919],{},"US",[67,2921,2922],{},"63",[67,2924,2925],{},"?",[67,2927,2928],{},"95",[67,2930,2931],{},"_",[67,2933,2934],{},"127",[67,2936,2937],{},"DEL",[19,2939,2940,2941,2944],{},"ASCII 码大致由以下",[2093,2942,2943],{},"两部分组","成：",[2946,2947,2948,2955],"ul",{},[29,2949,2950,2951,2954],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[2093,2952,2953],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[29,2956,2957,2958,2961],{},"ASCII 打印字符：数字 ",[2093,2959,2960],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[387,2963,2965],{"id":2964},"_134转义字符","1.3.4转义字符",[154,2967,2969],{"className":1942,"code":2968,"language":1944,"meta":160,"style":160},"\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",[70,2970,2971,2976,2992,3006,3011,3024,3029],{"__ignoreMap":160},[178,2972,2973],{"class":180,"line":181},[178,2974,2975],{"class":2008},"\u002F\u002F换行符\n",[178,2977,2978,2981,2984,2987,2989],{"class":180,"line":263},[178,2979,2980],{"class":319},"cout ",[178,2982,2983],{"class":699},"\u003C\u003C",[178,2985,2986],{"class":188},"\"hello world\u002Fn\"",[178,2988,2005],{"class":319},[178,2990,2991],{"class":2008}," \u002F\u002F就等同于如下：\n",[178,2993,2994,2996,2998,3001,3003],{"class":180,"line":274},[178,2995,2980],{"class":319},[178,2997,2983],{"class":699},[178,2999,3000],{"class":188},"\"hello world\"",[178,3002,2983],{"class":699},[178,3004,3005],{"class":319},"endl;\n",[178,3007,3008],{"class":180,"line":354},[178,3009,3010],{"class":2008},"\u002F\u002F反斜杠\n",[178,3012,3013,3015,3017,3020,3022],{"class":180,"line":364},[178,3014,2980],{"class":319},[178,3016,2983],{"class":699},[178,3018,3019],{"class":188},"\"\u002F\u002F\"",[178,3021,2983],{"class":699},[178,3023,3005],{"class":319},[178,3025,3026],{"class":180,"line":740},[178,3027,3028],{"class":2008},"\u002F\u002F水平制表符\n",[178,3030,3031,3033,3035,3038,3041,3044,3046,3049],{"class":180,"line":746},[178,3032,2980],{"class":319},[178,3034,2983],{"class":699},[178,3036,3037],{"class":188},"\"aaaa",[178,3039,3040],{"class":195},"\\t",[178,3042,3043],{"class":188},"helloworld\"",[178,3045,2983],{"class":699},[178,3047,3048],{"class":319},"endl;",[178,3050,3051],{"class":2008}," \u002F\u002F输出窗口时有对齐效果\n",[387,3053,3055],{"id":3054},"_135字符串型","1.3.5字符串型",[19,3057,3058,3059,3061],{},"char 变量名",[178,3060],{},"=\"字符串值\"",[154,3063,3065],{"className":1942,"code":3064,"language":1944,"meta":160,"style":160},"\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",[70,3066,3067,3072,3077,3082,3087,3101,3114,3119,3124,3135],{"__ignoreMap":160},[178,3068,3069],{"class":180,"line":181},[178,3070,3071],{"class":2008},"\u002F\u002Fc风格字符串\n",[178,3073,3074],{"class":180,"line":263},[178,3075,3076],{"class":2008},"\u002F\u002F注意事项：\n",[178,3078,3079],{"class":180,"line":274},[178,3080,3081],{"class":2008},"\u002F\u002F1.char字符串名[]\n",[178,3083,3084],{"class":180,"line":354},[178,3085,3086],{"class":2008},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[178,3088,3089,3091,3094,3096,3098],{"class":180,"line":364},[178,3090,2045],{"class":699},[178,3092,3093],{"class":319}," str[]",[178,3095,330],{"class":699},[178,3097,3000],{"class":188},[178,3099,3100],{"class":319},";\n",[178,3102,3103,3105,3107,3110,3112],{"class":180,"line":740},[178,3104,2980],{"class":319},[178,3106,2983],{"class":699},[178,3108,3109],{"class":319},"str",[178,3111,2983],{"class":699},[178,3113,3005],{"class":319},[178,3115,3116],{"class":180,"line":746},[178,3117,3118],{"class":2008},"\u002F\u002Fc++风格字符串\n",[178,3120,3121],{"class":180,"line":752},[178,3122,3123],{"class":2008},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[178,3125,3126,3129,3131,3133],{"class":180,"line":757},[178,3127,3128],{"class":319},"string str2",[178,3130,330],{"class":699},[178,3132,3000],{"class":188},[178,3134,3100],{"class":319},[178,3136,3137,3139,3141,3144,3146],{"class":180,"line":763},[178,3138,2980],{"class":319},[178,3140,2983],{"class":699},[178,3142,3143],{"class":319},"str2",[178,3145,2983],{"class":699},[178,3147,3005],{"class":319},[387,3149,3151],{"id":3150},"_136布尔类型bool","1.3.6布尔类型bool",[154,3153,3155],{"className":1942,"code":3154,"language":1944,"meta":160,"style":160},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[70,3156,3157,3172],{"__ignoreMap":160},[178,3158,3159,3162,3165,3167,3170],{"class":180,"line":181},[178,3160,3161],{"class":699},"bool",[178,3163,3164],{"class":319}," flag",[178,3166,330],{"class":699},[178,3168,3169],{"class":195},"true",[178,3171,3100],{"class":319},[178,3173,3174,3177,3180,3183,3185,3187],{"class":180,"line":263},[178,3175,3176],{"class":319},"cout",[178,3178,3179],{"class":699},"\u003C\u003Csizeof",[178,3181,3182],{"class":319},"(flag)",[178,3184,2983],{"class":699},[178,3186,3048],{"class":319},[178,3188,3189],{"class":2008}," \u002F\u002F查看布尔占内存空间\n",[14,3191,3193],{"id":3192},"_14键盘输入cin","1.4键盘输入cin",[154,3195,3197],{"className":1942,"code":3196,"language":1944,"meta":160,"style":160},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[70,3198,3199,3212,3229,3240],{"__ignoreMap":160},[178,3200,3201,3203,3206,3208,3210],{"class":180,"line":181},[178,3202,1956],{"class":699},[178,3204,3205],{"class":319}," a",[178,3207,330],{"class":699},[178,3209,2133],{"class":195},[178,3211,3100],{"class":319},[178,3213,3214,3216,3218,3221,3223,3225,3227],{"class":180,"line":263},[178,3215,3176],{"class":319},[178,3217,2983],{"class":699},[178,3219,3220],{"class":188},"\"请给整型变量a赋值\"",[178,3222,2983],{"class":699},[178,3224,2178],{"class":319},[178,3226,2983],{"class":699},[178,3228,3005],{"class":319},[178,3230,3231,3234,3237],{"class":180,"line":274},[178,3232,3233],{"class":319},"cin ",[178,3235,3236],{"class":699},">>",[178,3238,3239],{"class":319}," a;\n",[178,3241,3242,3244,3246,3249,3252,3254,3256],{"class":180,"line":354},[178,3243,2980],{"class":319},[178,3245,2983],{"class":699},[178,3247,3248],{"class":188}," \"整型变量a=\"",[178,3250,3251],{"class":699}," \u003C\u003C",[178,3253,2178],{"class":319},[178,3255,2983],{"class":699},[178,3257,3005],{"class":319},[14,3259,3261],{"id":3260},"_15运算符","1.5运算符",[387,3263,3265],{"id":3264},"_151算术运算符","1.5.1算术运算符",[19,3267,3268,3272],{},[3269,3270],"img",{"alt":160,"src":3271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[26,3274,3275,3278,3281],{},[29,3276,3277],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[29,3279,3280],{},"两个小数不可以做取模运算",[29,3282,3283],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[387,3285,3287],{"id":3286},"_152赋值运算符","1.5.2赋值运算符",[19,3289,3290],{},[3269,3291],{"alt":160,"src":3292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[387,3294,3296],{"id":3295},"_153比较运算符","1.5.3比较运算符",[19,3298,3299],{},[3269,3300],{"alt":160,"src":3301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[387,3303,3305],{"id":3304},"_154逻辑运算符","1.5.4逻辑运算符",[19,3307,3308],{},[3269,3309],{"alt":160,"src":3310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3312,3314],{"id":3313},"_16程序流程结构","1.6程序流程结构",[387,3316,3318],{"id":3317},"_161选择结构","1.6.1选择结构",[26,3320,3321],{},[29,3322,3323],{},"if语句\n单行、多行、多条件if语句",[154,3325,3327],{"className":1942,"code":3326,"language":1944,"meta":160,"style":160},"\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",[70,3328,3329,3334,3348,3353,3367,3372,3377,3386,3399,3403,3416,3420,3425,3429,3442,3446,3451,3471,3475,3488,3492,3519,3523,3539,3543,3547,3551,3564,3568],{"__ignoreMap":160},[178,3330,3331],{"class":180,"line":181},[178,3332,3333],{"class":2008},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[178,3335,3336,3338,3341,3343,3346],{"class":180,"line":263},[178,3337,1085],{"class":699},[178,3339,3340],{"class":319},"(score",[178,3342,2899],{"class":699},[178,3344,3345],{"class":195},"600",[178,3347,863],{"class":319},[178,3349,3350],{"class":180,"line":274},[178,3351,3352],{"class":319},"{\n",[178,3354,3355,3358,3360,3363,3365],{"class":180,"line":354},[178,3356,3357],{"class":319},"    cout",[178,3359,2983],{"class":699},[178,3361,3362],{"class":188},"'这是单行if语句'",[178,3364,2983],{"class":699},[178,3366,3005],{"class":319},[178,3368,3369],{"class":180,"line":364},[178,3370,3371],{"class":319},"}\n",[178,3373,3374],{"class":180,"line":740},[178,3375,3376],{"class":2008},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[178,3378,3379,3381,3383],{"class":180,"line":746},[178,3380,3233],{"class":319},[178,3382,3236],{"class":699},[178,3384,3385],{"class":319}," score\n",[178,3387,3388,3390,3392,3395,3397],{"class":180,"line":752},[178,3389,1085],{"class":699},[178,3391,3340],{"class":319},[178,3393,3394],{"class":699},"\u003C=",[178,3396,3345],{"class":195},[178,3398,863],{"class":319},[178,3400,3401],{"class":180,"line":757},[178,3402,3352],{"class":319},[178,3404,3405,3407,3409,3412,3414],{"class":180,"line":763},[178,3406,3357],{"class":319},[178,3408,3236],{"class":699},[178,3410,3411],{"class":188},"\"小于等于600\"",[178,3413,2983],{"class":699},[178,3415,3005],{"class":319},[178,3417,3418],{"class":180,"line":769},[178,3419,3371],{"class":319},[178,3421,3422],{"class":180,"line":774},[178,3423,3424],{"class":699},"else\n",[178,3426,3427],{"class":180,"line":780},[178,3428,3352],{"class":319},[178,3430,3431,3433,3435,3438,3440],{"class":180,"line":786},[178,3432,3357],{"class":319},[178,3434,3236],{"class":699},[178,3436,3437],{"class":188},"\"大于600\"",[178,3439,3236],{"class":699},[178,3441,3005],{"class":319},[178,3443,3444],{"class":180,"line":792},[178,3445,3371],{"class":319},[178,3447,3448],{"class":180,"line":798},[178,3449,3450],{"class":2008},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[178,3452,3453,3455,3458,3460,3462,3465,3467,3469],{"class":180,"line":804},[178,3454,1085],{"class":699},[178,3456,3457],{"class":319}," (",[178,3459,2133],{"class":195},[178,3461,320],{"class":699},[178,3463,3464],{"class":319},"num",[178,3466,320],{"class":699},[178,3468,2251],{"class":195},[178,3470,863],{"class":319},[178,3472,3473],{"class":180,"line":810},[178,3474,3352],{"class":319},[178,3476,3477,3479,3481,3484,3486],{"class":180,"line":816},[178,3478,3357],{"class":319},[178,3480,2983],{"class":699},[178,3482,3483],{"class":188},"\"小于100\"",[178,3485,2983],{"class":699},[178,3487,3005],{"class":319},[178,3489,3490],{"class":180,"line":822},[178,3491,3371],{"class":319},[178,3493,3494,3497,3500,3503,3506,3508,3511,3513,3515,3517],{"class":180,"line":827},[178,3495,3496],{"class":699},"else",[178,3498,3499],{"class":699}," if",[178,3501,3502],{"class":319}," (nmu",[178,3504,3505],{"class":699},">=",[178,3507,2251],{"class":195},[178,3509,3510],{"class":699},"&&",[178,3512,3464],{"class":319},[178,3514,320],{"class":699},[178,3516,1002],{"class":195},[178,3518,863],{"class":319},[178,3520,3521],{"class":180,"line":832},[178,3522,3352],{"class":319},[178,3524,3525,3527,3529,3532,3534,3536],{"class":180,"line":850},[178,3526,3357],{"class":319},[178,3528,2983],{"class":699},[178,3530,3531],{"class":188},"\"不小于100且小于200\"",[178,3533,2983],{"class":699},[178,3535,3048],{"class":319},[178,3537,3538],{"class":2008}," \u002F\u002F可以无限else if,python中是elif：\n",[178,3540,3541],{"class":180,"line":866},[178,3542,3371],{"class":319},[178,3544,3545],{"class":180,"line":877},[178,3546,3424],{"class":699},[178,3548,3549],{"class":180,"line":882},[178,3550,3352],{"class":319},[178,3552,3553,3555,3557,3560,3562],{"class":180,"line":898},[178,3554,3357],{"class":319},[178,3556,2983],{"class":699},[178,3558,3559],{"class":188},"\"不小于200\"",[178,3561,2983],{"class":699},[178,3563,3005],{"class":319},[178,3565,3566],{"class":180,"line":914},[178,3567,3371],{"class":319},[178,3569,3570],{"class":180,"line":919},[178,3571,3572],{"class":2008},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[26,3574,3575],{"start":263},[29,3576,3577],{},"三目运算符",[154,3579,3581],{"className":1942,"code":3580,"language":1944,"meta":160,"style":160},"\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",[70,3582,3583,3588,3593,3619,3641,3658,3663,3686,3701],{"__ignoreMap":160},[178,3584,3585],{"class":180,"line":181},[178,3586,3587],{"class":2008},"\u002F\u002F创建三个变量a,b,c\n",[178,3589,3590],{"class":180,"line":263},[178,3591,3592],{"class":2008},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[178,3594,3595,3597,3599,3601,3603,3606,3608,3610,3613,3615,3617],{"class":180,"line":274},[178,3596,1956],{"class":699},[178,3598,3205],{"class":319},[178,3600,330],{"class":699},[178,3602,2640],{"class":195},[178,3604,3605],{"class":319},",b",[178,3607,330],{"class":699},[178,3609,2386],{"class":195},[178,3611,3612],{"class":319},",c",[178,3614,330],{"class":699},[178,3616,2133],{"class":195},[178,3618,3100],{"class":319},[178,3620,3621,3623,3625,3628,3630,3632,3634,3636,3638],{"class":180,"line":354},[178,3622,2228],{"class":319},[178,3624,330],{"class":699},[178,3626,3627],{"class":319},"(a",[178,3629,2899],{"class":699},[178,3631,2203],{"class":319},[178,3633,2925],{"class":699},[178,3635,2178],{"class":319},[178,3637,2799],{"class":699},[178,3639,3640],{"class":319},"b)\n",[178,3642,3643,3645,3647,3650,3652,3654,3656],{"class":180,"line":364},[178,3644,3176],{"class":319},[178,3646,2983],{"class":699},[178,3648,3649],{"class":188},"\"c=\"",[178,3651,2983],{"class":699},[178,3653,2228],{"class":319},[178,3655,2983],{"class":699},[178,3657,3005],{"class":319},[178,3659,3660],{"class":180,"line":740},[178,3661,3662],{"class":2008},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[178,3664,3665,3667,3669,3671,3673,3675,3677,3680,3682,3684],{"class":180,"line":746},[178,3666,3627],{"class":319},[178,3668,2899],{"class":699},[178,3670,2203],{"class":319},[178,3672,2925],{"class":699},[178,3674,2178],{"class":319},[178,3676,2799],{"class":699},[178,3678,3679],{"class":319},"b)",[178,3681,330],{"class":699},[178,3683,2251],{"class":195},[178,3685,3100],{"class":319},[178,3687,3688,3690,3692,3694,3696,3698],{"class":180,"line":752},[178,3689,3176],{"class":319},[178,3691,2983],{"class":699},[178,3693,2178],{"class":319},[178,3695,2983],{"class":699},[178,3697,3048],{"class":319},[178,3699,3700],{"class":2008}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[178,3702,3703,3705,3707,3709,3711,3713],{"class":180,"line":757},[178,3704,3176],{"class":319},[178,3706,2983],{"class":699},[178,3708,2203],{"class":319},[178,3710,2983],{"class":699},[178,3712,3048],{"class":319},[178,3714,3715],{"class":2008}," \u002F\u002F10   a>b,b还是原值\n",[26,3717,3718],{"start":274},[29,3719,3720],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[154,3722,3724],{"className":1942,"code":3723,"language":1944,"meta":160,"style":160},"\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",[70,3725,3726,3731,3739,3752,3761,3765,3779,3792,3802,3810,3815,3840,3861,3883,3904,3926,3947,3967,3972],{"__ignoreMap":160},[178,3727,3728],{"class":180,"line":181},[178,3729,3730],{"class":2008},"\u002F\u002F案例-电影打分\n",[178,3732,3733,3736],{"class":180,"line":263},[178,3734,3735],{"class":699},"#include",[178,3737,3738],{"class":188},"\u003Ciostream>\n",[178,3740,3741,3744,3747,3750],{"class":180,"line":274},[178,3742,3743],{"class":699},"using",[178,3745,3746],{"class":699}," namespace",[178,3748,3749],{"class":184}," std",[178,3751,3100],{"class":319},[178,3753,3754,3756,3758],{"class":180,"line":354},[178,3755,1956],{"class":699},[178,3757,838],{"class":184},[178,3759,3760],{"class":319},"()\n",[178,3762,3763],{"class":180,"line":364},[178,3764,3352],{"class":319},[178,3766,3767,3770,3773,3775,3777],{"class":180,"line":740},[178,3768,3769],{"class":699},"    int",[178,3771,3772],{"class":319}," score",[178,3774,330],{"class":699},[178,3776,2133],{"class":195},[178,3778,3100],{"class":319},[178,3780,3781,3783,3785,3788,3790],{"class":180,"line":746},[178,3782,3357],{"class":319},[178,3784,2983],{"class":699},[178,3786,3787],{"class":188},"\"电影打分：\"",[178,3789,2983],{"class":699},[178,3791,3005],{"class":319},[178,3793,3794,3797,3799],{"class":180,"line":752},[178,3795,3796],{"class":319},"    cin",[178,3798,3236],{"class":699},[178,3800,3801],{"class":319},"score;\n",[178,3803,3804,3807],{"class":180,"line":757},[178,3805,3806],{"class":699},"    switch",[178,3808,3809],{"class":319},"(score)\n",[178,3811,3812],{"class":180,"line":763},[178,3813,3814],{"class":319},"    {\n",[178,3816,3817,3820,3823,3826,3828,3831,3833,3835,3838],{"class":180,"line":769},[178,3818,3819],{"class":699},"        case",[178,3821,3822],{"class":195}," 10",[178,3824,3825],{"class":319},":cout",[178,3827,2983],{"class":699},[178,3829,3830],{"class":188},"\"经典\"",[178,3832,2983],{"class":699},[178,3834,3048],{"class":319},[178,3836,3837],{"class":699},"break",[178,3839,3100],{"class":319},[178,3841,3842,3844,3847,3849,3851,3853,3855,3857,3859],{"class":180,"line":774},[178,3843,3819],{"class":699},[178,3845,3846],{"class":195}," 9",[178,3848,3825],{"class":319},[178,3850,2983],{"class":699},[178,3852,3830],{"class":188},[178,3854,2983],{"class":699},[178,3856,3048],{"class":319},[178,3858,3837],{"class":699},[178,3860,3100],{"class":319},[178,3862,3863,3865,3868,3870,3872,3875,3877,3879,3881],{"class":180,"line":780},[178,3864,3819],{"class":699},[178,3866,3867],{"class":195}," 8",[178,3869,3825],{"class":319},[178,3871,2983],{"class":699},[178,3873,3874],{"class":188},"\"非常好\"",[178,3876,2983],{"class":699},[178,3878,3048],{"class":319},[178,3880,3837],{"class":699},[178,3882,3100],{"class":319},[178,3884,3885,3887,3890,3892,3894,3896,3898,3900,3902],{"class":180,"line":786},[178,3886,3819],{"class":699},[178,3888,3889],{"class":195}," 7",[178,3891,3825],{"class":319},[178,3893,2983],{"class":699},[178,3895,3874],{"class":188},[178,3897,2983],{"class":699},[178,3899,3048],{"class":319},[178,3901,3837],{"class":699},[178,3903,3100],{"class":319},[178,3905,3906,3908,3911,3913,3915,3918,3920,3922,3924],{"class":180,"line":792},[178,3907,3819],{"class":699},[178,3909,3910],{"class":195}," 6",[178,3912,3825],{"class":319},[178,3914,2983],{"class":699},[178,3916,3917],{"class":188},"\"一般\"",[178,3919,2983],{"class":699},[178,3921,3048],{"class":319},[178,3923,3837],{"class":699},[178,3925,3100],{"class":319},[178,3927,3928,3930,3933,3935,3937,3939,3941,3943,3945],{"class":180,"line":798},[178,3929,3819],{"class":699},[178,3931,3932],{"class":195}," 5",[178,3934,3825],{"class":319},[178,3936,2983],{"class":699},[178,3938,3917],{"class":188},[178,3940,2983],{"class":699},[178,3942,3048],{"class":319},[178,3944,3837],{"class":699},[178,3946,3100],{"class":319},[178,3948,3949,3952,3954,3956,3959,3961,3963,3965],{"class":180,"line":804},[178,3950,3951],{"class":699},"        default",[178,3953,3825],{"class":319},[178,3955,2983],{"class":699},[178,3957,3958],{"class":188},"\"烂片\"",[178,3960,2983],{"class":699},[178,3962,3048],{"class":319},[178,3964,3837],{"class":699},[178,3966,3100],{"class":319},[178,3968,3969],{"class":180,"line":810},[178,3970,3971],{"class":319},"    }\n",[178,3973,3974],{"class":180,"line":816},[178,3975,3371],{"class":319},[19,3977,3978],{},"if和switch区别：",[2946,3980,3981,3984],{},[29,3982,3983],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[29,3985,3986],{},"switch优点：结构清晰，执行效率高",[387,3988,3990],{"id":3989},"_162循环结构","1.6.2循环结构",[26,3992,3993],{},[29,3994,3995],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[154,3997,3999],{"className":1942,"code":3998,"language":1944,"meta":160,"style":160},"\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",[70,4000,4001,4006,4014,4018,4031,4045,4049,4069,4079,4083,4095],{"__ignoreMap":160},[178,4002,4003],{"class":180,"line":181},[178,4004,4005],{"class":2008},"\u002F\u002F打印0-9数字\n",[178,4007,4008,4010,4012],{"class":180,"line":263},[178,4009,1956],{"class":699},[178,4011,838],{"class":184},[178,4013,3760],{"class":319},[178,4015,4016],{"class":180,"line":274},[178,4017,3352],{"class":319},[178,4019,4020,4022,4025,4027,4029],{"class":180,"line":354},[178,4021,3769],{"class":699},[178,4023,4024],{"class":319}," num",[178,4026,330],{"class":699},[178,4028,2133],{"class":195},[178,4030,3100],{"class":319},[178,4032,4033,4036,4039,4041,4043],{"class":180,"line":364},[178,4034,4035],{"class":699},"    while",[178,4037,4038],{"class":319},"(num",[178,4040,320],{"class":699},[178,4042,2386],{"class":195},[178,4044,863],{"class":319},[178,4046,4047],{"class":180,"line":740},[178,4048,3814],{"class":319},[178,4050,4051,4054,4057,4059,4061,4063,4066],{"class":180,"line":746},[178,4052,4053],{"class":184},"       std",[178,4055,4056],{"class":319},"::cout",[178,4058,2983],{"class":699},[178,4060,3464],{"class":319},[178,4062,2983],{"class":699},[178,4064,4065],{"class":184},"std",[178,4067,4068],{"class":319},"::endl;\n",[178,4070,4071,4074,4077],{"class":180,"line":752},[178,4072,4073],{"class":319},"        num",[178,4075,4076],{"class":699},"++",[178,4078,3100],{"class":319},[178,4080,4081],{"class":180,"line":757},[178,4082,3971],{"class":319},[178,4084,4085,4088,4090,4093],{"class":180,"line":763},[178,4086,4087],{"class":184},"    system",[178,4089,944],{"class":319},[178,4091,4092],{"class":188},"\"pause\"",[178,4094,863],{"class":319},[178,4096,4097],{"class":180,"line":769},[178,4098,3371],{"class":319},[19,4100,4101],{},"注意：写好循环条件，避免死循环情况",[154,4103,4105],{"className":1942,"code":4104,"language":1944,"meta":160,"style":160},"\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",[70,4106,4107,4112,4119,4126,4136,4144,4148,4153,4180,4184,4189,4197,4224,4229,4234,4247,4257,4261,4271,4276,4289,4294,4308,4313,4328,4332,4345,4349,4354,4358,4371,4378,4382,4387,4392,4396],{"__ignoreMap":160},[178,4108,4109],{"class":180,"line":181},[178,4110,4111],{"class":2008},"\u002F\u002F循环结构-猜数字\n",[178,4113,4114,4116],{"class":180,"line":263},[178,4115,3735],{"class":699},[178,4117,4118],{"class":188}," \u003Ciostream>\n",[178,4120,4121,4123],{"class":180,"line":274},[178,4122,3735],{"class":699},[178,4124,4125],{"class":188}," \u003Cctime>\n",[178,4127,4128,4130,4132,4134],{"class":180,"line":354},[178,4129,3743],{"class":699},[178,4131,3746],{"class":699},[178,4133,3749],{"class":184},[178,4135,3100],{"class":319},[178,4137,4138,4140,4142],{"class":180,"line":364},[178,4139,1956],{"class":699},[178,4141,838],{"class":184},[178,4143,3760],{"class":319},[178,4145,4146],{"class":180,"line":740},[178,4147,3352],{"class":319},[178,4149,4150],{"class":180,"line":746},[178,4151,4152],{"class":2008},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[178,4154,4155,4158,4161,4164,4167,4169,4172,4174,4177],{"class":180,"line":752},[178,4156,4157],{"class":184},"    srand",[178,4159,4160],{"class":319},"((",[178,4162,4163],{"class":699},"unsigned",[178,4165,4166],{"class":699}," int",[178,4168,2369],{"class":319},[178,4170,4171],{"class":184},"time",[178,4173,944],{"class":319},[178,4175,4176],{"class":195},"NULL",[178,4178,4179],{"class":319},"));\n",[178,4181,4182],{"class":180,"line":757},[178,4183,722],{"emptyLinePlaceholder":721},[178,4185,4186],{"class":180,"line":763},[178,4187,4188],{"class":2008},"    \u002F\u002F1.系统生成随机数\n",[178,4190,4191,4194],{"class":180,"line":769},[178,4192,4193],{"class":2008},"    \u002F\u002Frand()%100",[178,4195,4196],{"class":2008}," \u002F\u002F生成0-99的随机数\n",[178,4198,4199,4201,4203,4205,4208,4211,4213,4215,4217,4219,4221],{"class":180,"line":774},[178,4200,3769],{"class":699},[178,4202,4024],{"class":319},[178,4204,330],{"class":699},[178,4206,4207],{"class":184},"rand",[178,4209,4210],{"class":319},"()",[178,4212,2268],{"class":699},[178,4214,2251],{"class":195},[178,4216,2421],{"class":699},[178,4218,1665],{"class":195},[178,4220,2005],{"class":319},[178,4222,4223],{"class":2008}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[178,4225,4226],{"class":180,"line":780},[178,4227,4228],{"class":2008},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[178,4230,4231],{"class":180,"line":786},[178,4232,4233],{"class":2008},"    \u002F\u002F2.玩家猜测\n",[178,4235,4236,4238,4241,4243,4245],{"class":180,"line":792},[178,4237,3769],{"class":699},[178,4239,4240],{"class":319}," val",[178,4242,330],{"class":699},[178,4244,2133],{"class":195},[178,4246,3100],{"class":319},[178,4248,4249,4251,4253,4255],{"class":180,"line":798},[178,4250,4035],{"class":699},[178,4252,3457],{"class":319},[178,4254,1665],{"class":195},[178,4256,863],{"class":319},[178,4258,4259],{"class":180,"line":804},[178,4260,3814],{"class":319},[178,4262,4263,4266,4268],{"class":180,"line":810},[178,4264,4265],{"class":319},"        cin",[178,4267,3236],{"class":699},[178,4269,4270],{"class":319},"val;\n",[178,4272,4273],{"class":180,"line":816},[178,4274,4275],{"class":2008},"        \u002F\u002F3.判断玩家猜测\n",[178,4277,4278,4281,4284,4286],{"class":180,"line":822},[178,4279,4280],{"class":699},"        if",[178,4282,4283],{"class":319},"(val",[178,4285,320],{"class":699},[178,4287,4288],{"class":319},"num) \n",[178,4290,4291],{"class":180,"line":827},[178,4292,4293],{"class":319},"        {\n",[178,4295,4296,4299,4301,4304,4306],{"class":180,"line":832},[178,4297,4298],{"class":319},"            cout",[178,4300,2983],{"class":699},[178,4302,4303],{"class":188},"\"猜小了！\"",[178,4305,2983],{"class":699},[178,4307,3005],{"class":319},[178,4309,4310],{"class":180,"line":850},[178,4311,4312],{"class":319},"        }\n",[178,4314,4315,4318,4320,4323,4325],{"class":180,"line":866},[178,4316,4317],{"class":699},"        else",[178,4319,3499],{"class":699},[178,4321,4322],{"class":319}," (val",[178,4324,2899],{"class":699},[178,4326,4327],{"class":319},"num)\n",[178,4329,4330],{"class":180,"line":877},[178,4331,4293],{"class":319},[178,4333,4334,4336,4338,4341,4343],{"class":180,"line":882},[178,4335,4298],{"class":319},[178,4337,2983],{"class":699},[178,4339,4340],{"class":188},"\"猜大了！\"",[178,4342,2983],{"class":699},[178,4344,3005],{"class":319},[178,4346,4347],{"class":180,"line":898},[178,4348,4312],{"class":319},[178,4350,4351],{"class":180,"line":914},[178,4352,4353],{"class":699},"        else\n",[178,4355,4356],{"class":180,"line":919},[178,4357,4293],{"class":319},[178,4359,4360,4362,4364,4367,4369],{"class":180,"line":935},[178,4361,4298],{"class":319},[178,4363,2983],{"class":699},[178,4365,4366],{"class":188},"\"猜对了！\"",[178,4368,2983],{"class":699},[178,4370,3005],{"class":319},[178,4372,4373,4376],{"class":180,"line":952},[178,4374,4375],{"class":699},"            break",[178,4377,3100],{"class":319},[178,4379,4380],{"class":180,"line":966},[178,4381,4312],{"class":319},[178,4383,4384],{"class":180,"line":980},[178,4385,4386],{"class":2008},"        \u002F\u002F猜对 退出游戏\n",[178,4388,4389],{"class":180,"line":985},[178,4390,4391],{"class":2008},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[178,4393,4394],{"class":180,"line":1008},[178,4395,3971],{"class":319},[178,4397,4398],{"class":180,"line":1014},[178,4399,3371],{"class":319},[26,4401,4402],{"start":263},[29,4403,4404,4405,4408],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[2093,4406,4407],{},"do...while会先执行一次循环语句","，在判断循环语句",[154,4410,4412],{"className":1942,"code":4411,"language":1944,"meta":160,"style":160},"\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",[70,4413,4414,4419,4427,4431,4443,4451,4455,4472,4479,4483,4496,4506],{"__ignoreMap":160},[178,4415,4416],{"class":180,"line":181},[178,4417,4418],{"class":2008},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[178,4420,4421,4423,4425],{"class":180,"line":263},[178,4422,1956],{"class":699},[178,4424,838],{"class":184},[178,4426,3760],{"class":319},[178,4428,4429],{"class":180,"line":274},[178,4430,3352],{"class":319},[178,4432,4433,4435,4437,4439,4441],{"class":180,"line":354},[178,4434,3769],{"class":699},[178,4436,4024],{"class":319},[178,4438,330],{"class":699},[178,4440,2133],{"class":195},[178,4442,3100],{"class":319},[178,4444,4445,4448],{"class":180,"line":364},[178,4446,4447],{"class":699},"    do",[178,4449,4450],{"class":319}," \n",[178,4452,4453],{"class":180,"line":740},[178,4454,3814],{"class":319},[178,4456,4457,4460,4462,4464,4466,4468,4470],{"class":180,"line":746},[178,4458,4459],{"class":184},"        std",[178,4461,4056],{"class":319},[178,4463,2983],{"class":699},[178,4465,3464],{"class":319},[178,4467,2983],{"class":699},[178,4469,4065],{"class":184},[178,4471,4068],{"class":319},[178,4473,4474,4476],{"class":180,"line":752},[178,4475,4073],{"class":319},[178,4477,4478],{"class":699},"++\n",[178,4480,4481],{"class":180,"line":757},[178,4482,3971],{"class":319},[178,4484,4485,4487,4489,4491,4493],{"class":180,"line":763},[178,4486,4035],{"class":699},[178,4488,4038],{"class":319},[178,4490,320],{"class":699},[178,4492,2386],{"class":195},[178,4494,4495],{"class":319},");\n",[178,4497,4498,4500,4502,4504],{"class":180,"line":769},[178,4499,4087],{"class":184},[178,4501,944],{"class":319},[178,4503,4092],{"class":188},[178,4505,4495],{"class":319},[178,4507,4508],{"class":180,"line":774},[178,4509,3371],{"class":319},[19,4511,4512],{},"案例-水仙花数",[19,4514,4515],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,4517,4518],{},"例如：1^3+5^3+3^3=153",[19,4520,4521],{},"请用do...while语句，求出所有3位数的水仙花数",[154,4523,4525],{"className":1942,"code":4524,"language":1944,"meta":160,"style":160},"#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",[70,4526,4527,4533,4543,4551,4555,4560,4572,4578,4582,4587,4603,4619,4635,4650,4669,4684,4732,4736,4748,4752,4760,4764,4778],{"__ignoreMap":160},[178,4528,4529,4531],{"class":180,"line":181},[178,4530,3735],{"class":699},[178,4532,4118],{"class":188},[178,4534,4535,4537,4539,4541],{"class":180,"line":263},[178,4536,3743],{"class":699},[178,4538,3746],{"class":699},[178,4540,3749],{"class":184},[178,4542,3100],{"class":319},[178,4544,4545,4547,4549],{"class":180,"line":274},[178,4546,1956],{"class":699},[178,4548,838],{"class":184},[178,4550,3760],{"class":319},[178,4552,4553],{"class":180,"line":354},[178,4554,3352],{"class":319},[178,4556,4557],{"class":180,"line":364},[178,4558,4559],{"class":2008},"    \u002F\u002F1.先打印所有三位数字\n",[178,4561,4562,4564,4566,4568,4570],{"class":180,"line":740},[178,4563,3769],{"class":699},[178,4565,4024],{"class":319},[178,4567,330],{"class":699},[178,4569,2251],{"class":195},[178,4571,3100],{"class":319},[178,4573,4574,4576],{"class":180,"line":746},[178,4575,4447],{"class":699},[178,4577,4450],{"class":319},[178,4579,4580],{"class":180,"line":752},[178,4581,3814],{"class":319},[178,4583,4584],{"class":180,"line":757},[178,4585,4586],{"class":2008},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[178,4588,4589,4592,4594,4596,4598,4600],{"class":180,"line":763},[178,4590,4591],{"class":699},"        int",[178,4593,3205],{"class":319},[178,4595,330],{"class":699},[178,4597,2133],{"class":195},[178,4599,2005],{"class":319},[178,4601,4602],{"class":2008}," \u002F\u002F个位\n",[178,4604,4605,4607,4610,4612,4614,4616],{"class":180,"line":769},[178,4606,4591],{"class":699},[178,4608,4609],{"class":319}," b",[178,4611,330],{"class":699},[178,4613,2133],{"class":195},[178,4615,2005],{"class":319},[178,4617,4618],{"class":2008}," \u002F\u002F十位\n",[178,4620,4621,4623,4626,4628,4630,4632],{"class":180,"line":774},[178,4622,4591],{"class":699},[178,4624,4625],{"class":319}," c",[178,4627,330],{"class":699},[178,4629,2133],{"class":195},[178,4631,2005],{"class":319},[178,4633,4634],{"class":2008}," \u002F\u002F百位\n",[178,4636,4637,4640,4642,4644,4646,4648],{"class":180,"line":780},[178,4638,4639],{"class":319},"        a",[178,4641,330],{"class":699},[178,4643,3464],{"class":319},[178,4645,2268],{"class":699},[178,4647,2386],{"class":195},[178,4649,3100],{"class":319},[178,4651,4652,4655,4657,4659,4661,4663,4665,4667],{"class":180,"line":786},[178,4653,4654],{"class":319},"        b",[178,4656,330],{"class":699},[178,4658,3464],{"class":319},[178,4660,2524],{"class":699},[178,4662,2386],{"class":195},[178,4664,2268],{"class":699},[178,4666,2386],{"class":195},[178,4668,3100],{"class":319},[178,4670,4671,4674,4676,4678,4680,4682],{"class":180,"line":792},[178,4672,4673],{"class":319},"        c",[178,4675,330],{"class":699},[178,4677,3464],{"class":319},[178,4679,2524],{"class":699},[178,4681,2251],{"class":195},[178,4683,3100],{"class":319},[178,4685,4686,4688,4690,4692,4694,4696,4698,4700,4702,4704,4706,4708,4710,4712,4714,4716,4718,4720,4723,4726,4729],{"class":180,"line":798},[178,4687,4280],{"class":699},[178,4689,3627],{"class":319},[178,4691,2395],{"class":699},[178,4693,2178],{"class":319},[178,4695,2395],{"class":699},[178,4697,2178],{"class":319},[178,4699,2421],{"class":699},[178,4701,2203],{"class":319},[178,4703,2395],{"class":699},[178,4705,2203],{"class":319},[178,4707,2395],{"class":699},[178,4709,2203],{"class":319},[178,4711,2421],{"class":699},[178,4713,2228],{"class":319},[178,4715,2395],{"class":699},[178,4717,2228],{"class":319},[178,4719,2395],{"class":699},[178,4721,4722],{"class":319},"c ",[178,4724,4725],{"class":699},"==",[178,4727,4728],{"class":319}," num)",[178,4730,4731],{"class":2008}," \u002F\u002F如果是水仙花数，才打印\n",[178,4733,4734],{"class":180,"line":804},[178,4735,4293],{"class":319},[178,4737,4738,4740,4742,4744,4746],{"class":180,"line":810},[178,4739,4298],{"class":319},[178,4741,2983],{"class":699},[178,4743,3464],{"class":319},[178,4745,2983],{"class":699},[178,4747,3005],{"class":319},[178,4749,4750],{"class":180,"line":816},[178,4751,4312],{"class":319},[178,4753,4754,4756,4758],{"class":180,"line":822},[178,4755,4073],{"class":319},[178,4757,4076],{"class":699},[178,4759,3100],{"class":319},[178,4761,4762],{"class":180,"line":827},[178,4763,3971],{"class":319},[178,4765,4766,4768,4771,4773,4776],{"class":180,"line":832},[178,4767,4035],{"class":699},[178,4769,4770],{"class":319}," (num ",[178,4772,320],{"class":699},[178,4774,4775],{"class":195}," 1000",[178,4777,4495],{"class":319},[178,4779,4780],{"class":180,"line":850},[178,4781,3371],{"class":319},[26,4783,4784],{"start":274},[29,4785,4786],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[154,4788,4790],{"className":1942,"code":4789,"language":1944,"meta":160,"style":160},"\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",[70,4791,4792,4797,4825,4829,4841,4845,4850,4861,4868,4872,4885,4889,4896,4900,4912,4921],{"__ignoreMap":160},[178,4793,4794],{"class":180,"line":181},[178,4795,4796],{"class":2008},"\u002F\u002F从数字0-9打印\n",[178,4798,4799,4801,4803,4805,4808,4810,4812,4815,4817,4819,4821,4823],{"class":180,"line":263},[178,4800,1474],{"class":699},[178,4802,944],{"class":319},[178,4804,1956],{"class":699},[178,4806,4807],{"class":319}," i",[178,4809,330],{"class":699},[178,4811,2133],{"class":195},[178,4813,4814],{"class":319},";i",[178,4816,320],{"class":699},[178,4818,2386],{"class":195},[178,4820,4814],{"class":319},[178,4822,4076],{"class":699},[178,4824,863],{"class":319},[178,4826,4827],{"class":180,"line":274},[178,4828,3352],{"class":319},[178,4830,4831,4833,4835,4837,4839],{"class":180,"line":354},[178,4832,3357],{"class":319},[178,4834,2983],{"class":699},[178,4836,2381],{"class":319},[178,4838,2983],{"class":699},[178,4840,3005],{"class":319},[178,4842,4843],{"class":180,"line":364},[178,4844,3371],{"class":319},[178,4846,4847],{"class":180,"line":740},[178,4848,4849],{"class":2008},"\u002F\u002F上式可以进行拆分\n",[178,4851,4852,4854,4856,4858],{"class":180,"line":746},[178,4853,1956],{"class":699},[178,4855,4807],{"class":319},[178,4857,330],{"class":699},[178,4859,4860],{"class":195},"0\n",[178,4862,4863,4865],{"class":180,"line":752},[178,4864,1474],{"class":699},[178,4866,4867],{"class":319},"(;;;)\n",[178,4869,4870],{"class":180,"line":757},[178,4871,3352],{"class":319},[178,4873,4874,4876,4879,4881,4883],{"class":180,"line":763},[178,4875,922],{"class":699},[178,4877,4878],{"class":319},"(i",[178,4880,3505],{"class":699},[178,4882,2386],{"class":195},[178,4884,863],{"class":319},[178,4886,4887],{"class":180,"line":769},[178,4888,3814],{"class":319},[178,4890,4891,4894],{"class":180,"line":774},[178,4892,4893],{"class":699},"        break",[178,4895,3100],{"class":319},[178,4897,4898],{"class":180,"line":780},[178,4899,3971],{"class":319},[178,4901,4902,4904,4906,4908,4910],{"class":180,"line":786},[178,4903,3357],{"class":319},[178,4905,2983],{"class":699},[178,4907,2381],{"class":319},[178,4909,2983],{"class":699},[178,4911,3005],{"class":319},[178,4913,4914,4917,4919],{"class":180,"line":792},[178,4915,4916],{"class":319},"    i",[178,4918,4076],{"class":699},[178,4920,3100],{"class":319},[178,4922,4923],{"class":180,"line":798},[178,4924,3371],{"class":319},[19,4926,4927],{},"小练习",[154,4929,4931],{"className":1942,"code":4930,"language":1944,"meta":160,"style":160},"#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",[70,4932,4933,4939,4949,4957,4961,4966,4971,4998,5002,5007,5012,5053,5057,5070,5074,5078,5082,5094,5098,5102],{"__ignoreMap":160},[178,4934,4935,4937],{"class":180,"line":181},[178,4936,3735],{"class":699},[178,4938,3738],{"class":188},[178,4940,4941,4943,4945,4947],{"class":180,"line":263},[178,4942,3743],{"class":699},[178,4944,3746],{"class":699},[178,4946,3749],{"class":184},[178,4948,3100],{"class":319},[178,4950,4951,4953,4955],{"class":180,"line":274},[178,4952,1956],{"class":699},[178,4954,838],{"class":184},[178,4956,3760],{"class":319},[178,4958,4959],{"class":180,"line":354},[178,4960,3352],{"class":319},[178,4962,4963],{"class":180,"line":364},[178,4964,4965],{"class":2008},"    \u002F\u002F敲桌子案例\n",[178,4967,4968],{"class":180,"line":740},[178,4969,4970],{"class":2008},"    \u002F\u002F1.先输出1-100的数字\n",[178,4972,4973,4975,4977,4979,4981,4983,4985,4988,4990,4992,4994,4996],{"class":180,"line":746},[178,4974,988],{"class":699},[178,4976,944],{"class":319},[178,4978,1956],{"class":699},[178,4980,4807],{"class":319},[178,4982,330],{"class":699},[178,4984,1665],{"class":195},[178,4986,4987],{"class":319},"; i",[178,4989,3394],{"class":699},[178,4991,2251],{"class":195},[178,4993,4987],{"class":319},[178,4995,4076],{"class":699},[178,4997,863],{"class":319},[178,4999,5000],{"class":180,"line":752},[178,5001,3814],{"class":319},[178,5003,5004],{"class":180,"line":757},[178,5005,5006],{"class":2008},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[178,5008,5009],{"class":180,"line":763},[178,5010,5011],{"class":2008},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[178,5013,5014,5016,5018,5020,5022,5024,5026,5029,5031,5033,5035,5037,5039,5041,5043,5045,5047,5049,5051],{"class":180,"line":769},[178,5015,4280],{"class":699},[178,5017,4878],{"class":319},[178,5019,2268],{"class":699},[178,5021,2309],{"class":195},[178,5023,4725],{"class":699},[178,5025,2133],{"class":195},[178,5027,5028],{"class":699}," ||",[178,5030,4807],{"class":319},[178,5032,2268],{"class":699},[178,5034,2386],{"class":195},[178,5036,4725],{"class":699},[178,5038,2309],{"class":195},[178,5040,5028],{"class":699},[178,5042,4807],{"class":319},[178,5044,2524],{"class":699},[178,5046,2386],{"class":195},[178,5048,4725],{"class":699},[178,5050,2309],{"class":195},[178,5052,863],{"class":319},[178,5054,5055],{"class":180,"line":774},[178,5056,4293],{"class":319},[178,5058,5059,5061,5063,5066,5068],{"class":180,"line":780},[178,5060,4298],{"class":319},[178,5062,2983],{"class":699},[178,5064,5065],{"class":188},"\"敲桌子\"",[178,5067,2983],{"class":699},[178,5069,3005],{"class":319},[178,5071,5072],{"class":180,"line":786},[178,5073,4312],{"class":319},[178,5075,5076],{"class":180,"line":792},[178,5077,4353],{"class":699},[178,5079,5080],{"class":180,"line":798},[178,5081,4293],{"class":319},[178,5083,5084,5086,5088,5090,5092],{"class":180,"line":804},[178,5085,4298],{"class":319},[178,5087,2983],{"class":699},[178,5089,2381],{"class":319},[178,5091,2983],{"class":699},[178,5093,3005],{"class":319},[178,5095,5096],{"class":180,"line":810},[178,5097,4312],{"class":319},[178,5099,5100],{"class":180,"line":816},[178,5101,3971],{"class":319},[178,5103,5104],{"class":180,"line":822},[178,5105,3371],{"class":319},[19,5107,5108],{},"嵌套实现星图",[154,5110,5112],{"className":1942,"code":5111,"language":1944,"meta":160,"style":160},"#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",[70,5113,5114,5120,5130,5138,5142,5168,5172,5201,5205,5216,5220,5229,5233],{"__ignoreMap":160},[178,5115,5116,5118],{"class":180,"line":181},[178,5117,3735],{"class":699},[178,5119,3738],{"class":188},[178,5121,5122,5124,5126,5128],{"class":180,"line":263},[178,5123,3743],{"class":699},[178,5125,3746],{"class":699},[178,5127,3749],{"class":184},[178,5129,3100],{"class":319},[178,5131,5132,5134,5136],{"class":180,"line":274},[178,5133,1956],{"class":699},[178,5135,838],{"class":184},[178,5137,3760],{"class":319},[178,5139,5140],{"class":180,"line":354},[178,5141,3352],{"class":319},[178,5143,5144,5146,5148,5150,5152,5154,5156,5158,5160,5162,5164,5166],{"class":180,"line":364},[178,5145,988],{"class":699},[178,5147,3457],{"class":319},[178,5149,1956],{"class":699},[178,5151,4807],{"class":319},[178,5153,330],{"class":699},[178,5155,2133],{"class":195},[178,5157,4814],{"class":319},[178,5159,320],{"class":699},[178,5161,2386],{"class":195},[178,5163,4814],{"class":319},[178,5165,4076],{"class":699},[178,5167,863],{"class":319},[178,5169,5170],{"class":180,"line":740},[178,5171,3814],{"class":319},[178,5173,5174,5177,5179,5181,5184,5186,5188,5191,5193,5195,5197,5199],{"class":180,"line":746},[178,5175,5176],{"class":699},"        for",[178,5178,3457],{"class":319},[178,5180,1956],{"class":699},[178,5182,5183],{"class":319}," j",[178,5185,330],{"class":699},[178,5187,2133],{"class":195},[178,5189,5190],{"class":319},";j",[178,5192,320],{"class":699},[178,5194,2386],{"class":195},[178,5196,5190],{"class":319},[178,5198,4076],{"class":699},[178,5200,863],{"class":319},[178,5202,5203],{"class":180,"line":752},[178,5204,4293],{"class":319},[178,5206,5207,5209,5211,5214],{"class":180,"line":757},[178,5208,4298],{"class":319},[178,5210,2983],{"class":699},[178,5212,5213],{"class":188},"\"*\"",[178,5215,3100],{"class":319},[178,5217,5218],{"class":180,"line":763},[178,5219,4312],{"class":319},[178,5221,5222,5225,5227],{"class":180,"line":769},[178,5223,5224],{"class":319},"        cout",[178,5226,2983],{"class":699},[178,5228,3005],{"class":319},[178,5230,5231],{"class":180,"line":774},[178,5232,3971],{"class":319},[178,5234,5235],{"class":180,"line":780},[178,5236,3371],{"class":319},[19,5238,5239],{},"乘法口诀表",[154,5241,5243],{"className":1942,"code":5242,"language":1944,"meta":160,"style":160},"#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",[70,5244,5245,5251,5261,5269,5273,5299,5303,5328,5332,5372,5376,5384,5388],{"__ignoreMap":160},[178,5246,5247,5249],{"class":180,"line":181},[178,5248,3735],{"class":699},[178,5250,4118],{"class":188},[178,5252,5253,5255,5257,5259],{"class":180,"line":263},[178,5254,3743],{"class":699},[178,5256,3746],{"class":699},[178,5258,3749],{"class":184},[178,5260,3100],{"class":319},[178,5262,5263,5265,5267],{"class":180,"line":274},[178,5264,1956],{"class":699},[178,5266,838],{"class":184},[178,5268,3760],{"class":319},[178,5270,5271],{"class":180,"line":354},[178,5272,3352],{"class":319},[178,5274,5275,5277,5279,5281,5283,5285,5287,5289,5291,5293,5295,5297],{"class":180,"line":364},[178,5276,988],{"class":699},[178,5278,944],{"class":319},[178,5280,1956],{"class":699},[178,5282,4807],{"class":319},[178,5284,330],{"class":699},[178,5286,1665],{"class":195},[178,5288,4814],{"class":319},[178,5290,320],{"class":699},[178,5292,2386],{"class":195},[178,5294,4814],{"class":319},[178,5296,4076],{"class":699},[178,5298,863],{"class":319},[178,5300,5301],{"class":180,"line":740},[178,5302,3814],{"class":319},[178,5304,5305,5307,5309,5311,5313,5315,5317,5319,5321,5324,5326],{"class":180,"line":746},[178,5306,5176],{"class":699},[178,5308,944],{"class":319},[178,5310,1956],{"class":699},[178,5312,5183],{"class":319},[178,5314,330],{"class":699},[178,5316,1665],{"class":195},[178,5318,5190],{"class":319},[178,5320,3394],{"class":699},[178,5322,5323],{"class":319},"i;j",[178,5325,4076],{"class":699},[178,5327,863],{"class":319},[178,5329,5330],{"class":180,"line":752},[178,5331,4293],{"class":319},[178,5333,5334,5336,5338,5340,5342,5344,5346,5348,5350,5353,5355,5357,5359,5361,5363,5366,5368,5370],{"class":180,"line":757},[178,5335,4298],{"class":319},[178,5337,2983],{"class":699},[178,5339,2407],{"class":319},[178,5341,2983],{"class":699},[178,5343,5213],{"class":188},[178,5345,2983],{"class":699},[178,5347,2381],{"class":319},[178,5349,2983],{"class":699},[178,5351,5352],{"class":188},"\"=\"",[178,5354,2983],{"class":699},[178,5356,2381],{"class":319},[178,5358,2395],{"class":699},[178,5360,2407],{"class":319},[178,5362,2983],{"class":699},[178,5364,5365],{"class":188},"'",[178,5367,3040],{"class":195},[178,5369,5365],{"class":188},[178,5371,3100],{"class":319},[178,5373,5374],{"class":180,"line":763},[178,5375,4312],{"class":319},[178,5377,5378,5380,5382],{"class":180,"line":769},[178,5379,5224],{"class":319},[178,5381,2983],{"class":699},[178,5383,3005],{"class":319},[178,5385,5386],{"class":180,"line":774},[178,5387,3971],{"class":319},[178,5389,5390],{"class":180,"line":780},[178,5391,3371],{"class":319},[387,5393,5395],{"id":5394},"_163跳出语句","1.6.3跳出语句",[26,5397,5398],{},[29,5399,5400],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,5402,5403],{},"break使用时机：",[2946,5405,5406,5409,5412],{},[29,5407,5408],{},"出现在switch条件语句中，作用是终止case并跳出switch",[29,5410,5411],{},"出现在循环结构中，作用是跳出当前的循环结构",[29,5413,5414],{},"出现在嵌套循环中，跳出最近的内层循环语句",[26,5416,5417,5420],{"start":263},[29,5418,5419],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[29,5421,5422],{},"goto语句\n语法：goto 标记;",[19,5424,5425],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[154,5427,5429],{"className":1942,"code":5428,"language":1944,"meta":160,"style":160},"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",[70,5430,5431,5439,5443,5456,5466,5479,5492,5505,5512,5528],{"__ignoreMap":160},[178,5432,5433,5435,5437],{"class":180,"line":181},[178,5434,1956],{"class":699},[178,5436,838],{"class":184},[178,5438,3760],{"class":319},[178,5440,5441],{"class":180,"line":263},[178,5442,3352],{"class":319},[178,5444,5445,5447,5449,5452,5454],{"class":180,"line":274},[178,5446,3357],{"class":319},[178,5448,2983],{"class":699},[178,5450,5451],{"class":188},"\"1\"",[178,5453,2983],{"class":699},[178,5455,3005],{"class":319},[178,5457,5458,5461,5464],{"class":180,"line":354},[178,5459,5460],{"class":699},"    goto",[178,5462,5463],{"class":184}," FLAG",[178,5465,3100],{"class":319},[178,5467,5468,5470,5472,5475,5477],{"class":180,"line":364},[178,5469,3357],{"class":319},[178,5471,2983],{"class":699},[178,5473,5474],{"class":188},"\"2\"",[178,5476,2983],{"class":699},[178,5478,3005],{"class":319},[178,5480,5481,5483,5485,5488,5490],{"class":180,"line":740},[178,5482,3357],{"class":319},[178,5484,2983],{"class":699},[178,5486,5487],{"class":188},"\"3\"",[178,5489,2983],{"class":699},[178,5491,3005],{"class":319},[178,5493,5494,5496,5498,5501,5503],{"class":180,"line":746},[178,5495,3357],{"class":319},[178,5497,2983],{"class":699},[178,5499,5500],{"class":188},"\"4\"",[178,5502,2983],{"class":699},[178,5504,3005],{"class":319},[178,5506,5507,5510],{"class":180,"line":752},[178,5508,5509],{"class":184},"    FLAG",[178,5511,847],{"class":319},[178,5513,5514,5516,5518,5521,5523,5525],{"class":180,"line":757},[178,5515,3357],{"class":319},[178,5517,2983],{"class":699},[178,5519,5520],{"class":188},"\"5\"",[178,5522,2983],{"class":699},[178,5524,3048],{"class":319},[178,5526,5527],{"class":2008},"\u002F\u002F跳过了2,3,4,直接到5\n",[178,5529,5530],{"class":180,"line":763},[178,5531,3371],{"class":319},[14,5533,5535],{"id":5534},"_17数组","1.7数组",[387,5537,5539],{"id":5538},"_171一维数组","1.7.1一维数组",[26,5541,5542],{},[29,5543,5544],{},"一维数组定义方式",[45,5546,5547,5557],{},[48,5548,5549],{},[51,5550,5551,5554],{},[54,5552,5553],{},"方式",[54,5555,5556],{},"注意事项",[62,5558,5559,5573,5583],{},[51,5560,5561,5567],{},[67,5562,5563,5564,2005],{},"数据类型 数组名",[178,5565,5566],{},"数组长度",[67,5568,5569,5570,5572],{},"这种方式是先定义再arr",[178,5571,2381],{},"赋值",[51,5574,5575,5580],{},[67,5576,5563,5577,5579],{},[178,5578,5566],{},"={值1,值2....};",[67,5581,5582],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[51,5584,5585,5589],{},[67,5586,5563,5587,5579],{},[178,5588],{},[67,5590,5591,5592,5594],{},"int arr",[178,5593],{},";这是不正确的，按照这样的方式定义必须有初始长度",[26,5596,5597],{"start":263},[29,5598,5599],{},"一维数组数组名\n用途：",[2946,5601,5602],{},[29,5603,5604],{},"1.可以统计整个数组在内存中的长度：",[154,5606,5608],{"className":1942,"code":5607,"language":1944,"meta":160,"style":160},"sizeof(arr);\nsizeof(arr[0]);\n",[70,5609,5610,5617],{"__ignoreMap":160},[178,5611,5612,5614],{"class":180,"line":181},[178,5613,1951],{"class":699},[178,5615,5616],{"class":319},"(arr);\n",[178,5618,5619,5621,5624,5626],{"class":180,"line":263},[178,5620,1951],{"class":699},[178,5622,5623],{"class":319},"(arr[",[178,5625,2133],{"class":195},[178,5627,5628],{"class":319},"]);\n",[2946,5630,5631],{},[29,5632,5633],{},"2.可以获取数组在内存中的首地址:",[154,5635,5637],{"className":1942,"code":5636,"language":1944,"meta":160,"style":160},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[70,5638,5639,5644,5657,5662],{"__ignoreMap":160},[178,5640,5641],{"class":180,"line":181},[178,5642,5643],{"class":2008},"\u002F\u002F查看16进制的首地址\n",[178,5645,5646,5648,5650,5653,5655],{"class":180,"line":263},[178,5647,3176],{"class":319},[178,5649,2983],{"class":699},[178,5651,5652],{"class":319},"arr",[178,5654,2983],{"class":699},[178,5656,3005],{"class":319},[178,5658,5659],{"class":180,"line":274},[178,5660,5661],{"class":2008},"\u002F\u002F看10进制数\n",[178,5663,5664,5666,5668,5670,5672,5674,5676,5679,5681,5683,5685],{"class":180,"line":354},[178,5665,3176],{"class":319},[178,5667,2983],{"class":699},[178,5669,944],{"class":319},[178,5671,1956],{"class":699},[178,5673,2369],{"class":319},[178,5675,2293],{"class":699},[178,5677,5678],{"class":319},"arr[",[178,5680,2133],{"class":195},[178,5682,2879],{"class":319},[178,5684,2983],{"class":699},[178,5686,3005],{"class":319},[19,5688,5689],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[2946,5691,5692],{},[29,5693,5694],{},"1️⃣五只小猪称体重",[154,5696,5698],{"className":1942,"code":5697,"language":1944,"meta":160,"style":160},"#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",[70,5699,5700,5706,5716,5724,5728,5768,5781,5807,5811,5823,5827,5837,5841,5845,5858,5867],{"__ignoreMap":160},[178,5701,5702,5704],{"class":180,"line":181},[178,5703,3735],{"class":699},[178,5705,3738],{"class":188},[178,5707,5708,5710,5712,5714],{"class":180,"line":263},[178,5709,3743],{"class":699},[178,5711,3746],{"class":699},[178,5713,3749],{"class":184},[178,5715,3100],{"class":319},[178,5717,5718,5720,5722],{"class":180,"line":274},[178,5719,1956],{"class":699},[178,5721,838],{"class":184},[178,5723,3760],{"class":319},[178,5725,5726],{"class":180,"line":354},[178,5727,3352],{"class":319},[178,5729,5730,5732,5735,5737,5739,5741,5743,5746,5748,5751,5753,5755,5757,5760,5762,5765],{"class":180,"line":364},[178,5731,3769],{"class":699},[178,5733,5734],{"class":319}," arr[",[178,5736,2259],{"class":195},[178,5738,2879],{"class":319},[178,5740,330],{"class":699},[178,5742,2836],{"class":319},[178,5744,5745],{"class":195},"300",[178,5747,2318],{"class":319},[178,5749,5750],{"class":195},"350",[178,5752,2318],{"class":319},[178,5754,1002],{"class":195},[178,5756,2318],{"class":319},[178,5758,5759],{"class":195},"400",[178,5761,2318],{"class":319},[178,5763,5764],{"class":195},"250",[178,5766,5767],{"class":319},"};\n",[178,5769,5770,5772,5775,5777,5779],{"class":180,"line":740},[178,5771,3769],{"class":699},[178,5773,5774],{"class":319}," tmp",[178,5776,330],{"class":699},[178,5778,2133],{"class":195},[178,5780,3100],{"class":319},[178,5782,5783,5785,5787,5789,5791,5793,5795,5797,5799,5801,5803,5805],{"class":180,"line":746},[178,5784,988],{"class":699},[178,5786,3457],{"class":319},[178,5788,1956],{"class":699},[178,5790,4807],{"class":319},[178,5792,330],{"class":699},[178,5794,2133],{"class":195},[178,5796,4814],{"class":319},[178,5798,320],{"class":699},[178,5800,2259],{"class":195},[178,5802,4814],{"class":319},[178,5804,4076],{"class":699},[178,5806,863],{"class":319},[178,5808,5809],{"class":180,"line":752},[178,5810,3814],{"class":319},[178,5812,5813,5815,5818,5820],{"class":180,"line":757},[178,5814,4280],{"class":699},[178,5816,5817],{"class":319},"(tmp",[178,5819,320],{"class":699},[178,5821,5822],{"class":319},"arr[i])\n",[178,5824,5825],{"class":180,"line":763},[178,5826,4293],{"class":319},[178,5828,5829,5832,5834],{"class":180,"line":769},[178,5830,5831],{"class":319},"            tmp",[178,5833,330],{"class":699},[178,5835,5836],{"class":319},"arr[i];\n",[178,5838,5839],{"class":180,"line":774},[178,5840,4312],{"class":319},[178,5842,5843],{"class":180,"line":780},[178,5844,3971],{"class":319},[178,5846,5847,5849,5851,5854,5856],{"class":180,"line":786},[178,5848,3357],{"class":319},[178,5850,2983],{"class":699},[178,5852,5853],{"class":319},"tmp",[178,5855,2983],{"class":699},[178,5857,3005],{"class":319},[178,5859,5860,5863,5865],{"class":180,"line":792},[178,5861,5862],{"class":699},"    return",[178,5864,930],{"class":195},[178,5866,3100],{"class":319},[178,5868,5869],{"class":180,"line":798},[178,5870,3371],{"class":319},[2946,5872,5873],{},[29,5874,5875],{},"2️⃣数组元素逆置",[154,5877,5879],{"className":1942,"code":5878,"language":1944,"meta":160,"style":160},"\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",[70,5880,5881,5886,5892,5902,5910,5914,5949,5965,5997,6010,6015,6020,6032,6042,6052,6057,6066,6076,6081,6086,6113,6117,6133,6137,6148,6157],{"__ignoreMap":160},[178,5882,5883],{"class":180,"line":181},[178,5884,5885],{"class":2008},"\u002F\u002F元素逆置\n",[178,5887,5888,5890],{"class":180,"line":263},[178,5889,3735],{"class":699},[178,5891,3738],{"class":188},[178,5893,5894,5896,5898,5900],{"class":180,"line":274},[178,5895,3743],{"class":699},[178,5897,3746],{"class":699},[178,5899,3749],{"class":184},[178,5901,3100],{"class":319},[178,5903,5904,5906,5908],{"class":180,"line":354},[178,5905,1956],{"class":699},[178,5907,838],{"class":184},[178,5909,3760],{"class":319},[178,5911,5912],{"class":180,"line":364},[178,5913,3352],{"class":319},[178,5915,5916,5919,5921,5923,5925,5927,5929,5931,5933,5935,5937,5939,5941,5943,5945,5947],{"class":180,"line":740},[178,5917,5918],{"class":699},"   int",[178,5920,5734],{"class":319},[178,5922,2259],{"class":195},[178,5924,2879],{"class":319},[178,5926,330],{"class":699},[178,5928,2836],{"class":319},[178,5930,1665],{"class":195},[178,5932,2318],{"class":319},[178,5934,1669],{"class":195},[178,5936,2318],{"class":319},[178,5938,2021],{"class":195},[178,5940,2318],{"class":319},[178,5942,2233],{"class":195},[178,5944,2318],{"class":319},[178,5946,2259],{"class":195},[178,5948,5767],{"class":319},[178,5950,5951,5953,5956,5958,5960,5962],{"class":180,"line":746},[178,5952,5918],{"class":699},[178,5954,5955],{"class":319}," start",[178,5957,330],{"class":699},[178,5959,2133],{"class":195},[178,5961,2005],{"class":319},[178,5963,5964],{"class":2008},"\u002F\u002F起始下标\n",[178,5966,5967,5969,5972,5975,5978,5981,5983,5985,5988,5990,5992,5994],{"class":180,"line":752},[178,5968,5918],{"class":699},[178,5970,5971],{"class":319}," end",[178,5973,5974],{"class":699},"=sizeof",[178,5976,5977],{"class":319},"(arr)",[178,5979,5980],{"class":699},"\u002Fsizeof",[178,5982,5623],{"class":319},[178,5984,2133],{"class":195},[178,5986,5987],{"class":319},"])",[178,5989,2472],{"class":699},[178,5991,1665],{"class":195},[178,5993,2005],{"class":319},[178,5995,5996],{"class":2008},"\u002F\u002F结束下标\n",[178,5998,5999,6002,6005,6007],{"class":180,"line":757},[178,6000,6001],{"class":699},"   while",[178,6003,6004],{"class":319}," (start",[178,6006,320],{"class":699},[178,6008,6009],{"class":319},"end)\n",[178,6011,6012],{"class":180,"line":763},[178,6013,6014],{"class":319},"   {\n",[178,6016,6017],{"class":180,"line":769},[178,6018,6019],{"class":2008},"    \u002F\u002F实现元素互换代码\n",[178,6021,6022,6024,6027,6029],{"class":180,"line":774},[178,6023,3769],{"class":699},[178,6025,6026],{"class":319}," temp",[178,6028,330],{"class":699},[178,6030,6031],{"class":319},"arr[start];\n",[178,6033,6034,6037,6039],{"class":180,"line":780},[178,6035,6036],{"class":319},"    arr[start]",[178,6038,330],{"class":699},[178,6040,6041],{"class":319},"arr[end];\n",[178,6043,6044,6047,6049],{"class":180,"line":786},[178,6045,6046],{"class":319},"    arr[end]",[178,6048,330],{"class":699},[178,6050,6051],{"class":319},"temp;\n",[178,6053,6054],{"class":180,"line":792},[178,6055,6056],{"class":2008},"    \u002F\u002F下标更新\n",[178,6058,6059,6062,6064],{"class":180,"line":798},[178,6060,6061],{"class":319},"    start",[178,6063,4076],{"class":699},[178,6065,3100],{"class":319},[178,6067,6068,6071,6074],{"class":180,"line":804},[178,6069,6070],{"class":319},"    end",[178,6072,6073],{"class":699},"--",[178,6075,3100],{"class":319},[178,6077,6078],{"class":180,"line":810},[178,6079,6080],{"class":319},"   }\n",[178,6082,6083],{"class":180,"line":816},[178,6084,6085],{"class":2008},"   \u002F\u002F输出逆置后的数组\n",[178,6087,6088,6091,6093,6095,6097,6099,6101,6103,6105,6107,6109,6111],{"class":180,"line":822},[178,6089,6090],{"class":699},"   for",[178,6092,3457],{"class":319},[178,6094,1956],{"class":699},[178,6096,4807],{"class":319},[178,6098,330],{"class":699},[178,6100,2133],{"class":195},[178,6102,4814],{"class":319},[178,6104,320],{"class":699},[178,6106,2259],{"class":195},[178,6108,4814],{"class":319},[178,6110,4076],{"class":699},[178,6112,863],{"class":319},[178,6114,6115],{"class":180,"line":827},[178,6116,6014],{"class":319},[178,6118,6119,6121,6123,6126,6128,6131],{"class":180,"line":832},[178,6120,3357],{"class":319},[178,6122,2983],{"class":699},[178,6124,6125],{"class":319},"arr[i]",[178,6127,2983],{"class":699},[178,6129,6130],{"class":188},"\" \"",[178,6132,3100],{"class":319},[178,6134,6135],{"class":180,"line":850},[178,6136,6080],{"class":319},[178,6138,6139,6142,6144,6146],{"class":180,"line":866},[178,6140,6141],{"class":184},"   system",[178,6143,944],{"class":319},[178,6145,4092],{"class":188},[178,6147,4495],{"class":319},[178,6149,6150,6153,6155],{"class":180,"line":877},[178,6151,6152],{"class":699},"   return",[178,6154,930],{"class":195},[178,6156,3100],{"class":319},[178,6158,6159],{"class":180,"line":882},[178,6160,3371],{"class":319},[2946,6162,6163],{},[29,6164,6165],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[154,6167,6169],{"className":1942,"code":6168,"language":1944,"meta":160,"style":160},"\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",[70,6170,6171,6176,6182,6192,6200,6204,6256,6269,6295,6299,6313,6317,6322,6327,6357,6361,6366,6400,6404,6409,6429,6434,6446,6462,6477,6482,6486,6490,6503,6529,6533,6547,6551,6559],{"__ignoreMap":160},[178,6172,6173],{"class":180,"line":181},[178,6174,6175],{"class":2008},"\u002F\u002F冒泡排序,升序\n",[178,6177,6178,6180],{"class":180,"line":263},[178,6179,3735],{"class":699},[178,6181,3738],{"class":188},[178,6183,6184,6186,6188,6190],{"class":180,"line":274},[178,6185,3743],{"class":699},[178,6187,3746],{"class":699},[178,6189,3749],{"class":184},[178,6191,3100],{"class":319},[178,6193,6194,6196,6198],{"class":180,"line":354},[178,6195,1956],{"class":699},[178,6197,838],{"class":184},[178,6199,3760],{"class":319},[178,6201,6202],{"class":180,"line":364},[178,6203,3352],{"class":319},[178,6205,6206,6208,6210,6212,6215,6217,6220,6222,6224,6226,6228,6230,6232,6234,6236,6238,6240,6242,6244,6246,6248,6250,6252,6254],{"class":180,"line":740},[178,6207,3769],{"class":699},[178,6209,5734],{"class":319},[178,6211,2360],{"class":195},[178,6213,6214],{"class":319},"] ",[178,6216,330],{"class":699},[178,6218,6219],{"class":319}," {",[178,6221,2233],{"class":195},[178,6223,2318],{"class":319},[178,6225,1669],{"class":195},[178,6227,2318],{"class":319},[178,6229,2335],{"class":195},[178,6231,2318],{"class":319},[178,6233,2133],{"class":195},[178,6235,2318],{"class":319},[178,6237,2259],{"class":195},[178,6239,2318],{"class":319},[178,6241,2309],{"class":195},[178,6243,2318],{"class":319},[178,6245,1665],{"class":195},[178,6247,2318],{"class":319},[178,6249,2021],{"class":195},[178,6251,2318],{"class":319},[178,6253,2360],{"class":195},[178,6255,5767],{"class":319},[178,6257,6258,6260,6262,6265,6267],{"class":180,"line":746},[178,6259,3357],{"class":319},[178,6261,2983],{"class":699},[178,6263,6264],{"class":188},"\"排序前：\"",[178,6266,2983],{"class":699},[178,6268,3005],{"class":319},[178,6270,6271,6273,6275,6277,6279,6281,6283,6285,6287,6289,6291,6293],{"class":180,"line":752},[178,6272,988],{"class":699},[178,6274,3457],{"class":319},[178,6276,1956],{"class":699},[178,6278,4807],{"class":319},[178,6280,330],{"class":699},[178,6282,2133],{"class":195},[178,6284,4814],{"class":319},[178,6286,320],{"class":699},[178,6288,2360],{"class":195},[178,6290,4814],{"class":319},[178,6292,4076],{"class":699},[178,6294,863],{"class":319},[178,6296,6297],{"class":180,"line":757},[178,6298,3814],{"class":319},[178,6300,6301,6303,6305,6307,6309,6311],{"class":180,"line":763},[178,6302,5224],{"class":319},[178,6304,2983],{"class":699},[178,6306,6125],{"class":319},[178,6308,2983],{"class":699},[178,6310,6130],{"class":188},[178,6312,3100],{"class":319},[178,6314,6315],{"class":180,"line":769},[178,6316,3971],{"class":319},[178,6318,6319],{"class":180,"line":774},[178,6320,6321],{"class":2008},"    \u002F\u002F开始冒泡排序\n",[178,6323,6324],{"class":180,"line":780},[178,6325,6326],{"class":2008},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[178,6328,6329,6331,6333,6335,6337,6339,6341,6343,6345,6347,6349,6351,6353,6355],{"class":180,"line":786},[178,6330,988],{"class":699},[178,6332,3457],{"class":319},[178,6334,1956],{"class":699},[178,6336,4807],{"class":319},[178,6338,330],{"class":699},[178,6340,2133],{"class":195},[178,6342,4814],{"class":319},[178,6344,320],{"class":699},[178,6346,2360],{"class":195},[178,6348,2472],{"class":699},[178,6350,1665],{"class":195},[178,6352,4814],{"class":319},[178,6354,4076],{"class":699},[178,6356,863],{"class":319},[178,6358,6359],{"class":180,"line":792},[178,6360,3814],{"class":319},[178,6362,6363],{"class":180,"line":798},[178,6364,6365],{"class":2008},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[178,6367,6368,6370,6372,6374,6376,6378,6380,6382,6384,6386,6388,6390,6392,6394,6396,6398],{"class":180,"line":804},[178,6369,5176],{"class":699},[178,6371,3457],{"class":319},[178,6373,1956],{"class":699},[178,6375,5183],{"class":319},[178,6377,330],{"class":699},[178,6379,2133],{"class":195},[178,6381,5190],{"class":319},[178,6383,320],{"class":699},[178,6385,2360],{"class":195},[178,6387,2472],{"class":699},[178,6389,2381],{"class":319},[178,6391,2472],{"class":699},[178,6393,1665],{"class":195},[178,6395,5190],{"class":319},[178,6397,4076],{"class":699},[178,6399,863],{"class":319},[178,6401,6402],{"class":180,"line":810},[178,6403,4293],{"class":319},[178,6405,6406],{"class":180,"line":816},[178,6407,6408],{"class":2008},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[178,6410,6411,6414,6417,6419,6422,6424,6426],{"class":180,"line":822},[178,6412,6413],{"class":699},"            if",[178,6415,6416],{"class":319},"(arr[j]",[178,6418,2899],{"class":699},[178,6420,6421],{"class":319},"arr[j",[178,6423,2421],{"class":699},[178,6425,1665],{"class":195},[178,6427,6428],{"class":319},"])\n",[178,6430,6431],{"class":180,"line":827},[178,6432,6433],{"class":319},"            {\n",[178,6435,6436,6439,6441,6443],{"class":180,"line":832},[178,6437,6438],{"class":699},"                int",[178,6440,6026],{"class":319},[178,6442,330],{"class":699},[178,6444,6445],{"class":319},"arr[j];\n",[178,6447,6448,6451,6453,6455,6457,6459],{"class":180,"line":850},[178,6449,6450],{"class":319},"                arr[j]",[178,6452,330],{"class":699},[178,6454,6421],{"class":319},[178,6456,2421],{"class":699},[178,6458,1665],{"class":195},[178,6460,6461],{"class":319},"];\n",[178,6463,6464,6467,6469,6471,6473,6475],{"class":180,"line":866},[178,6465,6466],{"class":319},"                arr[j",[178,6468,2421],{"class":699},[178,6470,1665],{"class":195},[178,6472,2879],{"class":319},[178,6474,330],{"class":699},[178,6476,6051],{"class":319},[178,6478,6479],{"class":180,"line":877},[178,6480,6481],{"class":319},"            }\n",[178,6483,6484],{"class":180,"line":882},[178,6485,4312],{"class":319},[178,6487,6488],{"class":180,"line":898},[178,6489,3971],{"class":319},[178,6491,6492,6494,6496,6499,6501],{"class":180,"line":914},[178,6493,3357],{"class":319},[178,6495,2983],{"class":699},[178,6497,6498],{"class":188},"\"排序后：\"",[178,6500,2983],{"class":699},[178,6502,3005],{"class":319},[178,6504,6505,6507,6509,6511,6513,6515,6517,6519,6521,6523,6525,6527],{"class":180,"line":919},[178,6506,988],{"class":699},[178,6508,3457],{"class":319},[178,6510,1956],{"class":699},[178,6512,4807],{"class":319},[178,6514,330],{"class":699},[178,6516,2133],{"class":195},[178,6518,4814],{"class":319},[178,6520,320],{"class":699},[178,6522,2360],{"class":195},[178,6524,4814],{"class":319},[178,6526,4076],{"class":699},[178,6528,863],{"class":319},[178,6530,6531],{"class":180,"line":935},[178,6532,3814],{"class":319},[178,6534,6535,6537,6539,6541,6543,6545],{"class":180,"line":952},[178,6536,5224],{"class":319},[178,6538,2983],{"class":699},[178,6540,6125],{"class":319},[178,6542,2983],{"class":699},[178,6544,6130],{"class":188},[178,6546,3100],{"class":319},[178,6548,6549],{"class":180,"line":966},[178,6550,3971],{"class":319},[178,6552,6553,6555,6557],{"class":180,"line":980},[178,6554,5862],{"class":699},[178,6556,930],{"class":195},[178,6558,3100],{"class":319},[178,6560,6561],{"class":180,"line":985},[178,6562,3371],{"class":319},[387,6564,6566],{"id":6565},"_172二维数组","1.7.2二维数组",[26,6568,6569],{},[29,6570,6571],{},"二维数组的四种定义方式",[45,6573,6574,6583],{},[48,6575,6576],{},[51,6577,6578,6581],{},[54,6579,6580],{},"序号",[54,6582,5553],{},[62,6584,6585,6595,6604,6613,6622],{},[51,6586,6587,6589],{},[67,6588,1665],{},[67,6590,6591,6592,2005],{},"数据类型 数组名[行数]",[178,6593,6594],{},"列数",[51,6596,6597,6599],{},[67,6598,1669],{},[67,6600,6591,6601,6603],{},[178,6602,6594],{},"={ {数据1,数据2}，{数据3，数据4}... }",[51,6605,6606,6608],{},[67,6607,2021],{},[67,6609,6591,6610,6612],{},[178,6611,6594],{},"={数据1,数据2,数据3...}",[51,6614,6615,6617],{},[67,6616,2233],{},[67,6618,6619,6620,6612],{},"数据类型 数组名[]",[178,6621,6594],{},[51,6623,6624,6627],{},[67,6625,6626],{},"注意：不能只省略列数",[67,6628],{},[26,6630,6631],{"start":263},[29,6632,6633],{},"二维数组数组名",[2946,6635,6636,6639],{},[29,6637,6638],{},"1.查看二维数组所占内存空间",[29,6640,6641],{},"2.获取二维数组首地址",[19,6643,6644],{},"已知二维数组，求二维数组的行数与列数",[154,6646,6648],{"className":1942,"code":6647,"language":1944,"meta":160,"style":160},"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",[70,6649,6650,6658,6662,6680,6684,6702,6718,6723,6748,6781],{"__ignoreMap":160},[178,6651,6652,6654,6656],{"class":180,"line":181},[178,6653,1956],{"class":699},[178,6655,838],{"class":184},[178,6657,3760],{"class":319},[178,6659,6660],{"class":180,"line":263},[178,6661,3352],{"class":319},[178,6663,6664,6666,6668,6670,6673,6675,6677],{"class":180,"line":274},[178,6665,3769],{"class":699},[178,6667,5734],{"class":319},[178,6669,1669],{"class":195},[178,6671,6672],{"class":319},"][",[178,6674,2021],{"class":195},[178,6676,2879],{"class":319},[178,6678,6679],{"class":699},"=\n",[178,6681,6682],{"class":180,"line":354},[178,6683,3814],{"class":319},[178,6685,6686,6689,6691,6693,6695,6697,6699],{"class":180,"line":364},[178,6687,6688],{"class":319},"        {",[178,6690,1665],{"class":195},[178,6692,2318],{"class":319},[178,6694,1669],{"class":195},[178,6696,2318],{"class":319},[178,6698,2021],{"class":195},[178,6700,6701],{"class":319},"},\n",[178,6703,6704,6706,6708,6710,6712,6714,6716],{"class":180,"line":740},[178,6705,6688],{"class":319},[178,6707,2233],{"class":195},[178,6709,2318],{"class":319},[178,6711,2259],{"class":195},[178,6713,2318],{"class":319},[178,6715,2284],{"class":195},[178,6717,3371],{"class":319},[178,6719,6720],{"class":180,"line":746},[178,6721,6722],{"class":319},"    };\n",[178,6724,6725,6727,6729,6732,6734,6736,6738,6740,6742,6744,6746],{"class":180,"line":752},[178,6726,3357],{"class":319},[178,6728,2983],{"class":699},[178,6730,6731],{"class":188},"\"二维数组的行数\"",[178,6733,3179],{"class":699},[178,6735,5977],{"class":319},[178,6737,5980],{"class":699},[178,6739,5623],{"class":319},[178,6741,2133],{"class":195},[178,6743,5987],{"class":319},[178,6745,2983],{"class":699},[178,6747,3005],{"class":319},[178,6749,6750,6752,6754,6757,6759,6761,6763,6765,6767,6769,6771,6773,6775,6777,6779],{"class":180,"line":757},[178,6751,3357],{"class":319},[178,6753,2983],{"class":699},[178,6755,6756],{"class":188},"\"二维数组的列数\"",[178,6758,3179],{"class":699},[178,6760,5623],{"class":319},[178,6762,2133],{"class":195},[178,6764,5987],{"class":319},[178,6766,5980],{"class":699},[178,6768,5623],{"class":319},[178,6770,2133],{"class":195},[178,6772,6672],{"class":319},[178,6774,2133],{"class":195},[178,6776,5987],{"class":319},[178,6778,2983],{"class":699},[178,6780,3005],{"class":319},[178,6782,6783],{"class":180,"line":763},[178,6784,3371],{"class":319},[19,6786,6787],{},"查看二维数组首地址",[154,6789,6791],{"className":1942,"code":6790,"language":1944,"meta":160,"style":160},"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",[70,6792,6793,6810,6836,6861],{"__ignoreMap":160},[178,6794,6795,6797,6799,6802,6804,6806,6808],{"class":180,"line":181},[178,6796,3176],{"class":319},[178,6798,2983],{"class":699},[178,6800,6801],{"class":188},"\"二维数组首地址：\"",[178,6803,2983],{"class":699},[178,6805,5652],{"class":319},[178,6807,2983],{"class":699},[178,6809,3005],{"class":319},[178,6811,6812,6814,6816,6819,6821,6823,6825,6828,6830,6832,6834],{"class":180,"line":263},[178,6813,3176],{"class":319},[178,6815,2983],{"class":699},[178,6817,6818],{"class":188},"\"二维数组第一行的首地址：\"",[178,6820,2983],{"class":699},[178,6822,944],{"class":319},[178,6824,1956],{"class":699},[178,6826,6827],{"class":319},")arr[",[178,6829,2133],{"class":195},[178,6831,2879],{"class":319},[178,6833,2983],{"class":699},[178,6835,3005],{"class":319},[178,6837,6838,6840,6842,6845,6847,6849,6851,6853,6855,6857,6859],{"class":180,"line":274},[178,6839,3176],{"class":319},[178,6841,2983],{"class":699},[178,6843,6844],{"class":188},"\"二维数组第二行的首地址：\"",[178,6846,2983],{"class":699},[178,6848,944],{"class":319},[178,6850,1956],{"class":699},[178,6852,6827],{"class":319},[178,6854,1665],{"class":195},[178,6856,2879],{"class":319},[178,6858,2983],{"class":699},[178,6860,3005],{"class":319},[178,6862,6863,6865,6867,6870,6872,6874,6876,6878,6880,6882,6884,6886,6888,6890,6892,6894],{"class":180,"line":354},[178,6864,3176],{"class":319},[178,6866,2983],{"class":699},[178,6868,6869],{"class":188},"\"二维数组第一个元素的首地址:\"",[178,6871,2983],{"class":699},[178,6873,944],{"class":319},[178,6875,1956],{"class":699},[178,6877,2369],{"class":319},[178,6879,2293],{"class":699},[178,6881,5678],{"class":319},[178,6883,2133],{"class":195},[178,6885,6672],{"class":319},[178,6887,2133],{"class":195},[178,6889,2879],{"class":319},[178,6891,2983],{"class":699},[178,6893,3048],{"class":319},[178,6895,6896],{"class":2008},"\u002F\u002F对于数，要加取址符\n",[1853,6898,6899],{},"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":160,"searchDepth":263,"depth":263,"links":6901},[6902,6903,6904,6912,6913,6919,6924],{"id":1897,"depth":263,"text":1898},{"id":1904,"depth":263,"text":1905},{"id":1919,"depth":263,"text":1920,"children":6905},[6906,6907,6908,6909,6910,6911],{"id":1923,"depth":274,"text":1924},{"id":1968,"depth":274,"text":1969},{"id":2034,"depth":274,"text":2035},{"id":2964,"depth":274,"text":2965},{"id":3054,"depth":274,"text":3055},{"id":3150,"depth":274,"text":3151},{"id":3192,"depth":263,"text":3193},{"id":3260,"depth":263,"text":3261,"children":6914},[6915,6916,6917,6918],{"id":3264,"depth":274,"text":3265},{"id":3286,"depth":274,"text":3287},{"id":3295,"depth":274,"text":3296},{"id":3304,"depth":274,"text":3305},{"id":3313,"depth":263,"text":3314,"children":6920},[6921,6922,6923],{"id":3317,"depth":274,"text":3318},{"id":3989,"depth":274,"text":3990},{"id":5394,"depth":274,"text":5395},{"id":5534,"depth":263,"text":5535,"children":6925},[6926,6927],{"id":5538,"depth":274,"text":5539},{"id":6565,"depth":274,"text":6566},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":1889,"description":160},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":6934,"title":6935,"body":6936,"description":160,"extension":1880,"meta":8034,"navigation":721,"path":8035,"seo":8036,"stem":8037,"__hash__":8038},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":6937,"toc":8026},[6938,6941,6945,6953,6959,6962,7028,7032,7035,7111,7115,7118,7121,7124,7337,7341,7346,7410,7415,7482,7487,7578,7581,7686,7690,7693,7699,7843,7847,7850,7864,7867,7912,7915,8023],[10,6939,6935],{"id":6940},"_2函数",[14,6942,6944],{"id":6943},"_21函数概述","2.1函数概述",[26,6946,6947,6950],{},[29,6948,6949],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[29,6951,6952],{},"语法：",[154,6954,6957],{"className":6955,"code":6956,"language":159,"meta":160},[157],"返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n",[70,6958,6956],{"__ignoreMap":160},[19,6960,6961],{},"小案例",[154,6963,6965],{"className":1942,"code":6964,"language":1944,"meta":160,"style":160},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[70,6966,6967,6972,6996,7000,7017,7024],{"__ignoreMap":160},[178,6968,6969],{"class":180,"line":181},[178,6970,6971],{"class":2008},"\u002F\u002Fnum1,num2形参\n",[178,6973,6974,6976,6979,6981,6983,6987,6989,6991,6994],{"class":180,"line":263},[178,6975,1956],{"class":699},[178,6977,6978],{"class":184}," add",[178,6980,944],{"class":319},[178,6982,1956],{"class":699},[178,6984,6986],{"class":6985},"s4XuR"," num1",[178,6988,2318],{"class":319},[178,6990,1956],{"class":699},[178,6992,6993],{"class":6985}," num2",[178,6995,863],{"class":319},[178,6997,6998],{"class":180,"line":274},[178,6999,3352],{"class":319},[178,7001,7002,7004,7007,7009,7012,7014],{"class":180,"line":354},[178,7003,3769],{"class":699},[178,7005,7006],{"class":319}," sum",[178,7008,330],{"class":699},[178,7010,7011],{"class":319},"num1",[178,7013,2421],{"class":699},[178,7015,7016],{"class":319},"num2;\n",[178,7018,7019,7021],{"class":180,"line":364},[178,7020,5862],{"class":699},[178,7022,7023],{"class":319}," sum;\n",[178,7025,7026],{"class":180,"line":740},[178,7027,3371],{"class":319},[14,7029,7031],{"id":7030},"_22函数调用","2.2函数调用",[19,7033,7034],{},"调用刚刚写的求和函数",[154,7036,7038],{"className":1942,"code":7037,"language":1944,"meta":160,"style":160},"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",[70,7039,7040,7048,7052,7057,7069,7081,7090,7095,7107],{"__ignoreMap":160},[178,7041,7042,7044,7046],{"class":180,"line":181},[178,7043,1956],{"class":699},[178,7045,838],{"class":184},[178,7047,3760],{"class":319},[178,7049,7050],{"class":180,"line":263},[178,7051,3352],{"class":319},[178,7053,7054],{"class":180,"line":274},[178,7055,7056],{"class":2008},"    \u002F\u002Fa,b实参\n",[178,7058,7059,7061,7063,7065,7067],{"class":180,"line":354},[178,7060,3769],{"class":699},[178,7062,3205],{"class":319},[178,7064,330],{"class":699},[178,7066,2133],{"class":195},[178,7068,3100],{"class":319},[178,7070,7071,7073,7075,7077,7079],{"class":180,"line":364},[178,7072,3769],{"class":699},[178,7074,4609],{"class":319},[178,7076,330],{"class":699},[178,7078,2133],{"class":195},[178,7080,3100],{"class":319},[178,7082,7083,7085,7087],{"class":180,"line":740},[178,7084,3796],{"class":319},[178,7086,3236],{"class":699},[178,7088,7089],{"class":319},"a,b;\n",[178,7091,7092],{"class":180,"line":746},[178,7093,7094],{"class":2008},"    \u002F\u002F调用函数时，实参值传给了形参\n",[178,7096,7097,7099,7101,7104],{"class":180,"line":752},[178,7098,3357],{"class":319},[178,7100,2983],{"class":699},[178,7102,7103],{"class":184},"add",[178,7105,7106],{"class":319},"(a,b);\n",[178,7108,7109],{"class":180,"line":757},[178,7110,3371],{"class":319},[14,7112,7114],{"id":7113},"_23值传递","2.3值传递",[19,7116,7117],{},"值传递就是函数调用时实参将数值传给形参",[19,7119,7120],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,7122,7123],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[154,7125,7127],{"className":1942,"code":7126,"language":1944,"meta":160,"style":160},"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",[70,7128,7129,7151,7155,7168,7185,7203,7214,7223,7232,7245,7261,7277,7286,7290,7298,7302,7314,7326,7333],{"__ignoreMap":160},[178,7130,7131,7134,7137,7139,7141,7143,7145,7147,7149],{"class":180,"line":181},[178,7132,7133],{"class":699},"void",[178,7135,7136],{"class":184}," swap",[178,7138,944],{"class":319},[178,7140,1956],{"class":699},[178,7142,6986],{"class":6985},[178,7144,2318],{"class":319},[178,7146,1956],{"class":699},[178,7148,6993],{"class":6985},[178,7150,863],{"class":319},[178,7152,7153],{"class":180,"line":263},[178,7154,3352],{"class":319},[178,7156,7157,7159,7161,7164,7166],{"class":180,"line":274},[178,7158,3357],{"class":319},[178,7160,2983],{"class":699},[178,7162,7163],{"class":188},"\"交换前：\"",[178,7165,2983],{"class":699},[178,7167,3005],{"class":319},[178,7169,7170,7172,7174,7177,7179,7181,7183],{"class":180,"line":354},[178,7171,3357],{"class":319},[178,7173,2983],{"class":699},[178,7175,7176],{"class":188},"\"num1=\"",[178,7178,2983],{"class":699},[178,7180,7011],{"class":319},[178,7182,2983],{"class":699},[178,7184,3005],{"class":319},[178,7186,7187,7189,7191,7194,7196,7199,7201],{"class":180,"line":364},[178,7188,3357],{"class":319},[178,7190,2983],{"class":699},[178,7192,7193],{"class":188},"\"num2=\"",[178,7195,2983],{"class":699},[178,7197,7198],{"class":319},"num2",[178,7200,2983],{"class":699},[178,7202,3005],{"class":319},[178,7204,7205,7207,7209,7211],{"class":180,"line":740},[178,7206,3769],{"class":699},[178,7208,6026],{"class":319},[178,7210,330],{"class":699},[178,7212,7213],{"class":319},"num1;\n",[178,7215,7216,7219,7221],{"class":180,"line":746},[178,7217,7218],{"class":319},"    num1",[178,7220,330],{"class":699},[178,7222,7016],{"class":319},[178,7224,7225,7228,7230],{"class":180,"line":752},[178,7226,7227],{"class":319},"    num2",[178,7229,330],{"class":699},[178,7231,6051],{"class":319},[178,7233,7234,7236,7238,7241,7243],{"class":180,"line":757},[178,7235,3357],{"class":319},[178,7237,2983],{"class":699},[178,7239,7240],{"class":188},"\"交换后：\"",[178,7242,2983],{"class":699},[178,7244,3005],{"class":319},[178,7246,7247,7249,7251,7253,7255,7257,7259],{"class":180,"line":763},[178,7248,3357],{"class":319},[178,7250,2983],{"class":699},[178,7252,7176],{"class":188},[178,7254,2983],{"class":699},[178,7256,7011],{"class":319},[178,7258,2983],{"class":699},[178,7260,3005],{"class":319},[178,7262,7263,7265,7267,7269,7271,7273,7275],{"class":180,"line":769},[178,7264,3357],{"class":319},[178,7266,2983],{"class":699},[178,7268,7193],{"class":188},[178,7270,2983],{"class":699},[178,7272,7198],{"class":319},[178,7274,2983],{"class":699},[178,7276,3005],{"class":319},[178,7278,7279,7281,7283],{"class":180,"line":774},[178,7280,5862],{"class":699},[178,7282,2005],{"class":319},[178,7284,7285],{"class":2008},"\u002F\u002F或者不写\n",[178,7287,7288],{"class":180,"line":780},[178,7289,3371],{"class":319},[178,7291,7292,7294,7296],{"class":180,"line":786},[178,7293,1956],{"class":699},[178,7295,838],{"class":184},[178,7297,3760],{"class":319},[178,7299,7300],{"class":180,"line":792},[178,7301,3352],{"class":319},[178,7303,7304,7306,7308,7310,7312],{"class":180,"line":798},[178,7305,3769],{"class":699},[178,7307,3205],{"class":319},[178,7309,330],{"class":699},[178,7311,2386],{"class":195},[178,7313,3100],{"class":319},[178,7315,7316,7318,7320,7322,7324],{"class":180,"line":804},[178,7317,3769],{"class":699},[178,7319,4609],{"class":319},[178,7321,330],{"class":699},[178,7323,2640],{"class":195},[178,7325,3100],{"class":319},[178,7327,7328,7331],{"class":180,"line":810},[178,7329,7330],{"class":184},"    swap",[178,7332,7106],{"class":319},[178,7334,7335],{"class":180,"line":816},[178,7336,3371],{"class":319},[14,7338,7340],{"id":7339},"_24函数的常见形式","2.4函数的常见形式",[26,7342,7343],{},[29,7344,7345],{},"无参无返",[154,7347,7349],{"className":1942,"code":7348,"language":1944,"meta":160,"style":160},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[70,7350,7351,7360,7364,7377,7381,7389,7393,7398,7406],{"__ignoreMap":160},[178,7352,7353,7355,7358],{"class":180,"line":181},[178,7354,7133],{"class":699},[178,7356,7357],{"class":184}," test01",[178,7359,3760],{"class":319},[178,7361,7362],{"class":180,"line":263},[178,7363,3352],{"class":319},[178,7365,7366,7368,7370,7373,7375],{"class":180,"line":274},[178,7367,3357],{"class":319},[178,7369,2983],{"class":699},[178,7371,7372],{"class":188},"\"你好\"",[178,7374,2983],{"class":699},[178,7376,3005],{"class":319},[178,7378,7379],{"class":180,"line":354},[178,7380,3371],{"class":319},[178,7382,7383,7385,7387],{"class":180,"line":364},[178,7384,1956],{"class":699},[178,7386,838],{"class":184},[178,7388,3760],{"class":319},[178,7390,7391],{"class":180,"line":740},[178,7392,3352],{"class":319},[178,7394,7395],{"class":180,"line":746},[178,7396,7397],{"class":2008},"    \u002F\u002F函数调用\n",[178,7399,7400,7403],{"class":180,"line":752},[178,7401,7402],{"class":184},"    test01",[178,7404,7405],{"class":319},"();\n",[178,7407,7408],{"class":180,"line":757},[178,7409,3371],{"class":319},[26,7411,7412],{"start":263},[29,7413,7414],{},"有参无返",[154,7416,7418],{"className":1942,"code":7417,"language":1944,"meta":160,"style":160},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[70,7419,7420,7435,7439,7451,7455,7463,7467,7478],{"__ignoreMap":160},[178,7421,7422,7424,7427,7429,7431,7433],{"class":180,"line":181},[178,7423,7133],{"class":699},[178,7425,7426],{"class":184}," test02",[178,7428,944],{"class":319},[178,7430,1956],{"class":699},[178,7432,3205],{"class":6985},[178,7434,863],{"class":319},[178,7436,7437],{"class":180,"line":263},[178,7438,3352],{"class":319},[178,7440,7441,7443,7445,7447,7449],{"class":180,"line":274},[178,7442,3357],{"class":319},[178,7444,2983],{"class":699},[178,7446,7372],{"class":188},[178,7448,2983],{"class":699},[178,7450,3005],{"class":319},[178,7452,7453],{"class":180,"line":354},[178,7454,3371],{"class":319},[178,7456,7457,7459,7461],{"class":180,"line":364},[178,7458,1956],{"class":699},[178,7460,838],{"class":184},[178,7462,3760],{"class":319},[178,7464,7465],{"class":180,"line":740},[178,7466,3352],{"class":319},[178,7468,7469,7472,7474,7476],{"class":180,"line":746},[178,7470,7471],{"class":184},"    test02",[178,7473,944],{"class":319},[178,7475,2251],{"class":195},[178,7477,4495],{"class":319},[178,7479,7480],{"class":180,"line":752},[178,7481,3371],{"class":319},[26,7483,7484],{"start":274},[29,7485,7486],{},"无参有返",[154,7488,7490],{"className":1942,"code":7489,"language":1944,"meta":160,"style":160},"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",[70,7491,7492,7501,7505,7517,7526,7530,7538,7542,7555,7574],{"__ignoreMap":160},[178,7493,7494,7496,7499],{"class":180,"line":181},[178,7495,1956],{"class":699},[178,7497,7498],{"class":184}," test03",[178,7500,3760],{"class":319},[178,7502,7503],{"class":180,"line":263},[178,7504,3352],{"class":319},[178,7506,7507,7509,7511,7513,7515],{"class":180,"line":274},[178,7508,3357],{"class":319},[178,7510,2983],{"class":699},[178,7512,7372],{"class":188},[178,7514,2983],{"class":699},[178,7516,3005],{"class":319},[178,7518,7519,7521,7524],{"class":180,"line":354},[178,7520,5862],{"class":699},[178,7522,7523],{"class":195}," 100",[178,7525,3100],{"class":319},[178,7527,7528],{"class":180,"line":364},[178,7529,3371],{"class":319},[178,7531,7532,7534,7536],{"class":180,"line":740},[178,7533,1956],{"class":699},[178,7535,838],{"class":184},[178,7537,3760],{"class":319},[178,7539,7540],{"class":180,"line":746},[178,7541,3352],{"class":319},[178,7543,7544,7546,7548,7550,7553],{"class":180,"line":752},[178,7545,3769],{"class":699},[178,7547,6986],{"class":319},[178,7549,330],{"class":699},[178,7551,7552],{"class":184},"test03",[178,7554,7405],{"class":319},[178,7556,7557,7559,7561,7563,7565,7567,7569,7571],{"class":180,"line":757},[178,7558,3357],{"class":319},[178,7560,2983],{"class":699},[178,7562,7176],{"class":188},[178,7564,2983],{"class":699},[178,7566,7011],{"class":319},[178,7568,2983],{"class":699},[178,7570,3048],{"class":319},[178,7572,7573],{"class":2008}," \u002F\u002F100\n",[178,7575,7576],{"class":180,"line":763},[178,7577,3371],{"class":319},[19,7579,7580],{},"4.有参有返",[154,7582,7584],{"className":1942,"code":7583,"language":1944,"meta":160,"style":160},"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",[70,7585,7586,7601,7605,7618,7624,7628,7637,7641,7653,7667,7682],{"__ignoreMap":160},[178,7587,7588,7590,7593,7595,7597,7599],{"class":180,"line":181},[178,7589,1956],{"class":699},[178,7591,7592],{"class":184}," test04",[178,7594,944],{"class":319},[178,7596,1956],{"class":699},[178,7598,3205],{"class":6985},[178,7600,863],{"class":319},[178,7602,7603],{"class":180,"line":263},[178,7604,3352],{"class":319},[178,7606,7607,7609,7611,7614,7616],{"class":180,"line":274},[178,7608,3357],{"class":319},[178,7610,2983],{"class":699},[178,7612,7613],{"class":188},"\"hello\"",[178,7615,2983],{"class":699},[178,7617,3005],{"class":319},[178,7619,7620,7622],{"class":180,"line":354},[178,7621,5862],{"class":699},[178,7623,3239],{"class":319},[178,7625,7626],{"class":180,"line":364},[178,7627,3371],{"class":319},[178,7629,7630,7632,7635],{"class":180,"line":740},[178,7631,1956],{"class":699},[178,7633,7634],{"class":184}," mian",[178,7636,3760],{"class":319},[178,7638,7639],{"class":180,"line":746},[178,7640,3352],{"class":319},[178,7642,7643,7645,7647,7649,7651],{"class":180,"line":752},[178,7644,3769],{"class":699},[178,7646,4609],{"class":319},[178,7648,330],{"class":699},[178,7650,1665],{"class":195},[178,7652,3100],{"class":319},[178,7654,7655,7657,7659,7661,7664],{"class":180,"line":757},[178,7656,3769],{"class":699},[178,7658,4625],{"class":319},[178,7660,330],{"class":699},[178,7662,7663],{"class":184},"test04",[178,7665,7666],{"class":319},"(b);\n",[178,7668,7669,7671,7673,7675,7677,7679],{"class":180,"line":763},[178,7670,3357],{"class":319},[178,7672,2983],{"class":699},[178,7674,2228],{"class":319},[178,7676,2983],{"class":699},[178,7678,3048],{"class":319},[178,7680,7681],{"class":2008}," \u002F\u002F1\n",[178,7683,7684],{"class":180,"line":769},[178,7685,3371],{"class":319},[14,7687,7689],{"id":7688},"_25函数的声明","2.5函数的声明",[19,7691,7692],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,7694,7695,7696],{},"函数的",[2093,7697,7698],{},"声明可以多次，但是函数的定义只能有一次",[154,7700,7702],{"className":1942,"code":7701,"language":1944,"meta":160,"style":160},"\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",[70,7703,7704,7709,7714,7739,7748,7752,7764,7776,7792,7796,7816,7820,7839],{"__ignoreMap":160},[178,7705,7706],{"class":180,"line":181},[178,7707,7708],{"class":2008},"\u002F\u002F函数声明\n",[178,7710,7711],{"class":180,"line":263},[178,7712,7713],{"class":2008},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[178,7715,7716,7718,7721,7723,7725,7727,7729,7731,7733,7736],{"class":180,"line":274},[178,7717,1956],{"class":699},[178,7719,7720],{"class":184}," max",[178,7722,944],{"class":319},[178,7724,1956],{"class":699},[178,7726,3205],{"class":6985},[178,7728,2318],{"class":319},[178,7730,1956],{"class":699},[178,7732,4609],{"class":6985},[178,7734,7735],{"class":319},");",[178,7737,7738],{"class":2008},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[178,7740,7741,7743,7745],{"class":180,"line":354},[178,7742,1956],{"class":699},[178,7744,838],{"class":184},[178,7746,7747],{"class":319},"() \n",[178,7749,7750],{"class":180,"line":364},[178,7751,3352],{"class":319},[178,7753,7754,7756,7758,7760,7762],{"class":180,"line":740},[178,7755,3769],{"class":699},[178,7757,3205],{"class":319},[178,7759,330],{"class":699},[178,7761,2386],{"class":195},[178,7763,3100],{"class":319},[178,7765,7766,7768,7770,7772,7774],{"class":180,"line":746},[178,7767,3769],{"class":699},[178,7769,4609],{"class":319},[178,7771,330],{"class":699},[178,7773,2640],{"class":195},[178,7775,3100],{"class":319},[178,7777,7778,7780,7782,7785,7788,7790],{"class":180,"line":752},[178,7779,3357],{"class":319},[178,7781,2983],{"class":699},[178,7783,7784],{"class":184},"max",[178,7786,7787],{"class":319},"(a,b)",[178,7789,2983],{"class":699},[178,7791,3005],{"class":319},[178,7793,7794],{"class":180,"line":757},[178,7795,3371],{"class":319},[178,7797,7798,7800,7802,7804,7806,7808,7810,7812,7814],{"class":180,"line":763},[178,7799,1956],{"class":699},[178,7801,7720],{"class":184},[178,7803,944],{"class":319},[178,7805,1956],{"class":699},[178,7807,3205],{"class":6985},[178,7809,2318],{"class":319},[178,7811,1956],{"class":699},[178,7813,4609],{"class":6985},[178,7815,863],{"class":319},[178,7817,7818],{"class":180,"line":769},[178,7819,3352],{"class":319},[178,7821,7822,7824,7826,7828,7830,7832,7834,7836],{"class":180,"line":774},[178,7823,5862],{"class":699},[178,7825,3205],{"class":319},[178,7827,2899],{"class":699},[178,7829,2203],{"class":319},[178,7831,2925],{"class":699},[178,7833,2178],{"class":319},[178,7835,2799],{"class":699},[178,7837,7838],{"class":319},"b;\n",[178,7840,7841],{"class":180,"line":780},[178,7842,3371],{"class":319},[14,7844,7846],{"id":7845},"_26函数的分文件编写","2.6函数的分文件编写",[19,7848,7849],{},"4个步骤：",[2946,7851,7852,7855,7858,7861],{},[29,7853,7854],{},"1.创建后缀名为.h的头文件",[29,7856,7857],{},"2.创建后缀名为.cpp的源文件",[29,7859,7860],{},"3.在头文件中写函数的定义",[29,7862,7863],{},"4.在源文件中写函数的定义\n示例：",[19,7865,7866],{},"头文件：swap.h",[154,7868,7870],{"className":1942,"code":7869,"language":1944,"meta":160,"style":160},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[70,7871,7872,7878,7888,7892],{"__ignoreMap":160},[178,7873,7874,7876],{"class":180,"line":181},[178,7875,3735],{"class":699},[178,7877,3738],{"class":188},[178,7879,7880,7882,7884,7886],{"class":180,"line":263},[178,7881,3743],{"class":699},[178,7883,3746],{"class":699},[178,7885,3749],{"class":184},[178,7887,3100],{"class":319},[178,7889,7890],{"class":180,"line":274},[178,7891,7708],{"class":2008},[178,7893,7894,7896,7898,7900,7902,7904,7906,7908,7910],{"class":180,"line":354},[178,7895,7133],{"class":699},[178,7897,7136],{"class":184},[178,7899,944],{"class":319},[178,7901,1956],{"class":699},[178,7903,3205],{"class":6985},[178,7905,2318],{"class":319},[178,7907,1956],{"class":699},[178,7909,4609],{"class":6985},[178,7911,4495],{"class":319},[19,7913,7914],{},"源文件：swap.cpp",[154,7916,7918],{"className":1942,"code":7917,"language":1944,"meta":160,"style":160},"#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",[70,7919,7920,7927,7932,7952,7956,7967,7976,7985,8002,8019],{"__ignoreMap":160},[178,7921,7922,7924],{"class":180,"line":181},[178,7923,3735],{"class":699},[178,7925,7926],{"class":188}," \"swap.h\"\n",[178,7928,7929],{"class":180,"line":263},[178,7930,7931],{"class":2008},"\u002F\u002F函数的定义\n",[178,7933,7934,7936,7938,7940,7942,7944,7946,7948,7950],{"class":180,"line":274},[178,7935,7133],{"class":699},[178,7937,7136],{"class":184},[178,7939,944],{"class":319},[178,7941,1956],{"class":699},[178,7943,3205],{"class":6985},[178,7945,2318],{"class":319},[178,7947,1956],{"class":699},[178,7949,4609],{"class":6985},[178,7951,863],{"class":319},[178,7953,7954],{"class":180,"line":354},[178,7955,3352],{"class":319},[178,7957,7958,7960,7962,7964],{"class":180,"line":364},[178,7959,3769],{"class":699},[178,7961,6026],{"class":319},[178,7963,330],{"class":699},[178,7965,7966],{"class":319},"a;\n",[178,7968,7969,7972,7974],{"class":180,"line":740},[178,7970,7971],{"class":319},"    a",[178,7973,330],{"class":699},[178,7975,7838],{"class":319},[178,7977,7978,7981,7983],{"class":180,"line":746},[178,7979,7980],{"class":319},"    b",[178,7982,330],{"class":699},[178,7984,6051],{"class":319},[178,7986,7987,7989,7991,7994,7996,7998,8000],{"class":180,"line":752},[178,7988,3357],{"class":319},[178,7990,2983],{"class":699},[178,7992,7993],{"class":188},"\"a=\"",[178,7995,2983],{"class":699},[178,7997,2178],{"class":319},[178,7999,2983],{"class":699},[178,8001,3005],{"class":319},[178,8003,8004,8006,8008,8011,8013,8015,8017],{"class":180,"line":757},[178,8005,3357],{"class":319},[178,8007,2983],{"class":699},[178,8009,8010],{"class":188},"\"b=\"",[178,8012,2983],{"class":699},[178,8014,2203],{"class":319},[178,8016,2983],{"class":699},[178,8018,3005],{"class":319},[178,8020,8021],{"class":180,"line":763},[178,8022,3371],{"class":319},[1853,8024,8025],{},"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":160,"searchDepth":263,"depth":263,"links":8027},[8028,8029,8030,8031,8032,8033],{"id":6943,"depth":263,"text":6944},{"id":7030,"depth":263,"text":7031},{"id":7113,"depth":263,"text":7114},{"id":7339,"depth":263,"text":7340},{"id":7688,"depth":263,"text":7689},{"id":7845,"depth":263,"text":7846},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":6935,"description":160},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":8040,"title":8041,"body":8042,"description":8049,"extension":1880,"meta":9454,"navigation":721,"path":9455,"seo":9456,"stem":9457,"__hash__":9458},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":8043,"toc":9444},[8044,8047,8050,8054,8216,8220,8223,8226,8229,8232,8372,8376,8379,8382,8385,8450,8454,8459,8526,8529,8533,8536,8547,8552,8572,8575,8580,8599,8602,8606,8625,8628,8632,8867,8871,8874,8877,8880,9042,9045,9049,9052,9058,9441],[10,8045,8041],{"id":8046},"_3指针",[19,8048,8049],{},"通过指针保存一个地址，指针就是个地址",[14,8051,8053],{"id":8052},"_31定义指针","3.1定义指针",[154,8055,8057],{"className":1942,"code":8056,"language":1944,"meta":160,"style":160},"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",[70,8058,8059,8067,8071,8076,8088,8093,8101,8111,8129,8149,8153,8158,8163,8168,8182,8198,8212],{"__ignoreMap":160},[178,8060,8061,8063,8065],{"class":180,"line":181},[178,8062,1956],{"class":699},[178,8064,838],{"class":184},[178,8066,3760],{"class":319},[178,8068,8069],{"class":180,"line":263},[178,8070,3352],{"class":319},[178,8072,8073],{"class":180,"line":274},[178,8074,8075],{"class":2008},"    \u002F\u002F1.定义指针\n",[178,8077,8078,8080,8082,8084,8086],{"class":180,"line":354},[178,8079,3769],{"class":699},[178,8081,3205],{"class":319},[178,8083,330],{"class":699},[178,8085,2386],{"class":195},[178,8087,3100],{"class":319},[178,8089,8090],{"class":180,"line":364},[178,8091,8092],{"class":2008},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[178,8094,8095,8098],{"class":180,"line":740},[178,8096,8097],{"class":699},"    int*",[178,8099,8100],{"class":319},"p;\n",[178,8102,8103,8106,8109],{"class":180,"line":746},[178,8104,8105],{"class":319},"    p",[178,8107,8108],{"class":699},"=&",[178,8110,7966],{"class":319},[178,8112,8113,8115,8117,8120,8123,8125,8127],{"class":180,"line":752},[178,8114,3357],{"class":319},[178,8116,2983],{"class":699},[178,8118,8119],{"class":188},"\"a的地址为：\"",[178,8121,8122],{"class":699},"\u003C\u003C&",[178,8124,2178],{"class":319},[178,8126,2983],{"class":699},[178,8128,3005],{"class":319},[178,8130,8131,8133,8135,8138,8140,8142,8144,8146],{"class":180,"line":757},[178,8132,3357],{"class":319},[178,8134,2983],{"class":699},[178,8136,8137],{"class":188},"\"指针p为：\"",[178,8139,2983],{"class":699},[178,8141,19],{"class":319},[178,8143,2983],{"class":699},[178,8145,3048],{"class":319},[178,8147,8148],{"class":2008},"\u002F\u002F指针p表示的就是a的地址\n",[178,8150,8151],{"class":180,"line":763},[178,8152,722],{"emptyLinePlaceholder":721},[178,8154,8155],{"class":180,"line":769},[178,8156,8157],{"class":2008},"    \u002F\u002F2.使用指针\n",[178,8159,8160],{"class":180,"line":774},[178,8161,8162],{"class":2008},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[178,8164,8165],{"class":180,"line":780},[178,8166,8167],{"class":2008},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[178,8169,8170,8173,8175,8177,8180],{"class":180,"line":786},[178,8171,8172],{"class":699},"    *",[178,8174,19],{"class":319},[178,8176,330],{"class":699},[178,8178,8179],{"class":195},"1000",[178,8181,3100],{"class":319},[178,8183,8184,8186,8189,8191,8193,8195],{"class":180,"line":792},[178,8185,3357],{"class":319},[178,8187,8188],{"class":699},"\u003C\u003C*",[178,8190,19],{"class":319},[178,8192,2983],{"class":699},[178,8194,3048],{"class":319},[178,8196,8197],{"class":2008},"\u002F\u002F1000\n",[178,8199,8200,8202,8204,8206,8208,8210],{"class":180,"line":798},[178,8201,3357],{"class":319},[178,8203,2983],{"class":699},[178,8205,2178],{"class":319},[178,8207,2983],{"class":699},[178,8209,3048],{"class":319},[178,8211,8197],{"class":2008},[178,8213,8214],{"class":180,"line":804},[178,8215,3371],{"class":319},[14,8217,8219],{"id":8218},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,8221,8222],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,8224,8225],{},"在32位操作系统下：占用4个字节空间",[19,8227,8228],{},"在64位操作系统下：占用8个字节空间",[19,8230,8231],{},"上方是不管啥数据类型的",[154,8233,8235],{"className":1942,"code":8234,"language":1944,"meta":160,"style":160},"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",[70,8236,8237,8245,8249,8254,8266,8271,8276,8281,8294,8316,8342,8368],{"__ignoreMap":160},[178,8238,8239,8241,8243],{"class":180,"line":181},[178,8240,1956],{"class":699},[178,8242,838],{"class":184},[178,8244,3760],{"class":319},[178,8246,8247],{"class":180,"line":263},[178,8248,3352],{"class":319},[178,8250,8251],{"class":180,"line":274},[178,8252,8253],{"class":2008},"    \u002F\u002F指针所占内存空间\n",[178,8255,8256,8258,8260,8262,8264],{"class":180,"line":354},[178,8257,3769],{"class":699},[178,8259,3205],{"class":319},[178,8261,330],{"class":699},[178,8263,2386],{"class":195},[178,8265,3100],{"class":319},[178,8267,8268],{"class":180,"line":364},[178,8269,8270],{"class":2008},"    \u002F\u002Fint *p;\n",[178,8272,8273],{"class":180,"line":740},[178,8274,8275],{"class":2008},"    \u002F\u002Fp=&a;\n",[178,8277,8278],{"class":180,"line":746},[178,8279,8280],{"class":2008},"    \u002F\u002F上述可以写为以下：\n",[178,8282,8283,8285,8288,8290,8292],{"class":180,"line":752},[178,8284,3769],{"class":699},[178,8286,8287],{"class":699}," *",[178,8289,19],{"class":319},[178,8291,8108],{"class":699},[178,8293,7966],{"class":319},[178,8295,8296,8299,8301,8304,8306,8309,8311,8313],{"class":180,"line":757},[178,8297,8298],{"class":319},"    cout ",[178,8300,2983],{"class":699},[178,8302,8303],{"class":188},"\"sizeof(int *)\"",[178,8305,3179],{"class":699},[178,8307,8308],{"class":319},"(p)",[178,8310,2983],{"class":699},[178,8312,3048],{"class":319},[178,8314,8315],{"class":2008},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[178,8317,8318,8320,8322,8324,8326,8328,8330,8332,8334,8336,8339],{"class":180,"line":763},[178,8319,8298],{"class":319},[178,8321,2983],{"class":699},[178,8323,8303],{"class":188},[178,8325,3179],{"class":699},[178,8327,944],{"class":319},[178,8329,1956],{"class":699},[178,8331,8287],{"class":699},[178,8333,2369],{"class":319},[178,8335,2983],{"class":699},[178,8337,8338],{"class":319},"endl",[178,8340,8341],{"class":2008},"  \u002F\u002F4字节(32位的话)\n",[178,8343,8344,8346,8348,8351,8353,8355,8357,8359,8361,8363,8365],{"class":180,"line":769},[178,8345,8298],{"class":319},[178,8347,2983],{"class":699},[178,8349,8350],{"class":188},"\"sizeof(char *)\"",[178,8352,3179],{"class":699},[178,8354,944],{"class":319},[178,8356,2045],{"class":699},[178,8358,8287],{"class":699},[178,8360,2369],{"class":319},[178,8362,2983],{"class":699},[178,8364,3048],{"class":319},[178,8366,8367],{"class":2008}," \u002F\u002F4字节(32位的话)\n",[178,8369,8370],{"class":180,"line":774},[178,8371,3371],{"class":319},[14,8373,8375],{"id":8374},"_33空指针","3.3空指针",[19,8377,8378],{},"空指针：指针变量指向内存中编号为0的空间",[19,8380,8381],{},"用途：初始化指针变量",[19,8383,8384],{},"注意：空指针指向的内存是不可以访问的",[154,8386,8388],{"className":1942,"code":8387,"language":1944,"meta":160,"style":160},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[70,8389,8390,8398,8402,8407,8421,8426,8441,8446],{"__ignoreMap":160},[178,8391,8392,8394,8396],{"class":180,"line":181},[178,8393,1956],{"class":699},[178,8395,838],{"class":184},[178,8397,3760],{"class":319},[178,8399,8400],{"class":180,"line":263},[178,8401,3352],{"class":319},[178,8403,8404],{"class":180,"line":274},[178,8405,8406],{"class":2008},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[178,8408,8409,8411,8413,8415,8417,8419],{"class":180,"line":354},[178,8410,3769],{"class":699},[178,8412,8287],{"class":699},[178,8414,19],{"class":319},[178,8416,330],{"class":699},[178,8418,4176],{"class":195},[178,8420,3100],{"class":319},[178,8422,8423],{"class":180,"line":364},[178,8424,8425],{"class":2008},"    \u002F\u002F2.空指针不能进行访问\n",[178,8427,8428,8430,8432,8434,8436,8438],{"class":180,"line":740},[178,8429,8172],{"class":699},[178,8431,19],{"class":319},[178,8433,330],{"class":699},[178,8435,2251],{"class":195},[178,8437,2005],{"class":319},[178,8439,8440],{"class":2008},"\u002F\u002F直接报错，压根不能访问\n",[178,8442,8443],{"class":180,"line":746},[178,8444,8445],{"class":2008},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[178,8447,8448],{"class":180,"line":752},[178,8449,3371],{"class":319},[14,8451,8453],{"id":8452},"_34野指针","3.4野指针",[19,8455,8456],{},[2093,8457,8458],{},"指针变量指向非法的内存空间",[154,8460,8462],{"className":1942,"code":8461,"language":1944,"meta":160,"style":160},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[70,8463,8464,8472,8476,8505,8510,8522],{"__ignoreMap":160},[178,8465,8466,8468,8470],{"class":180,"line":181},[178,8467,1956],{"class":699},[178,8469,838],{"class":184},[178,8471,3760],{"class":319},[178,8473,8474],{"class":180,"line":263},[178,8475,3352],{"class":319},[178,8477,8478,8480,8482,8484,8486,8488,8490,8492,8494,8497,8500,8502],{"class":180,"line":274},[178,8479,3769],{"class":699},[178,8481,8287],{"class":699},[178,8483,19],{"class":319},[178,8485,330],{"class":699},[178,8487,944],{"class":319},[178,8489,1956],{"class":699},[178,8491,8287],{"class":699},[178,8493,2369],{"class":319},[178,8495,8496],{"class":699},"0x",[178,8498,8499],{"class":195},"1100",[178,8501,2005],{"class":319},[178,8503,8504],{"class":2008}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[178,8506,8507],{"class":180,"line":354},[178,8508,8509],{"class":2008},"    \u002F\u002F访问野指针报错\n",[178,8511,8512,8514,8516,8518,8520],{"class":180,"line":364},[178,8513,3357],{"class":319},[178,8515,8188],{"class":699},[178,8517,19],{"class":319},[178,8519,2983],{"class":699},[178,8521,3005],{"class":319},[178,8523,8524],{"class":180,"line":740},[178,8525,3371],{"class":319},[19,8527,8528],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8530,8532],{"id":8531},"_35const修饰指针","3.5const修饰指针",[19,8534,8535],{},"三种情况：",[2946,8537,8538,8541,8544],{},[29,8539,8540],{},"const修饰指针 常量指针",[29,8542,8543],{},"const修饰常量 指针常量",[29,8545,8546],{},"const即修饰指针，又修饰常量",[26,8548,8549],{},[29,8550,8551],{},"常量指针",[154,8553,8555],{"className":1942,"code":8554,"language":1944,"meta":160,"style":160},"const int *p=&a;\n",[70,8556,8557],{"__ignoreMap":160},[178,8558,8559,8562,8564,8566,8568,8570],{"class":180,"line":181},[178,8560,8561],{"class":699},"const",[178,8563,4166],{"class":699},[178,8565,8287],{"class":699},[178,8567,19],{"class":319},[178,8569,8108],{"class":699},[178,8571,7966],{"class":319},[19,8573,8574],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[26,8576,8577],{"start":263},[29,8578,8579],{},"指针常量",[154,8581,8583],{"className":1942,"code":8582,"language":1944,"meta":160,"style":160},"int *const p=&a;\n",[70,8584,8585],{"__ignoreMap":160},[178,8586,8587,8589,8592,8595,8597],{"class":180,"line":181},[178,8588,1956],{"class":699},[178,8590,8591],{"class":699}," *const",[178,8593,8594],{"class":319}," p",[178,8596,8108],{"class":699},[178,8598,7966],{"class":319},[19,8600,8601],{},"指针的指向不可以改，指针指向的值可以改",[26,8603,8604],{"start":274},[29,8605,8546],{},[154,8607,8609],{"className":1942,"code":8608,"language":1944,"meta":160,"style":160},"const int *const p=&a;\n",[70,8610,8611],{"__ignoreMap":160},[178,8612,8613,8615,8617,8619,8621,8623],{"class":180,"line":181},[178,8614,8561],{"class":699},[178,8616,4166],{"class":699},[178,8618,8591],{"class":699},[178,8620,8594],{"class":319},[178,8622,8108],{"class":699},[178,8624,7966],{"class":319},[19,8626,8627],{},"指针的指向和指针指向的值都不可以改变",[14,8629,8631],{"id":8630},"_36指针和数组","3.6指针和数组",[154,8633,8635],{"className":1942,"code":8634,"language":1944,"meta":160,"style":160},"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",[70,8636,8637,8645,8649,8654,8708,8729,8745,8761,8772,8789,8794,8808,8834,8838,8850,8859,8863],{"__ignoreMap":160},[178,8638,8639,8641,8643],{"class":180,"line":181},[178,8640,1956],{"class":699},[178,8642,838],{"class":184},[178,8644,3760],{"class":319},[178,8646,8647],{"class":180,"line":263},[178,8648,3352],{"class":319},[178,8650,8651],{"class":180,"line":274},[178,8652,8653],{"class":2008},"    \u002F\u002F利用指针访问数组中的元素\n",[178,8655,8656,8658,8660,8662,8664,8666,8668,8670,8672,8674,8676,8678,8680,8682,8684,8686,8688,8690,8692,8694,8696,8698,8700,8702,8704,8706],{"class":180,"line":354},[178,8657,3769],{"class":699},[178,8659,5734],{"class":319},[178,8661,2386],{"class":195},[178,8663,2879],{"class":319},[178,8665,330],{"class":699},[178,8667,2836],{"class":319},[178,8669,1665],{"class":195},[178,8671,2318],{"class":319},[178,8673,1669],{"class":195},[178,8675,2318],{"class":319},[178,8677,2021],{"class":195},[178,8679,2318],{"class":319},[178,8681,2233],{"class":195},[178,8683,2318],{"class":319},[178,8685,2259],{"class":195},[178,8687,2318],{"class":319},[178,8689,2284],{"class":195},[178,8691,2318],{"class":319},[178,8693,2309],{"class":195},[178,8695,2318],{"class":319},[178,8697,2335],{"class":195},[178,8699,2318],{"class":319},[178,8701,2360],{"class":195},[178,8703,2318],{"class":319},[178,8705,2386],{"class":195},[178,8707,5767],{"class":319},[178,8709,8710,8712,8714,8717,8719,8721,8723,8725,8727],{"class":180,"line":364},[178,8711,3357],{"class":319},[178,8713,2983],{"class":699},[178,8715,8716],{"class":188},"\"数组的第一个元素为：\"",[178,8718,2983],{"class":699},[178,8720,5678],{"class":319},[178,8722,2133],{"class":195},[178,8724,2879],{"class":319},[178,8726,2983],{"class":699},[178,8728,3005],{"class":319},[178,8730,8731,8733,8735,8737,8739,8742],{"class":180,"line":740},[178,8732,3769],{"class":699},[178,8734,8287],{"class":699},[178,8736,19],{"class":319},[178,8738,330],{"class":699},[178,8740,8741],{"class":319},"arr;",[178,8743,8744],{"class":2008},"\u002F\u002F注意数才要加取地址符号&\n",[178,8746,8747,8749,8751,8753,8755,8757,8759],{"class":180,"line":746},[178,8748,3357],{"class":319},[178,8750,2983],{"class":699},[178,8752,8716],{"class":188},[178,8754,8188],{"class":699},[178,8756,19],{"class":319},[178,8758,2983],{"class":699},[178,8760,3005],{"class":319},[178,8762,8763,8765,8767,8769],{"class":180,"line":752},[178,8764,8105],{"class":319},[178,8766,4076],{"class":699},[178,8768,2005],{"class":319},[178,8770,8771],{"class":2008}," \u002F\u002F让指针向后偏移4个字节\n",[178,8773,8774,8776,8778,8781,8783,8785,8787],{"class":180,"line":757},[178,8775,3357],{"class":319},[178,8777,2983],{"class":699},[178,8779,8780],{"class":188},"\"数组的第二个元素为：\"",[178,8782,8188],{"class":699},[178,8784,19],{"class":319},[178,8786,2983],{"class":699},[178,8788,3005],{"class":319},[178,8790,8791],{"class":180,"line":763},[178,8792,8793],{"class":2008},"    \u002F\u002F利用指针遍历数组\n",[178,8795,8796,8798,8800,8803,8805],{"class":180,"line":769},[178,8797,3769],{"class":699},[178,8799,8287],{"class":699},[178,8801,8802],{"class":319},"p2",[178,8804,330],{"class":699},[178,8806,8807],{"class":319},"arr;\n",[178,8809,8810,8812,8814,8816,8818,8820,8822,8824,8826,8828,8830,8832],{"class":180,"line":774},[178,8811,988],{"class":699},[178,8813,3457],{"class":319},[178,8815,1956],{"class":699},[178,8817,4807],{"class":319},[178,8819,330],{"class":699},[178,8821,2133],{"class":195},[178,8823,4814],{"class":319},[178,8825,320],{"class":699},[178,8827,2386],{"class":195},[178,8829,4814],{"class":319},[178,8831,4076],{"class":699},[178,8833,863],{"class":319},[178,8835,8836],{"class":180,"line":780},[178,8837,3814],{"class":319},[178,8839,8840,8842,8844,8846,8848],{"class":180,"line":786},[178,8841,5224],{"class":319},[178,8843,8188],{"class":699},[178,8845,8802],{"class":319},[178,8847,2983],{"class":699},[178,8849,3005],{"class":319},[178,8851,8852,8855,8857],{"class":180,"line":792},[178,8853,8854],{"class":319},"        p2",[178,8856,4076],{"class":699},[178,8858,3100],{"class":319},[178,8860,8861],{"class":180,"line":798},[178,8862,3971],{"class":319},[178,8864,8865],{"class":180,"line":804},[178,8866,3371],{"class":319},[14,8868,8870],{"id":8869},"_37指针和函数","3.7指针和函数",[19,8872,8873],{},"利用指针做函数参数，可以修改实参的值",[19,8875,8876],{},"值传递：只改变形参，不改变实参",[19,8878,8879],{},"地址传递：",[154,8881,8883],{"className":1942,"code":8882,"language":1944,"meta":160,"style":160},"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",[70,8884,8885,8910,8914,8926,8937,8947,8951,8959,8963,8975,8987,8992,9008,9023,9038],{"__ignoreMap":160},[178,8886,8887,8889,8891,8893,8895,8897,8900,8902,8904,8906,8908],{"class":180,"line":181},[178,8888,7133],{"class":699},[178,8890,7136],{"class":184},[178,8892,944],{"class":319},[178,8894,1956],{"class":699},[178,8896,8287],{"class":699},[178,8898,8899],{"class":6985},"p1",[178,8901,2318],{"class":319},[178,8903,1956],{"class":699},[178,8905,8287],{"class":699},[178,8907,8802],{"class":6985},[178,8909,863],{"class":319},[178,8911,8912],{"class":180,"line":263},[178,8913,3352],{"class":319},[178,8915,8916,8918,8920,8923],{"class":180,"line":274},[178,8917,3769],{"class":699},[178,8919,6026],{"class":319},[178,8921,8922],{"class":699},"=*",[178,8924,8925],{"class":319},"p1;\n",[178,8927,8928,8930,8932,8934],{"class":180,"line":354},[178,8929,8172],{"class":699},[178,8931,8899],{"class":319},[178,8933,8922],{"class":699},[178,8935,8936],{"class":319},"p2;\n",[178,8938,8939,8941,8943,8945],{"class":180,"line":364},[178,8940,8172],{"class":699},[178,8942,8802],{"class":319},[178,8944,330],{"class":699},[178,8946,6051],{"class":319},[178,8948,8949],{"class":180,"line":740},[178,8950,3371],{"class":319},[178,8952,8953,8955,8957],{"class":180,"line":746},[178,8954,1956],{"class":699},[178,8956,838],{"class":184},[178,8958,3760],{"class":319},[178,8960,8961],{"class":180,"line":752},[178,8962,3352],{"class":319},[178,8964,8965,8967,8969,8971,8973],{"class":180,"line":757},[178,8966,3769],{"class":699},[178,8968,3205],{"class":319},[178,8970,330],{"class":699},[178,8972,2386],{"class":195},[178,8974,3100],{"class":319},[178,8976,8977,8979,8981,8983,8985],{"class":180,"line":763},[178,8978,3769],{"class":699},[178,8980,4609],{"class":319},[178,8982,330],{"class":699},[178,8984,2640],{"class":195},[178,8986,3100],{"class":319},[178,8988,8989],{"class":180,"line":769},[178,8990,8991],{"class":2008},"    \u002F\u002F地址传递\n",[178,8993,8994,8996,8998,9000,9003,9005],{"class":180,"line":774},[178,8995,7330],{"class":184},[178,8997,944],{"class":319},[178,8999,2293],{"class":699},[178,9001,9002],{"class":319},"a,",[178,9004,2293],{"class":699},[178,9006,9007],{"class":319},"b);\n",[178,9009,9010,9012,9014,9016,9018,9020],{"class":180,"line":780},[178,9011,3357],{"class":319},[178,9013,2983],{"class":699},[178,9015,2178],{"class":319},[178,9017,2983],{"class":699},[178,9019,3048],{"class":319},[178,9021,9022],{"class":2008},"\u002F\u002F20\n",[178,9024,9025,9027,9029,9031,9033,9035],{"class":180,"line":786},[178,9026,3357],{"class":319},[178,9028,2983],{"class":699},[178,9030,2203],{"class":319},[178,9032,2983],{"class":699},[178,9034,3048],{"class":319},[178,9036,9037],{"class":2008},"\u002F\u002F10\n",[178,9039,9040],{"class":180,"line":792},[178,9041,3371],{"class":319},[19,9043,9044],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,9046,9048],{"id":9047},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,9050,9051],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,9053,9054,9055,9057],{},"例如数组：int arr",[178,9056,2386],{},"={4,3,6,9,1,2,10,8,7,5}",[154,9059,9061],{"className":1942,"code":9060,"language":1944,"meta":160,"style":160},"#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",[70,9062,9063,9069,9079,9103,9107,9138,9142,9176,9180,9198,9202,9213,9228,9243,9247,9251,9255,9259,9263,9271,9275,9280,9334,9346,9358,9363,9371,9375,9380,9405,9409,9424,9433,9437],{"__ignoreMap":160},[178,9064,9065,9067],{"class":180,"line":181},[178,9066,3735],{"class":699},[178,9068,3738],{"class":188},[178,9070,9071,9073,9075,9077],{"class":180,"line":263},[178,9072,3743],{"class":699},[178,9074,3746],{"class":699},[178,9076,3749],{"class":184},[178,9078,3100],{"class":319},[178,9080,9081,9083,9086,9088,9090,9092,9094,9096,9098,9101],{"class":180,"line":274},[178,9082,7133],{"class":699},[178,9084,9085],{"class":184}," bubbleSort",[178,9087,944],{"class":319},[178,9089,1956],{"class":699},[178,9091,8287],{"class":699},[178,9093,19],{"class":6985},[178,9095,2318],{"class":319},[178,9097,1956],{"class":699},[178,9099,9100],{"class":6985}," len",[178,9102,863],{"class":319},[178,9104,9105],{"class":180,"line":354},[178,9106,3352],{"class":319},[178,9108,9109,9111,9113,9115,9117,9119,9121,9123,9125,9128,9130,9132,9134,9136],{"class":180,"line":364},[178,9110,988],{"class":699},[178,9112,944],{"class":319},[178,9114,1956],{"class":699},[178,9116,4807],{"class":319},[178,9118,330],{"class":699},[178,9120,2133],{"class":195},[178,9122,4814],{"class":319},[178,9124,320],{"class":699},[178,9126,9127],{"class":319},"len",[178,9129,2472],{"class":699},[178,9131,1665],{"class":195},[178,9133,4814],{"class":319},[178,9135,4076],{"class":699},[178,9137,863],{"class":319},[178,9139,9140],{"class":180,"line":740},[178,9141,3814],{"class":319},[178,9143,9144,9146,9148,9150,9152,9154,9156,9158,9160,9162,9164,9166,9168,9170,9172,9174],{"class":180,"line":746},[178,9145,5176],{"class":699},[178,9147,944],{"class":319},[178,9149,1956],{"class":699},[178,9151,5183],{"class":319},[178,9153,330],{"class":699},[178,9155,2133],{"class":195},[178,9157,5190],{"class":319},[178,9159,320],{"class":699},[178,9161,9127],{"class":319},[178,9163,2472],{"class":699},[178,9165,2381],{"class":319},[178,9167,2472],{"class":699},[178,9169,1665],{"class":195},[178,9171,5190],{"class":319},[178,9173,4076],{"class":699},[178,9175,863],{"class":319},[178,9177,9178],{"class":180,"line":752},[178,9179,4293],{"class":319},[178,9181,9182,9184,9187,9189,9192,9194,9196],{"class":180,"line":757},[178,9183,6413],{"class":699},[178,9185,9186],{"class":319},"(p[j]",[178,9188,2899],{"class":699},[178,9190,9191],{"class":319},"p[j",[178,9193,2421],{"class":699},[178,9195,1665],{"class":195},[178,9197,6428],{"class":319},[178,9199,9200],{"class":180,"line":763},[178,9201,6433],{"class":319},[178,9203,9204,9206,9208,9210],{"class":180,"line":769},[178,9205,6438],{"class":699},[178,9207,6026],{"class":319},[178,9209,330],{"class":699},[178,9211,9212],{"class":319},"p[j];\n",[178,9214,9215,9218,9220,9222,9224,9226],{"class":180,"line":774},[178,9216,9217],{"class":319},"                p[j]",[178,9219,330],{"class":699},[178,9221,9191],{"class":319},[178,9223,2421],{"class":699},[178,9225,1665],{"class":195},[178,9227,6461],{"class":319},[178,9229,9230,9233,9235,9237,9239,9241],{"class":180,"line":780},[178,9231,9232],{"class":319},"                p[j",[178,9234,2421],{"class":699},[178,9236,1665],{"class":195},[178,9238,2879],{"class":319},[178,9240,330],{"class":699},[178,9242,6051],{"class":319},[178,9244,9245],{"class":180,"line":786},[178,9246,6481],{"class":319},[178,9248,9249],{"class":180,"line":792},[178,9250,4312],{"class":319},[178,9252,9253],{"class":180,"line":798},[178,9254,3971],{"class":319},[178,9256,9257],{"class":180,"line":804},[178,9258,3371],{"class":319},[178,9260,9261],{"class":180,"line":810},[178,9262,722],{"emptyLinePlaceholder":721},[178,9264,9265,9267,9269],{"class":180,"line":816},[178,9266,1956],{"class":699},[178,9268,838],{"class":184},[178,9270,3760],{"class":319},[178,9272,9273],{"class":180,"line":822},[178,9274,3352],{"class":319},[178,9276,9277],{"class":180,"line":827},[178,9278,9279],{"class":2008},"    \u002F\u002F 1.创建数组\n",[178,9281,9282,9284,9286,9288,9290,9292,9294,9296,9298,9300,9302,9304,9306,9308,9310,9312,9314,9316,9318,9320,9322,9324,9326,9328,9330,9332],{"class":180,"line":832},[178,9283,3769],{"class":699},[178,9285,5734],{"class":319},[178,9287,2386],{"class":195},[178,9289,2879],{"class":319},[178,9291,330],{"class":699},[178,9293,2836],{"class":319},[178,9295,2233],{"class":195},[178,9297,2318],{"class":319},[178,9299,2021],{"class":195},[178,9301,2318],{"class":319},[178,9303,2284],{"class":195},[178,9305,2318],{"class":319},[178,9307,2360],{"class":195},[178,9309,2318],{"class":319},[178,9311,1665],{"class":195},[178,9313,2318],{"class":319},[178,9315,1669],{"class":195},[178,9317,2318],{"class":319},[178,9319,2386],{"class":195},[178,9321,2318],{"class":319},[178,9323,2335],{"class":195},[178,9325,2318],{"class":319},[178,9327,2309],{"class":195},[178,9329,2318],{"class":319},[178,9331,2259],{"class":195},[178,9333,5767],{"class":319},[178,9335,9336,9338,9340,9342,9344],{"class":180,"line":850},[178,9337,3769],{"class":699},[178,9339,9100],{"class":319},[178,9341,330],{"class":699},[178,9343,2386],{"class":195},[178,9345,3100],{"class":319},[178,9347,9348,9350,9352,9354,9356],{"class":180,"line":866},[178,9349,3769],{"class":699},[178,9351,8287],{"class":699},[178,9353,19],{"class":319},[178,9355,330],{"class":699},[178,9357,8807],{"class":319},[178,9359,9360],{"class":180,"line":877},[178,9361,9362],{"class":2008},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[178,9364,9365,9368],{"class":180,"line":882},[178,9366,9367],{"class":184},"    bubbleSort",[178,9369,9370],{"class":319},"(p,len);\n",[178,9372,9373],{"class":180,"line":898},[178,9374,722],{"emptyLinePlaceholder":721},[178,9376,9377],{"class":180,"line":914},[178,9378,9379],{"class":2008},"    \u002F\u002F 3.打印排序后的数组\n",[178,9381,9382,9384,9386,9388,9390,9392,9394,9396,9398,9401,9403],{"class":180,"line":919},[178,9383,988],{"class":699},[178,9385,3457],{"class":319},[178,9387,1956],{"class":699},[178,9389,4807],{"class":319},[178,9391,330],{"class":699},[178,9393,2133],{"class":195},[178,9395,4987],{"class":319},[178,9397,320],{"class":699},[178,9399,9400],{"class":319},"len; i",[178,9402,4076],{"class":699},[178,9404,863],{"class":319},[178,9406,9407],{"class":180,"line":935},[178,9408,3814],{"class":319},[178,9410,9411,9413,9415,9417,9419,9422],{"class":180,"line":952},[178,9412,5224],{"class":319},[178,9414,8188],{"class":699},[178,9416,19],{"class":319},[178,9418,2983],{"class":699},[178,9420,9421],{"class":188},"\"\"",[178,9423,3100],{"class":319},[178,9425,9426,9429,9431],{"class":180,"line":966},[178,9427,9428],{"class":319},"        p",[178,9430,4076],{"class":699},[178,9432,3100],{"class":319},[178,9434,9435],{"class":180,"line":980},[178,9436,3971],{"class":319},[178,9438,9439],{"class":180,"line":985},[178,9440,3371],{"class":319},[1853,9442,9443],{},"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":160,"searchDepth":263,"depth":263,"links":9445},[9446,9447,9448,9449,9450,9451,9452,9453],{"id":8052,"depth":263,"text":8053},{"id":8218,"depth":263,"text":8219},{"id":8374,"depth":263,"text":8375},{"id":8452,"depth":263,"text":8453},{"id":8531,"depth":263,"text":8532},{"id":8630,"depth":263,"text":8631},{"id":8869,"depth":263,"text":8870},{"id":9047,"depth":263,"text":9048},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":8041,"description":8049},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9460,"title":9461,"body":9462,"description":9469,"extension":1880,"meta":12435,"navigation":721,"path":12436,"seo":12437,"stem":12438,"__hash__":12439},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9463,"toc":12426},[9464,9467,9470,9474,9477,9480,9491,9821,9824,9828,9831,9838,10093,10097,10100,10103,10258,10262,10265,10268,10474,10478,10481,10784,10787,10795,10799,10802,10953,10955,10966,11023,11027,11032,11689,11697,11700,11794,11797,12417,12423],[10,9465,9461],{"id":9466},"_4结构体",[19,9468,9469],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9471,9473],{"id":9472},"_41结构体定义与使用","4.1结构体定义与使用",[19,9475,9476],{},"语法：struct 结构体名 {结构体成员列表}；",[19,9478,9479],{},"通过结构体创建变量的方式：",[2946,9481,9482,9485,9488],{},[29,9483,9484],{},"struct 结构体名 变量名",[29,9486,9487],{},"struct 结构体名 变量名={成员1值，成员2值...}",[29,9489,9490],{},"定义结构体时顺便创建变量",[154,9492,9494],{"className":1942,"code":9493,"language":1944,"meta":160,"style":160},"#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",[70,9495,9496,9502,9512,9519,9524,9532,9536,9541,9545,9550,9555,9560,9567,9572,9579,9583,9590,9594,9598,9602,9606,9610,9614,9620,9624,9630,9638,9646,9650,9655,9660,9671,9676,9688,9699,9710,9715,9738,9742,9747,9773,9777,9782,9793,9804,9816],{"__ignoreMap":160},[178,9497,9498,9500],{"class":180,"line":181},[178,9499,3735],{"class":699},[178,9501,3738],{"class":188},[178,9503,9504,9506,9508,9510],{"class":180,"line":263},[178,9505,3743],{"class":699},[178,9507,3746],{"class":699},[178,9509,3749],{"class":184},[178,9511,3100],{"class":319},[178,9513,9514,9516],{"class":180,"line":274},[178,9515,3735],{"class":699},[178,9517,9518],{"class":188},"\u003Cstring>\n",[178,9520,9521],{"class":180,"line":354},[178,9522,9523],{"class":2008},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[178,9525,9526,9529],{"class":180,"line":364},[178,9527,9528],{"class":699},"struct",[178,9530,9531],{"class":184}," Student\n",[178,9533,9534],{"class":180,"line":740},[178,9535,3352],{"class":319},[178,9537,9538],{"class":180,"line":746},[178,9539,9540],{"class":2008},"    \u002F\u002F成员列表\n",[178,9542,9543],{"class":180,"line":752},[178,9544,722],{"emptyLinePlaceholder":721},[178,9546,9547],{"class":180,"line":757},[178,9548,9549],{"class":2008},"    \u002F\u002F姓名\n",[178,9551,9552],{"class":180,"line":763},[178,9553,9554],{"class":319},"    string name;\n",[178,9556,9557],{"class":180,"line":769},[178,9558,9559],{"class":2008},"    \u002F\u002F年龄\n",[178,9561,9562,9564],{"class":180,"line":774},[178,9563,3769],{"class":699},[178,9565,9566],{"class":319}," age;\n",[178,9568,9569],{"class":180,"line":780},[178,9570,9571],{"class":2008},"    \u002F\u002F分数\n",[178,9573,9574,9576],{"class":180,"line":786},[178,9575,3769],{"class":699},[178,9577,9578],{"class":319}," score;\n",[178,9580,9581],{"class":180,"line":792},[178,9582,5767],{"class":319},[178,9584,9585,9587],{"class":180,"line":798},[178,9586,9528],{"class":699},[178,9588,9589],{"class":184}," School\n",[178,9591,9592],{"class":180,"line":804},[178,9593,3352],{"class":319},[178,9595,9596],{"class":180,"line":810},[178,9597,9540],{"class":2008},[178,9599,9600],{"class":180,"line":816},[178,9601,722],{"emptyLinePlaceholder":721},[178,9603,9604],{"class":180,"line":822},[178,9605,9549],{"class":2008},[178,9607,9608],{"class":180,"line":827},[178,9609,9554],{"class":319},[178,9611,9612],{"class":180,"line":832},[178,9613,9559],{"class":2008},[178,9615,9616,9618],{"class":180,"line":850},[178,9617,3769],{"class":699},[178,9619,9566],{"class":319},[178,9621,9622],{"class":180,"line":866},[178,9623,9571],{"class":2008},[178,9625,9626,9628],{"class":180,"line":877},[178,9627,3769],{"class":699},[178,9629,9578],{"class":319},[178,9631,9632,9635],{"class":180,"line":882},[178,9633,9634],{"class":319},"} s3;",[178,9636,9637],{"class":2008}," \u002F\u002F创建结构体时就创建了变量\n",[178,9639,9640,9642,9644],{"class":180,"line":898},[178,9641,1956],{"class":699},[178,9643,838],{"class":184},[178,9645,3760],{"class":319},[178,9647,9648],{"class":180,"line":914},[178,9649,3352],{"class":319},[178,9651,9652],{"class":180,"line":919},[178,9653,9654],{"class":2008},"    \u002F\u002F2.通过学生类型创建具体学生\n",[178,9656,9657],{"class":180,"line":935},[178,9658,9659],{"class":2008},"    \u002F\u002F2.1 struct Student s1;\n",[178,9661,9662,9665,9668],{"class":180,"line":952},[178,9663,9664],{"class":699},"    struct",[178,9666,9667],{"class":184}," Student",[178,9669,9670],{"class":319}," s1;\n",[178,9672,9673],{"class":180,"line":966},[178,9674,9675],{"class":2008},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[178,9677,9678,9681,9683,9686],{"class":180,"line":980},[178,9679,9680],{"class":319},"    s1.name",[178,9682,330],{"class":699},[178,9684,9685],{"class":188},"\"张三\"",[178,9687,3100],{"class":319},[178,9689,9690,9693,9695,9697],{"class":180,"line":985},[178,9691,9692],{"class":319},"    s1.age",[178,9694,330],{"class":699},[178,9696,2590],{"class":195},[178,9698,3100],{"class":319},[178,9700,9701,9704,9706,9708],{"class":180,"line":1008},[178,9702,9703],{"class":319},"    s1.score",[178,9705,330],{"class":699},[178,9707,2194],{"class":195},[178,9709,3100],{"class":319},[178,9711,9712],{"class":180,"line":1014},[178,9713,9714],{"class":2008},"    \u002F\u002F输出结果\n",[178,9716,9717,9719,9721,9724,9726,9729,9731,9734,9736],{"class":180,"line":1019},[178,9718,3357],{"class":319},[178,9720,2983],{"class":699},[178,9722,9723],{"class":319},"s1.name",[178,9725,2983],{"class":699},[178,9727,9728],{"class":319},"s1.age",[178,9730,2983],{"class":699},[178,9732,9733],{"class":319},"s1.score",[178,9735,2983],{"class":699},[178,9737,3005],{"class":319},[178,9739,9740],{"class":180,"line":1033},[178,9741,722],{"emptyLinePlaceholder":721},[178,9743,9744],{"class":180,"line":1046},[178,9745,9746],{"class":2008},"    \u002F\u002F2.2 struct Student s2={...}\n",[178,9748,9749,9751,9753,9756,9758,9760,9763,9765,9767,9769,9771],{"class":180,"line":1059},[178,9750,9664],{"class":699},[178,9752,9667],{"class":184},[178,9754,9755],{"class":319}," s2",[178,9757,330],{"class":699},[178,9759,2836],{"class":319},[178,9761,9762],{"class":188},"\"王五\"",[178,9764,2318],{"class":319},[178,9766,2590],{"class":195},[178,9768,2318],{"class":319},[178,9770,2194],{"class":195},[178,9772,5767],{"class":319},[178,9774,9775],{"class":180,"line":1072},[178,9776,722],{"emptyLinePlaceholder":721},[178,9778,9779],{"class":180,"line":1077},[178,9780,9781],{"class":2008},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[178,9783,9784,9787,9789,9791],{"class":180,"line":1082},[178,9785,9786],{"class":319},"    s3.name",[178,9788,330],{"class":699},[178,9790,5451],{"class":188},[178,9792,3100],{"class":319},[178,9794,9795,9798,9800,9802],{"class":180,"line":1099},[178,9796,9797],{"class":319},"    s3.age",[178,9799,330],{"class":699},[178,9801,2590],{"class":195},[178,9803,3100],{"class":319},[178,9805,9807,9810,9812,9814],{"class":180,"line":9806},45,[178,9808,9809],{"class":319},"    s3.score",[178,9811,330],{"class":699},[178,9813,2640],{"class":195},[178,9815,3100],{"class":319},[178,9817,9819],{"class":180,"line":9818},46,[178,9820,3371],{"class":319},[19,9822,9823],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,9825,9827],{"id":9826},"_42结构体数组","4.2结构体数组",[19,9829,9830],{},"将自定义的结构体放入到数组中方便维护",[19,9832,9833,9834,9837],{},"语法：struct 结构体名 数组名",[178,9835,9836],{},"元素个数","={ {}，{},...{} };",[154,9839,9841],{"className":1942,"code":9840,"language":1944,"meta":160,"style":160},"#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",[70,9842,9843,9849,9859,9865,9870,9876,9880,9884,9890,9896,9900,9904,9912,9916,9921,9936,9940,9956,9972,9976,9981,9997,10012,10027,10032,10058,10062,10085,10089],{"__ignoreMap":160},[178,9844,9845,9847],{"class":180,"line":181},[178,9846,3735],{"class":699},[178,9848,3738],{"class":188},[178,9850,9851,9853,9855,9857],{"class":180,"line":263},[178,9852,3743],{"class":699},[178,9854,3746],{"class":699},[178,9856,3749],{"class":184},[178,9858,3100],{"class":319},[178,9860,9861,9863],{"class":180,"line":274},[178,9862,3735],{"class":699},[178,9864,9518],{"class":188},[178,9866,9867],{"class":180,"line":354},[178,9868,9869],{"class":2008},"\u002F\u002F1.定义结构体\n",[178,9871,9872,9874],{"class":180,"line":364},[178,9873,9528],{"class":699},[178,9875,9531],{"class":184},[178,9877,9878],{"class":180,"line":740},[178,9879,3352],{"class":319},[178,9881,9882],{"class":180,"line":746},[178,9883,9554],{"class":319},[178,9885,9886,9888],{"class":180,"line":752},[178,9887,3769],{"class":699},[178,9889,9566],{"class":319},[178,9891,9892,9894],{"class":180,"line":757},[178,9893,3769],{"class":699},[178,9895,9578],{"class":319},[178,9897,9898],{"class":180,"line":763},[178,9899,722],{"emptyLinePlaceholder":721},[178,9901,9902],{"class":180,"line":769},[178,9903,5767],{"class":319},[178,9905,9906,9908,9910],{"class":180,"line":774},[178,9907,1956],{"class":699},[178,9909,838],{"class":184},[178,9911,3760],{"class":319},[178,9913,9914],{"class":180,"line":780},[178,9915,3352],{"class":319},[178,9917,9918],{"class":180,"line":786},[178,9919,9920],{"class":2008},"    \u002F\u002F2.创建结构体数组\n",[178,9922,9923,9925,9927,9930,9932,9934],{"class":180,"line":792},[178,9924,9664],{"class":699},[178,9926,9667],{"class":184},[178,9928,9929],{"class":319}," stuArray[",[178,9931,1669],{"class":195},[178,9933,2879],{"class":319},[178,9935,6679],{"class":699},[178,9937,9938],{"class":180,"line":798},[178,9939,3814],{"class":319},[178,9941,9942,9944,9946,9948,9950,9952,9954],{"class":180,"line":804},[178,9943,6688],{"class":319},[178,9945,9685],{"class":188},[178,9947,2318],{"class":319},[178,9949,2590],{"class":195},[178,9951,2318],{"class":319},[178,9953,2251],{"class":195},[178,9955,6701],{"class":319},[178,9957,9958,9960,9962,9964,9966,9968,9970],{"class":180,"line":810},[178,9959,6688],{"class":319},[178,9961,5451],{"class":188},[178,9963,2318],{"class":319},[178,9965,2515],{"class":195},[178,9967,2318],{"class":319},[178,9969,2515],{"class":195},[178,9971,3371],{"class":319},[178,9973,9974],{"class":180,"line":816},[178,9975,3971],{"class":319},[178,9977,9978],{"class":180,"line":822},[178,9979,9980],{"class":2008},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[178,9982,9983,9986,9988,9991,9993,9995],{"class":180,"line":827},[178,9984,9985],{"class":319},"    stuArray[",[178,9987,1665],{"class":195},[178,9989,9990],{"class":319},"].name",[178,9992,330],{"class":699},[178,9994,5474],{"class":188},[178,9996,3100],{"class":319},[178,9998,9999,10001,10003,10006,10008,10010],{"class":180,"line":832},[178,10000,9985],{"class":319},[178,10002,1665],{"class":195},[178,10004,10005],{"class":319},"].age",[178,10007,330],{"class":699},[178,10009,1669],{"class":195},[178,10011,3100],{"class":319},[178,10013,10014,10016,10018,10021,10023,10025],{"class":180,"line":850},[178,10015,9985],{"class":319},[178,10017,1665],{"class":195},[178,10019,10020],{"class":319},"].score",[178,10022,330],{"class":699},[178,10024,1669],{"class":195},[178,10026,3100],{"class":319},[178,10028,10029],{"class":180,"line":866},[178,10030,10031],{"class":2008},"    \u002F\u002F4.遍历结构体数组\n",[178,10033,10034,10036,10038,10040,10042,10044,10046,10048,10050,10052,10054,10056],{"class":180,"line":877},[178,10035,988],{"class":699},[178,10037,3457],{"class":319},[178,10039,1956],{"class":699},[178,10041,4807],{"class":319},[178,10043,330],{"class":699},[178,10045,2133],{"class":195},[178,10047,4814],{"class":319},[178,10049,320],{"class":699},[178,10051,1669],{"class":195},[178,10053,4814],{"class":319},[178,10055,4076],{"class":699},[178,10057,863],{"class":319},[178,10059,10060],{"class":180,"line":882},[178,10061,3814],{"class":319},[178,10063,10064,10066,10068,10071,10073,10076,10078,10081,10083],{"class":180,"line":898},[178,10065,5224],{"class":319},[178,10067,2983],{"class":699},[178,10069,10070],{"class":319},"stuArray[i].name",[178,10072,2983],{"class":699},[178,10074,10075],{"class":319},"stuArray[i].age",[178,10077,2983],{"class":699},[178,10079,10080],{"class":319},"stuArray[i].score",[178,10082,2983],{"class":699},[178,10084,3005],{"class":319},[178,10086,10087],{"class":180,"line":914},[178,10088,3971],{"class":319},[178,10090,10091],{"class":180,"line":919},[178,10092,3371],{"class":319},[14,10094,10096],{"id":10095},"_43结构体指针","4.3结构体指针",[19,10098,10099],{},"作用：通过指针访问结构体中的成员",[19,10101,10102],{},"利用操作符->可以通过结构体指针访问结构体属性",[154,10104,10106],{"className":1942,"code":10105,"language":1944,"meta":160,"style":160},"#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",[70,10107,10108,10114,10124,10130,10134,10140,10144,10148,10154,10160,10164,10172,10176,10181,10206,10211,10226,10231,10254],{"__ignoreMap":160},[178,10109,10110,10112],{"class":180,"line":181},[178,10111,3735],{"class":699},[178,10113,3738],{"class":188},[178,10115,10116,10118,10120,10122],{"class":180,"line":263},[178,10117,3743],{"class":699},[178,10119,3746],{"class":699},[178,10121,3749],{"class":184},[178,10123,3100],{"class":319},[178,10125,10126,10128],{"class":180,"line":274},[178,10127,3735],{"class":699},[178,10129,9518],{"class":188},[178,10131,10132],{"class":180,"line":354},[178,10133,9869],{"class":2008},[178,10135,10136,10138],{"class":180,"line":364},[178,10137,9528],{"class":699},[178,10139,9531],{"class":184},[178,10141,10142],{"class":180,"line":740},[178,10143,3352],{"class":319},[178,10145,10146],{"class":180,"line":746},[178,10147,9554],{"class":319},[178,10149,10150,10152],{"class":180,"line":752},[178,10151,3769],{"class":699},[178,10153,9566],{"class":319},[178,10155,10156,10158],{"class":180,"line":757},[178,10157,3769],{"class":699},[178,10159,9578],{"class":319},[178,10161,10162],{"class":180,"line":763},[178,10163,5767],{"class":319},[178,10165,10166,10168,10170],{"class":180,"line":769},[178,10167,1956],{"class":699},[178,10169,838],{"class":184},[178,10171,3760],{"class":319},[178,10173,10174],{"class":180,"line":774},[178,10175,3352],{"class":319},[178,10177,10178],{"class":180,"line":780},[178,10179,10180],{"class":2008},"    \u002F\u002F创建学生结构体变量\n",[178,10182,10183,10185,10187,10190,10192,10194,10196,10198,10200,10202,10204],{"class":180,"line":786},[178,10184,9664],{"class":699},[178,10186,9667],{"class":184},[178,10188,10189],{"class":319}," s",[178,10191,330],{"class":699},[178,10193,2836],{"class":319},[178,10195,9685],{"class":188},[178,10197,2318],{"class":319},[178,10199,2590],{"class":195},[178,10201,2318],{"class":319},[178,10203,1002],{"class":195},[178,10205,5767],{"class":319},[178,10207,10208],{"class":180,"line":792},[178,10209,10210],{"class":2008},"    \u002F\u002F通过指针指向结构体变量\n",[178,10212,10213,10215,10217,10219,10221,10223],{"class":180,"line":798},[178,10214,9664],{"class":699},[178,10216,9667],{"class":184},[178,10218,8287],{"class":699},[178,10220,19],{"class":319},[178,10222,8108],{"class":699},[178,10224,10225],{"class":319},"s\n",[178,10227,10228],{"class":180,"line":804},[178,10229,10230],{"class":2008},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[178,10232,10233,10235,10237,10240,10242,10245,10247,10250,10252],{"class":180,"line":810},[178,10234,3357],{"class":319},[178,10236,2983],{"class":699},[178,10238,10239],{"class":319},"p->name",[178,10241,2983],{"class":699},[178,10243,10244],{"class":319},"p->age",[178,10246,2983],{"class":699},[178,10248,10249],{"class":319},"p->score",[178,10251,2983],{"class":699},[178,10253,3005],{"class":319},[178,10255,10256],{"class":180,"line":816},[178,10257,3371],{"class":319},[14,10259,10261],{"id":10260},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,10263,10264],{},"作用：结构体中的成员可以是另一个结构体",[19,10266,10267],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[154,10269,10271],{"className":1942,"code":10270,"language":1944,"meta":160,"style":160},"#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",[70,10272,10273,10279,10289,10295,10300,10308,10312,10316,10322,10328,10332,10337,10344,10348,10355,10359,10365,10370,10374,10382,10386,10391,10396,10401,10412,10424,10435,10448,10459,10470],{"__ignoreMap":160},[178,10274,10275,10277],{"class":180,"line":181},[178,10276,3735],{"class":699},[178,10278,3738],{"class":188},[178,10280,10281,10283,10285,10287],{"class":180,"line":263},[178,10282,3743],{"class":699},[178,10284,3746],{"class":699},[178,10286,3749],{"class":184},[178,10288,3100],{"class":319},[178,10290,10291,10293],{"class":180,"line":274},[178,10292,3735],{"class":699},[178,10294,9518],{"class":188},[178,10296,10297],{"class":180,"line":354},[178,10298,10299],{"class":2008},"\u002F\u002F定义学生结构体\n",[178,10301,10302,10304,10306],{"class":180,"line":364},[178,10303,9528],{"class":699},[178,10305,9667],{"class":184},[178,10307,4450],{"class":319},[178,10309,10310],{"class":180,"line":740},[178,10311,3352],{"class":319},[178,10313,10314],{"class":180,"line":746},[178,10315,9554],{"class":319},[178,10317,10318,10320],{"class":180,"line":752},[178,10319,3769],{"class":699},[178,10321,9566],{"class":319},[178,10323,10324,10326],{"class":180,"line":757},[178,10325,3769],{"class":699},[178,10327,9578],{"class":319},[178,10329,10330],{"class":180,"line":763},[178,10331,3371],{"class":319},[178,10333,10334],{"class":180,"line":769},[178,10335,10336],{"class":2008},"\u002F\u002F定义老师结构体\n",[178,10338,10339,10341],{"class":180,"line":774},[178,10340,9528],{"class":699},[178,10342,10343],{"class":184}," Teacher\n",[178,10345,10346],{"class":180,"line":780},[178,10347,3352],{"class":319},[178,10349,10350,10352],{"class":180,"line":786},[178,10351,3769],{"class":699},[178,10353,10354],{"class":319}," id;\n",[178,10356,10357],{"class":180,"line":792},[178,10358,9554],{"class":319},[178,10360,10361,10363],{"class":180,"line":798},[178,10362,3769],{"class":699},[178,10364,9566],{"class":319},[178,10366,10367],{"class":180,"line":804},[178,10368,10369],{"class":319},"    Student stu;\n",[178,10371,10372],{"class":180,"line":810},[178,10373,3371],{"class":319},[178,10375,10376,10378,10380],{"class":180,"line":816},[178,10377,1956],{"class":699},[178,10379,838],{"class":184},[178,10381,7747],{"class":319},[178,10383,10384],{"class":180,"line":822},[178,10385,3352],{"class":319},[178,10387,10388],{"class":180,"line":827},[178,10389,10390],{"class":2008},"    \u002F\u002F结构体嵌套结构体\n",[178,10392,10393],{"class":180,"line":832},[178,10394,10395],{"class":2008},"    \u002F\u002F创建老师\n",[178,10397,10398],{"class":180,"line":850},[178,10399,10400],{"class":319},"    Teacher t;\n",[178,10402,10403,10406,10408,10410],{"class":180,"line":866},[178,10404,10405],{"class":319},"    t.id",[178,10407,330],{"class":699},[178,10409,2251],{"class":195},[178,10411,3100],{"class":319},[178,10413,10414,10417,10419,10422],{"class":180,"line":877},[178,10415,10416],{"class":319},"    t.name",[178,10418,330],{"class":699},[178,10420,10421],{"class":188},"\"老王\"",[178,10423,3100],{"class":319},[178,10425,10426,10429,10431,10433],{"class":180,"line":882},[178,10427,10428],{"class":319},"    t.age",[178,10430,330],{"class":699},[178,10432,2590],{"class":195},[178,10434,3100],{"class":319},[178,10436,10437,10440,10442,10445],{"class":180,"line":898},[178,10438,10439],{"class":319},"    t.stu.name",[178,10441,330],{"class":699},[178,10443,10444],{"class":188},"\"小王\"",[178,10446,10447],{"class":319},"；\n",[178,10449,10450,10453,10455,10457],{"class":180,"line":914},[178,10451,10452],{"class":319},"    t.stu.age",[178,10454,330],{"class":699},[178,10456,2640],{"class":195},[178,10458,3100],{"class":319},[178,10460,10461,10464,10466,10468],{"class":180,"line":919},[178,10462,10463],{"class":319},"    t.stu.score",[178,10465,330],{"class":699},[178,10467,2284],{"class":195},[178,10469,3100],{"class":319},[178,10471,10472],{"class":180,"line":935},[178,10473,3371],{"class":319},[14,10475,10477],{"id":10476},"_45结构体做函数参数","4.5结构体做函数参数",[19,10479,10480],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[154,10482,10484],{"className":1942,"code":10483,"language":1944,"meta":160,"style":160},"#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",[70,10485,10486,10492,10502,10508,10514,10518,10522,10528,10534,10538,10543,10548,10565,10569,10602,10606,10611,10630,10634,10665,10669,10677,10681,10690,10702,10714,10726,10739,10747,10760,10772,10780],{"__ignoreMap":160},[178,10487,10488,10490],{"class":180,"line":181},[178,10489,3735],{"class":699},[178,10491,3738],{"class":188},[178,10493,10494,10496,10498,10500],{"class":180,"line":263},[178,10495,3743],{"class":699},[178,10497,3746],{"class":699},[178,10499,3749],{"class":184},[178,10501,3100],{"class":319},[178,10503,10504,10506],{"class":180,"line":274},[178,10505,3735],{"class":699},[178,10507,9518],{"class":188},[178,10509,10510,10512],{"class":180,"line":354},[178,10511,9528],{"class":699},[178,10513,9531],{"class":184},[178,10515,10516],{"class":180,"line":364},[178,10517,3352],{"class":319},[178,10519,10520],{"class":180,"line":740},[178,10521,9554],{"class":319},[178,10523,10524,10526],{"class":180,"line":746},[178,10525,3769],{"class":699},[178,10527,9566],{"class":319},[178,10529,10530,10532],{"class":180,"line":752},[178,10531,3769],{"class":699},[178,10533,9578],{"class":319},[178,10535,10536],{"class":180,"line":757},[178,10537,5767],{"class":319},[178,10539,10540],{"class":180,"line":763},[178,10541,10542],{"class":2008},"\u002F\u002F打印学生信息的函数\n",[178,10544,10545],{"class":180,"line":769},[178,10546,10547],{"class":2008},"\u002F\u002F值传递\n",[178,10549,10550,10552,10555,10557,10559,10561,10563],{"class":180,"line":774},[178,10551,7133],{"class":699},[178,10553,10554],{"class":184}," printStudent1",[178,10556,944],{"class":319},[178,10558,9528],{"class":699},[178,10560,9667],{"class":184},[178,10562,10189],{"class":6985},[178,10564,863],{"class":319},[178,10566,10567],{"class":180,"line":780},[178,10568,3352],{"class":319},[178,10570,10571,10573,10575,10578,10580,10583,10585,10588,10590,10592,10594,10597,10599],{"class":180,"line":786},[178,10572,8298],{"class":319},[178,10574,2983],{"class":699},[178,10576,10577],{"class":319}," s.name ",[178,10579,2983],{"class":699},[178,10581,10582],{"class":188}," \" \"",[178,10584,3251],{"class":699},[178,10586,10587],{"class":319}," s.age ",[178,10589,2983],{"class":699},[178,10591,10582],{"class":188},[178,10593,3251],{"class":699},[178,10595,10596],{"class":319}," s.score ",[178,10598,2983],{"class":699},[178,10600,10601],{"class":319}," endl;\n",[178,10603,10604],{"class":180,"line":792},[178,10605,3371],{"class":319},[178,10607,10608],{"class":180,"line":798},[178,10609,10610],{"class":2008},"\u002F\u002F地址传递\n",[178,10612,10613,10615,10618,10620,10622,10624,10626,10628],{"class":180,"line":804},[178,10614,7133],{"class":699},[178,10616,10617],{"class":184}," printStudent2",[178,10619,944],{"class":319},[178,10621,9528],{"class":699},[178,10623,9667],{"class":184},[178,10625,8287],{"class":699},[178,10627,2635],{"class":6985},[178,10629,863],{"class":319},[178,10631,10632],{"class":180,"line":810},[178,10633,3352],{"class":319},[178,10635,10636,10638,10640,10643,10645,10647,10649,10652,10654,10656,10658,10661,10663],{"class":180,"line":816},[178,10637,8298],{"class":319},[178,10639,2983],{"class":699},[178,10641,10642],{"class":319}," s->name ",[178,10644,2983],{"class":699},[178,10646,10582],{"class":188},[178,10648,3251],{"class":699},[178,10650,10651],{"class":319}," s->age ",[178,10653,2983],{"class":699},[178,10655,10582],{"class":188},[178,10657,3251],{"class":699},[178,10659,10660],{"class":319}," s->score ",[178,10662,2983],{"class":699},[178,10664,10601],{"class":319},[178,10666,10667],{"class":180,"line":822},[178,10668,3371],{"class":319},[178,10670,10671,10673,10675],{"class":180,"line":827},[178,10672,1956],{"class":699},[178,10674,838],{"class":184},[178,10676,3760],{"class":319},[178,10678,10679],{"class":180,"line":832},[178,10680,3352],{"class":319},[178,10682,10683,10685,10687],{"class":180,"line":850},[178,10684,9664],{"class":699},[178,10686,9667],{"class":184},[178,10688,10689],{"class":319}," s;\n",[178,10691,10692,10695,10697,10700],{"class":180,"line":866},[178,10693,10694],{"class":319},"    s.name ",[178,10696,330],{"class":699},[178,10698,10699],{"class":188}," \"张三\"",[178,10701,3100],{"class":319},[178,10703,10704,10707,10709,10712],{"class":180,"line":877},[178,10705,10706],{"class":319},"    s.age ",[178,10708,330],{"class":699},[178,10710,10711],{"class":195}," 20",[178,10713,3100],{"class":319},[178,10715,10716,10719,10721,10724],{"class":180,"line":882},[178,10717,10718],{"class":319},"    s.score ",[178,10720,330],{"class":699},[178,10722,10723],{"class":195}," 85",[178,10725,3100],{"class":319},[178,10727,10728,10730,10732,10735,10737],{"class":180,"line":898},[178,10729,3357],{"class":319},[178,10731,2983],{"class":699},[178,10733,10734],{"class":188},"\"值传递:\"",[178,10736,2983],{"class":699},[178,10738,3005],{"class":319},[178,10740,10741,10744],{"class":180,"line":914},[178,10742,10743],{"class":184},"    printStudent1",[178,10745,10746],{"class":319},"(s);\n",[178,10748,10749,10751,10753,10756,10758],{"class":180,"line":919},[178,10750,3357],{"class":319},[178,10752,2983],{"class":699},[178,10754,10755],{"class":188},"\"地址传递:\"",[178,10757,2983],{"class":699},[178,10759,3005],{"class":319},[178,10761,10762,10765,10767,10769],{"class":180,"line":935},[178,10763,10764],{"class":184},"    printStudent2",[178,10766,944],{"class":319},[178,10768,2293],{"class":699},[178,10770,10771],{"class":319},"s); \n",[178,10773,10774,10776,10778],{"class":180,"line":952},[178,10775,5862],{"class":699},[178,10777,930],{"class":195},[178,10779,3100],{"class":319},[178,10781,10782],{"class":180,"line":966},[178,10783,3371],{"class":319},[19,10785,10786],{},"注意：",[2946,10788,10789,10792],{},[29,10790,10791],{},"1.先定义结构体，不要在函数中写结构体的定义",[29,10793,10794],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,10796,10798],{"id":10797},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,10800,10801],{},"用const防止误操作",[154,10803,10805],{"className":1942,"code":10804,"language":1944,"meta":160,"style":160},"#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",[70,10806,10807,10813,10823,10829,10834,10838,10842,10848,10854,10858,10874,10878,10901,10905,10913,10917,10938,10945,10949],{"__ignoreMap":160},[178,10808,10809,10811],{"class":180,"line":181},[178,10810,3735],{"class":699},[178,10812,3738],{"class":188},[178,10814,10815,10817,10819,10821],{"class":180,"line":263},[178,10816,3743],{"class":699},[178,10818,3746],{"class":699},[178,10820,3749],{"class":184},[178,10822,3100],{"class":319},[178,10824,10825,10827],{"class":180,"line":274},[178,10826,3735],{"class":699},[178,10828,9518],{"class":188},[178,10830,10831],{"class":180,"line":354},[178,10832,10833],{"class":319},"sctuct Student\n",[178,10835,10836],{"class":180,"line":364},[178,10837,3352],{"class":319},[178,10839,10840],{"class":180,"line":740},[178,10841,9554],{"class":319},[178,10843,10844,10846],{"class":180,"line":746},[178,10845,3769],{"class":699},[178,10847,9566],{"class":319},[178,10849,10850,10852],{"class":180,"line":752},[178,10851,3769],{"class":699},[178,10853,9578],{"class":319},[178,10855,10856],{"class":180,"line":757},[178,10857,5767],{"class":319},[178,10859,10860,10862,10865,10867,10870,10872],{"class":180,"line":763},[178,10861,7133],{"class":699},[178,10863,10864],{"class":184}," printStudents",[178,10866,944],{"class":319},[178,10868,10869],{"class":184},"student",[178,10871,10189],{"class":6985},[178,10873,863],{"class":319},[178,10875,10876],{"class":180,"line":769},[178,10877,3352],{"class":319},[178,10879,10880,10882,10884,10887,10889,10892,10894,10897,10899],{"class":180,"line":774},[178,10881,3357],{"class":319},[178,10883,2983],{"class":699},[178,10885,10886],{"class":319},"s.name",[178,10888,2983],{"class":699},[178,10890,10891],{"class":319},"s.age",[178,10893,2983],{"class":699},[178,10895,10896],{"class":319},"s.score",[178,10898,2983],{"class":699},[178,10900,3005],{"class":319},[178,10902,10903],{"class":180,"line":780},[178,10904,3371],{"class":319},[178,10906,10907,10909,10911],{"class":180,"line":786},[178,10908,1956],{"class":699},[178,10910,838],{"class":184},[178,10912,7747],{"class":319},[178,10914,10915],{"class":180,"line":792},[178,10916,3352],{"class":319},[178,10918,10919,10922,10924,10926,10928,10930,10932,10934,10936],{"class":180,"line":798},[178,10920,10921],{"class":319},"    Student s",[178,10923,330],{"class":699},[178,10925,2836],{"class":319},[178,10927,9685],{"class":188},[178,10929,2318],{"class":319},[178,10931,2590],{"class":195},[178,10933,2318],{"class":319},[178,10935,2590],{"class":195},[178,10937,5767],{"class":319},[178,10939,10940,10943],{"class":180,"line":804},[178,10941,10942],{"class":184},"    printStudent",[178,10944,10746],{"class":319},[178,10946,10947],{"class":180,"line":810},[178,10948,722],{"emptyLinePlaceholder":721},[178,10950,10951],{"class":180,"line":816},[178,10952,3371],{"class":319},[19,10954,10786],{},[2946,10956,10957,10960,10963],{},[29,10958,10959],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[29,10961,10962],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[29,10964,10965],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[154,10967,10969],{"className":1942,"code":10968,"language":1944,"meta":160,"style":160},"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",[70,10970,10971,10990,10994,10999,11019],{"__ignoreMap":160},[178,10972,10973,10975,10977,10979,10981,10984,10986,10988],{"class":180,"line":181},[178,10974,7133],{"class":699},[178,10976,10864],{"class":184},[178,10978,944],{"class":319},[178,10980,8561],{"class":699},[178,10982,10983],{"class":184}," student",[178,10985,8287],{"class":699},[178,10987,2635],{"class":6985},[178,10989,863],{"class":319},[178,10991,10992],{"class":180,"line":263},[178,10993,3352],{"class":319},[178,10995,10996],{"class":180,"line":274},[178,10997,10998],{"class":2008},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[178,11000,11001,11003,11005,11007,11009,11011,11013,11015,11017],{"class":180,"line":354},[178,11002,3357],{"class":319},[178,11004,2983],{"class":699},[178,11006,10886],{"class":319},[178,11008,2983],{"class":699},[178,11010,10891],{"class":319},[178,11012,2983],{"class":699},[178,11014,10896],{"class":319},[178,11016,2983],{"class":699},[178,11018,3005],{"class":319},[178,11020,11021],{"class":180,"line":364},[178,11022,3371],{"class":319},[14,11024,11026],{"id":11025},"_47案例","4.7案例",[26,11028,11029],{},[29,11030,11031],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[154,11033,11035],{"className":1942,"code":11034,"language":1944,"meta":160,"style":160},"#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",[70,11036,11037,11043,11053,11059,11066,11070,11076,11080,11085,11091,11097,11101,11105,11111,11115,11120,11125,11138,11142,11147,11173,11177,11189,11216,11220,11232,11242,11246,11251,11280,11284,11296,11305,11332,11343,11353,11357,11361,11365,11370,11394,11398,11422,11426,11445,11471,11475,11500,11523,11547,11552,11557,11562,11571,11576,11582,11603,11609,11623,11629,11656,11665,11671,11679,11684],{"__ignoreMap":160},[178,11038,11039,11041],{"class":180,"line":181},[178,11040,3735],{"class":699},[178,11042,3738],{"class":188},[178,11044,11045,11047,11049,11051],{"class":180,"line":263},[178,11046,3743],{"class":699},[178,11048,3746],{"class":699},[178,11050,3749],{"class":184},[178,11052,3100],{"class":319},[178,11054,11055,11057],{"class":180,"line":274},[178,11056,3735],{"class":699},[178,11058,9518],{"class":188},[178,11060,11061,11063],{"class":180,"line":354},[178,11062,3735],{"class":699},[178,11064,11065],{"class":188},"\u003Cctime>\n",[178,11067,11068],{"class":180,"line":364},[178,11069,10299],{"class":2008},[178,11071,11072,11074],{"class":180,"line":740},[178,11073,9528],{"class":699},[178,11075,9531],{"class":184},[178,11077,11078],{"class":180,"line":746},[178,11079,3352],{"class":319},[178,11081,11082],{"class":180,"line":752},[178,11083,11084],{"class":319},"    string sName;\n",[178,11086,11087,11089],{"class":180,"line":757},[178,11088,3769],{"class":699},[178,11090,9566],{"class":319},[178,11092,11093,11095],{"class":180,"line":763},[178,11094,3769],{"class":699},[178,11096,9578],{"class":319},[178,11098,11099],{"class":180,"line":769},[178,11100,5767],{"class":319},[178,11102,11103],{"class":180,"line":774},[178,11104,10336],{"class":2008},[178,11106,11107,11109],{"class":180,"line":780},[178,11108,9528],{"class":699},[178,11110,10343],{"class":184},[178,11112,11113],{"class":180,"line":786},[178,11114,3352],{"class":319},[178,11116,11117],{"class":180,"line":792},[178,11118,11119],{"class":319},"    string tName;\n",[178,11121,11122],{"class":180,"line":798},[178,11123,11124],{"class":2008},"    \u002F\u002F学生数组\n",[178,11126,11127,11129,11131,11134,11136],{"class":180,"line":804},[178,11128,9664],{"class":699},[178,11130,9667],{"class":184},[178,11132,11133],{"class":319}," sArray[",[178,11135,2259],{"class":195},[178,11137,6461],{"class":319},[178,11139,11140],{"class":180,"line":810},[178,11141,5767],{"class":319},[178,11143,11144],{"class":180,"line":816},[178,11145,11146],{"class":2008},"\u002F\u002F给老师和学生赋值的函数\n",[178,11148,11149,11151,11154,11156,11158,11161,11164,11167,11169,11171],{"class":180,"line":822},[178,11150,7133],{"class":699},[178,11152,11153],{"class":184}," allocateSpace",[178,11155,944],{"class":319},[178,11157,9528],{"class":699},[178,11159,11160],{"class":184}," Teacher",[178,11162,11163],{"class":6985}," tArray",[178,11165,11166],{"class":319},"[],",[178,11168,1956],{"class":699},[178,11170,9100],{"class":6985},[178,11172,863],{"class":319},[178,11174,11175],{"class":180,"line":827},[178,11176,3352],{"class":319},[178,11178,11179,11182,11184,11187],{"class":180,"line":832},[178,11180,11181],{"class":319},"    string nameSeed",[178,11183,330],{"class":699},[178,11185,11186],{"class":188},"\"ABCDE\"",[178,11188,3100],{"class":319},[178,11190,11191,11193,11195,11197,11200,11202,11204,11207,11209,11212,11214],{"class":180,"line":850},[178,11192,988],{"class":699},[178,11194,3457],{"class":319},[178,11196,1956],{"class":699},[178,11198,11199],{"class":319}," i ",[178,11201,330],{"class":699},[178,11203,930],{"class":195},[178,11205,11206],{"class":319},"; i ",[178,11208,320],{"class":699},[178,11210,11211],{"class":319}," len; i",[178,11213,4076],{"class":699},[178,11215,863],{"class":319},[178,11217,11218],{"class":180,"line":866},[178,11219,3814],{"class":319},[178,11221,11222,11225,11227,11230],{"class":180,"line":877},[178,11223,11224],{"class":319},"        tArray[i].tName ",[178,11226,330],{"class":699},[178,11228,11229],{"class":188}," \"Teacher_\"",[178,11231,3100],{"class":319},[178,11233,11234,11236,11239],{"class":180,"line":882},[178,11235,11224],{"class":319},[178,11237,11238],{"class":699},"+=",[178,11240,11241],{"class":319},"nameSeed[i];\n",[178,11243,11244],{"class":180,"line":898},[178,11245,722],{"emptyLinePlaceholder":721},[178,11247,11248],{"class":180,"line":914},[178,11249,11250],{"class":2008},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[178,11252,11253,11255,11257,11259,11262,11264,11266,11269,11271,11273,11276,11278],{"class":180,"line":919},[178,11254,5176],{"class":699},[178,11256,3457],{"class":319},[178,11258,1956],{"class":699},[178,11260,11261],{"class":319}," j ",[178,11263,330],{"class":699},[178,11265,930],{"class":195},[178,11267,11268],{"class":319},"; j ",[178,11270,320],{"class":699},[178,11272,3932],{"class":195},[178,11274,11275],{"class":319},"; j",[178,11277,4076],{"class":699},[178,11279,863],{"class":319},[178,11281,11282],{"class":180,"line":935},[178,11283,4293],{"class":319},[178,11285,11286,11289,11291,11294],{"class":180,"line":952},[178,11287,11288],{"class":319},"            tArray[i].sArray[j].sName ",[178,11290,330],{"class":699},[178,11292,11293],{"class":188}," \"Student_\"",[178,11295,3100],{"class":319},[178,11297,11298,11300,11302],{"class":180,"line":966},[178,11299,11288],{"class":319},[178,11301,11238],{"class":699},[178,11303,11304],{"class":319}," nameSeed[j];\n",[178,11306,11307,11310,11313,11315,11317,11319,11321,11323,11325,11327,11329],{"class":180,"line":980},[178,11308,11309],{"class":699},"            int",[178,11311,11312],{"class":319}," random",[178,11314,330],{"class":699},[178,11316,4207],{"class":184},[178,11318,4210],{"class":319},[178,11320,2268],{"class":699},[178,11322,2847],{"class":195},[178,11324,2421],{"class":699},[178,11326,2341],{"class":195},[178,11328,2005],{"class":319},[178,11330,11331],{"class":2008},"\u002F\u002F40~99\n",[178,11333,11334,11337,11339,11341],{"class":180,"line":985},[178,11335,11336],{"class":319},"            tArray[i].sArray[j].age ",[178,11338,330],{"class":699},[178,11340,10711],{"class":195},[178,11342,3100],{"class":319},[178,11344,11345,11348,11350],{"class":180,"line":1008},[178,11346,11347],{"class":319},"            tArray[i].sArray[j].score ",[178,11349,330],{"class":699},[178,11351,11352],{"class":319}," random;\n",[178,11354,11355],{"class":180,"line":1014},[178,11356,4312],{"class":319},[178,11358,11359],{"class":180,"line":1019},[178,11360,3971],{"class":319},[178,11362,11363],{"class":180,"line":1033},[178,11364,3371],{"class":319},[178,11366,11367],{"class":180,"line":1046},[178,11368,11369],{"class":2008},"\u002F\u002F打印所有信息的函数\n",[178,11371,11372,11374,11377,11379,11381,11383,11385,11388,11390,11392],{"class":180,"line":1059},[178,11373,7133],{"class":699},[178,11375,11376],{"class":184}," printInfo",[178,11378,944],{"class":319},[178,11380,9528],{"class":699},[178,11382,11160],{"class":184},[178,11384,11163],{"class":6985},[178,11386,11387],{"class":319},"[], ",[178,11389,1956],{"class":699},[178,11391,9100],{"class":6985},[178,11393,863],{"class":319},[178,11395,11396],{"class":180,"line":1072},[178,11397,3352],{"class":319},[178,11399,11400,11402,11404,11406,11408,11410,11412,11414,11416,11418,11420],{"class":180,"line":1077},[178,11401,988],{"class":699},[178,11403,3457],{"class":319},[178,11405,1956],{"class":699},[178,11407,11199],{"class":319},[178,11409,330],{"class":699},[178,11411,930],{"class":195},[178,11413,11206],{"class":319},[178,11415,320],{"class":699},[178,11417,11211],{"class":319},[178,11419,4076],{"class":699},[178,11421,863],{"class":319},[178,11423,11424],{"class":180,"line":1082},[178,11425,3814],{"class":319},[178,11427,11428,11431,11433,11436,11438,11441,11443],{"class":180,"line":1099},[178,11429,11430],{"class":319},"        cout ",[178,11432,2983],{"class":699},[178,11434,11435],{"class":188}," \"Teacher: \"",[178,11437,3251],{"class":699},[178,11439,11440],{"class":319}," tArray[i].tName ",[178,11442,2983],{"class":699},[178,11444,10601],{"class":319},[178,11446,11447,11449,11451,11453,11455,11457,11459,11461,11463,11465,11467,11469],{"class":180,"line":9806},[178,11448,5176],{"class":699},[178,11450,3457],{"class":319},[178,11452,1956],{"class":699},[178,11454,11261],{"class":319},[178,11456,330],{"class":699},[178,11458,930],{"class":195},[178,11460,11268],{"class":319},[178,11462,320],{"class":699},[178,11464,3932],{"class":195},[178,11466,11275],{"class":319},[178,11468,4076],{"class":699},[178,11470,863],{"class":319},[178,11472,11473],{"class":180,"line":9818},[178,11474,4293],{"class":319},[178,11476,11478,11481,11483,11486,11488,11491,11493,11496,11498],{"class":180,"line":11477},47,[178,11479,11480],{"class":319},"            cout ",[178,11482,2983],{"class":699},[178,11484,11485],{"class":188}," \"",[178,11487,3040],{"class":195},[178,11489,11490],{"class":188},"Student: \"",[178,11492,3251],{"class":699},[178,11494,11495],{"class":319}," tArray[i].sArray[j].sName",[178,11497,2983],{"class":699},[178,11499,3005],{"class":319},[178,11501,11503,11505,11507,11509,11511,11514,11516,11519,11521],{"class":180,"line":11502},48,[178,11504,11480],{"class":319},[178,11506,2983],{"class":699},[178,11508,11485],{"class":188},[178,11510,3040],{"class":195},[178,11512,11513],{"class":188},"Age: \"",[178,11515,3251],{"class":699},[178,11517,11518],{"class":319}," tArray[i].sArray[j].age ",[178,11520,2983],{"class":699},[178,11522,10601],{"class":319},[178,11524,11526,11528,11530,11532,11534,11537,11539,11542,11544],{"class":180,"line":11525},49,[178,11527,11480],{"class":319},[178,11529,2983],{"class":699},[178,11531,11485],{"class":188},[178,11533,3040],{"class":195},[178,11535,11536],{"class":188},"Score: \"",[178,11538,3251],{"class":699},[178,11540,11541],{"class":319}," tArray[i].sArray[j].score ",[178,11543,2983],{"class":699},[178,11545,11546],{"class":319}," endl;   \n",[178,11548,11550],{"class":180,"line":11549},50,[178,11551,4312],{"class":319},[178,11553,11555],{"class":180,"line":11554},51,[178,11556,3971],{"class":319},[178,11558,11560],{"class":180,"line":11559},52,[178,11561,3371],{"class":319},[178,11563,11565,11567,11569],{"class":180,"line":11564},53,[178,11566,1956],{"class":699},[178,11568,838],{"class":184},[178,11570,3760],{"class":319},[178,11572,11574],{"class":180,"line":11573},54,[178,11575,3352],{"class":319},[178,11577,11579],{"class":180,"line":11578},55,[178,11580,11581],{"class":2008},"    \u002F\u002F随机数种子\n",[178,11583,11585,11587,11589,11591,11593,11595,11597,11599,11601],{"class":180,"line":11584},56,[178,11586,4157],{"class":184},[178,11588,4160],{"class":319},[178,11590,4163],{"class":699},[178,11592,4166],{"class":699},[178,11594,2369],{"class":319},[178,11596,4171],{"class":184},[178,11598,944],{"class":319},[178,11600,4176],{"class":195},[178,11602,4179],{"class":319},[178,11604,11606],{"class":180,"line":11605},57,[178,11607,11608],{"class":2008},"    \u002F\u002F1.创建3名老师的数组\n",[178,11610,11612,11614,11616,11619,11621],{"class":180,"line":11611},58,[178,11613,9664],{"class":699},[178,11615,11160],{"class":184},[178,11617,11618],{"class":319}," tArray[",[178,11620,2021],{"class":195},[178,11622,6461],{"class":319},[178,11624,11626],{"class":180,"line":11625},59,[178,11627,11628],{"class":2008},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[178,11630,11632,11634,11637,11639,11642,11645,11647,11649,11652,11654],{"class":180,"line":11631},60,[178,11633,3769],{"class":699},[178,11635,11636],{"class":319}," len ",[178,11638,330],{"class":699},[178,11640,11641],{"class":699}," sizeof",[178,11643,11644],{"class":319},"(tArray) ",[178,11646,2524],{"class":699},[178,11648,11641],{"class":699},[178,11650,11651],{"class":319},"(tArray[",[178,11653,2133],{"class":195},[178,11655,5628],{"class":319},[178,11657,11659,11662],{"class":180,"line":11658},61,[178,11660,11661],{"class":184},"    allocateSpace",[178,11663,11664],{"class":319},"(tArray, len);\n",[178,11666,11668],{"class":180,"line":11667},62,[178,11669,11670],{"class":2008},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[178,11672,11674,11677],{"class":180,"line":11673},63,[178,11675,11676],{"class":184},"    printInfo",[178,11678,11664],{"class":319},[178,11680,11682],{"class":180,"line":11681},64,[178,11683,722],{"emptyLinePlaceholder":721},[178,11685,11687],{"class":180,"line":11686},65,[178,11688,3371],{"class":319},[26,11690,11691],{"start":263},[29,11692,11693,11696],{},[2093,11694,11695],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,11698,11699],{},"五名英雄信息如下：",[154,11701,11705],{"className":11702,"code":11703,"language":11704,"meta":160,"style":160},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[70,11706,11707,11725,11742,11759,11776],{"__ignoreMap":160},[178,11708,11709,11711,11714,11716,11718,11720,11723],{"class":180,"line":181},[178,11710,6688],{"class":319},[178,11712,11713],{"class":188},"\"刘备\"",[178,11715,2318],{"class":319},[178,11717,2715],{"class":195},[178,11719,2318],{"class":319},[178,11721,11722],{"class":188},"\"男\"",[178,11724,6701],{"class":319},[178,11726,11727,11729,11732,11734,11736,11738,11740],{"class":180,"line":263},[178,11728,6688],{"class":319},[178,11730,11731],{"class":188},"\"关羽\"",[178,11733,2318],{"class":319},[178,11735,2690],{"class":195},[178,11737,2318],{"class":319},[178,11739,11722],{"class":188},[178,11741,6701],{"class":319},[178,11743,11744,11746,11749,11751,11753,11755,11757],{"class":180,"line":274},[178,11745,6688],{"class":319},[178,11747,11748],{"class":188},"\"张飞\"",[178,11750,2318],{"class":319},[178,11752,2640],{"class":195},[178,11754,2318],{"class":319},[178,11756,11722],{"class":188},[178,11758,6701],{"class":319},[178,11760,11761,11763,11766,11768,11770,11772,11774],{"class":180,"line":354},[178,11762,6688],{"class":319},[178,11764,11765],{"class":188},"\"赵云\"",[178,11767,2318],{"class":319},[178,11769,2665],{"class":195},[178,11771,2318],{"class":319},[178,11773,11722],{"class":188},[178,11775,6701],{"class":319},[178,11777,11778,11780,11783,11785,11787,11789,11792],{"class":180,"line":364},[178,11779,6688],{"class":319},[178,11781,11782],{"class":188},"\"貂蝉\"",[178,11784,2318],{"class":319},[178,11786,2615],{"class":195},[178,11788,2318],{"class":319},[178,11790,11791],{"class":188},"\"女\"",[178,11793,6701],{"class":319},[19,11795,11796],{},"代码：",[154,11798,11800],{"className":1942,"code":11799,"language":1944,"meta":160,"style":160},"#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",[70,11801,11802,11808,11818,11824,11831,11835,11839,11845,11850,11854,11859,11882,11886,11911,11915,11948,11953,11982,11987,12002,12028,12048,12053,12058,12062,12066,12071,12093,12097,12121,12125,12187,12191,12195,12203,12207,12212,12223,12227,12243,12259,12275,12291,12307,12311,12331,12353,12358,12371,12378,12383,12389,12394,12407,12413],{"__ignoreMap":160},[178,11803,11804,11806],{"class":180,"line":181},[178,11805,3735],{"class":699},[178,11807,3738],{"class":188},[178,11809,11810,11812,11814,11816],{"class":180,"line":263},[178,11811,3743],{"class":699},[178,11813,3746],{"class":699},[178,11815,3749],{"class":184},[178,11817,3100],{"class":319},[178,11819,11820,11822],{"class":180,"line":274},[178,11821,3735],{"class":699},[178,11823,9518],{"class":188},[178,11825,11826,11828],{"class":180,"line":354},[178,11827,9528],{"class":699},[178,11829,11830],{"class":184}," Sanguo\n",[178,11832,11833],{"class":180,"line":364},[178,11834,3352],{"class":319},[178,11836,11837],{"class":180,"line":740},[178,11838,9554],{"class":319},[178,11840,11841,11843],{"class":180,"line":746},[178,11842,3769],{"class":699},[178,11844,9566],{"class":319},[178,11846,11847],{"class":180,"line":752},[178,11848,11849],{"class":319},"    string gender;\n",[178,11851,11852],{"class":180,"line":757},[178,11853,5767],{"class":319},[178,11855,11856],{"class":180,"line":763},[178,11857,11858],{"class":2008},"\u002F\u002F定义排序函数\n",[178,11860,11861,11863,11865,11867,11870,11872,11874,11876,11878,11880],{"class":180,"line":769},[178,11862,7133],{"class":699},[178,11864,9085],{"class":184},[178,11866,944],{"class":319},[178,11868,11869],{"class":184},"Sanguo",[178,11871,8287],{"class":699},[178,11873,2635],{"class":6985},[178,11875,2318],{"class":319},[178,11877,1956],{"class":699},[178,11879,9100],{"class":6985},[178,11881,863],{"class":319},[178,11883,11884],{"class":180,"line":774},[178,11885,3352],{"class":319},[178,11887,11888,11890,11892,11894,11896,11898,11900,11902,11904,11907,11909],{"class":180,"line":780},[178,11889,988],{"class":699},[178,11891,944],{"class":319},[178,11893,1956],{"class":699},[178,11895,4807],{"class":319},[178,11897,330],{"class":699},[178,11899,2133],{"class":195},[178,11901,4814],{"class":319},[178,11903,320],{"class":699},[178,11905,11906],{"class":319},"len;i",[178,11908,4076],{"class":699},[178,11910,863],{"class":319},[178,11912,11913],{"class":180,"line":786},[178,11914,3814],{"class":319},[178,11916,11917,11920,11922,11924,11926,11928,11930,11932,11934,11936,11938,11940,11942,11944,11946],{"class":180,"line":792},[178,11918,11919],{"class":699},"     for",[178,11921,3457],{"class":319},[178,11923,1956],{"class":699},[178,11925,5183],{"class":319},[178,11927,330],{"class":699},[178,11929,2133],{"class":195},[178,11931,5190],{"class":319},[178,11933,320],{"class":699},[178,11935,9127],{"class":319},[178,11937,2472],{"class":699},[178,11939,1665],{"class":195},[178,11941,2472],{"class":699},[178,11943,5323],{"class":319},[178,11945,4076],{"class":699},[178,11947,863],{"class":319},[178,11949,11950],{"class":180,"line":798},[178,11951,11952],{"class":319},"     {\n",[178,11954,11955,11958,11961,11963,11966,11968,11971,11973,11975,11977,11979],{"class":180,"line":804},[178,11956,11957],{"class":699},"         if",[178,11959,11960],{"class":319}," ((s",[178,11962,2421],{"class":699},[178,11964,11965],{"class":319},"j)->age ",[178,11967,2899],{"class":699},[178,11969,11970],{"class":319}," (s",[178,11972,2421],{"class":699},[178,11974,2407],{"class":319},[178,11976,2421],{"class":699},[178,11978,1665],{"class":195},[178,11980,11981],{"class":319},")->age)\n",[178,11983,11984],{"class":180,"line":810},[178,11985,11986],{"class":319},"         {\n",[178,11988,11989,11992,11994,11997,11999],{"class":180,"line":816},[178,11990,11991],{"class":319},"             Sanguo temp",[178,11993,8922],{"class":699},[178,11995,11996],{"class":319},"(s",[178,11998,2421],{"class":699},[178,12000,12001],{"class":319},"j);\n",[178,12003,12004,12007,12009,12011,12014,12016,12018,12020,12022,12024,12026],{"class":180,"line":822},[178,12005,12006],{"class":699},"             *",[178,12008,11996],{"class":319},[178,12010,2421],{"class":699},[178,12012,12013],{"class":319},"j)",[178,12015,8922],{"class":699},[178,12017,11996],{"class":319},[178,12019,2421],{"class":699},[178,12021,2407],{"class":319},[178,12023,2421],{"class":699},[178,12025,1665],{"class":195},[178,12027,4495],{"class":319},[178,12029,12030,12032,12034,12036,12038,12040,12042,12044,12046],{"class":180,"line":827},[178,12031,12006],{"class":699},[178,12033,11996],{"class":319},[178,12035,2421],{"class":699},[178,12037,2407],{"class":319},[178,12039,2421],{"class":699},[178,12041,1665],{"class":195},[178,12043,2369],{"class":319},[178,12045,330],{"class":699},[178,12047,6051],{"class":319},[178,12049,12050],{"class":180,"line":832},[178,12051,12052],{"class":319},"         }\n",[178,12054,12055],{"class":180,"line":850},[178,12056,12057],{"class":319},"     }\n",[178,12059,12060],{"class":180,"line":866},[178,12061,3971],{"class":319},[178,12063,12064],{"class":180,"line":877},[178,12065,3371],{"class":319},[178,12067,12068],{"class":180,"line":882},[178,12069,12070],{"class":2008},"\u002F\u002F定义打印函数\n",[178,12072,12073,12075,12077,12079,12081,12083,12085,12087,12089,12091],{"class":180,"line":898},[178,12074,7133],{"class":699},[178,12076,11376],{"class":184},[178,12078,944],{"class":319},[178,12080,11869],{"class":184},[178,12082,8287],{"class":699},[178,12084,2635],{"class":6985},[178,12086,2318],{"class":319},[178,12088,1956],{"class":699},[178,12090,9100],{"class":6985},[178,12092,863],{"class":319},[178,12094,12095],{"class":180,"line":914},[178,12096,3352],{"class":319},[178,12098,12099,12101,12103,12105,12107,12109,12111,12113,12115,12117,12119],{"class":180,"line":919},[178,12100,988],{"class":699},[178,12102,3457],{"class":319},[178,12104,1956],{"class":699},[178,12106,4807],{"class":319},[178,12108,330],{"class":699},[178,12110,2133],{"class":195},[178,12112,4814],{"class":319},[178,12114,320],{"class":699},[178,12116,11906],{"class":319},[178,12118,4076],{"class":699},[178,12120,863],{"class":319},[178,12122,12123],{"class":180,"line":935},[178,12124,3814],{"class":319},[178,12126,12127,12129,12131,12133,12135,12138,12140,12142,12144,12147,12149,12151,12153,12156,12158,12160,12162,12165,12167,12169,12171,12174,12176,12178,12180,12183,12185],{"class":180,"line":952},[178,12128,5224],{"class":319},[178,12130,2983],{"class":699},[178,12132,2191],{"class":188},[178,12134,3040],{"class":195},[178,12136,12137],{"class":188},"姓名：\"",[178,12139,2983],{"class":699},[178,12141,11996],{"class":319},[178,12143,2421],{"class":699},[178,12145,12146],{"class":319},"i)->name",[178,12148,2983],{"class":699},[178,12150,2191],{"class":188},[178,12152,3040],{"class":195},[178,12154,12155],{"class":188},"年龄：\"",[178,12157,2983],{"class":699},[178,12159,11996],{"class":319},[178,12161,2421],{"class":699},[178,12163,12164],{"class":319},"i)->age",[178,12166,2983],{"class":699},[178,12168,2191],{"class":188},[178,12170,3040],{"class":195},[178,12172,12173],{"class":188},"性别：\"",[178,12175,2983],{"class":699},[178,12177,11996],{"class":319},[178,12179,2421],{"class":699},[178,12181,12182],{"class":319},"i)->gender",[178,12184,2983],{"class":699},[178,12186,3005],{"class":319},[178,12188,12189],{"class":180,"line":966},[178,12190,3971],{"class":319},[178,12192,12193],{"class":180,"line":980},[178,12194,3371],{"class":319},[178,12196,12197,12199,12201],{"class":180,"line":985},[178,12198,1956],{"class":699},[178,12200,838],{"class":184},[178,12202,3760],{"class":319},[178,12204,12205],{"class":180,"line":1008},[178,12206,3352],{"class":319},[178,12208,12209],{"class":180,"line":1014},[178,12210,12211],{"class":2008},"    \u002F\u002F定义结构体变量\n",[178,12213,12214,12217,12219,12221],{"class":180,"line":1019},[178,12215,12216],{"class":319},"    Sanguo s1[",[178,12218,2259],{"class":195},[178,12220,2879],{"class":319},[178,12222,6679],{"class":699},[178,12224,12225],{"class":180,"line":1033},[178,12226,3814],{"class":319},[178,12228,12229,12231,12233,12235,12237,12239,12241],{"class":180,"line":1046},[178,12230,6688],{"class":319},[178,12232,11713],{"class":188},[178,12234,2318],{"class":319},[178,12236,2715],{"class":195},[178,12238,2318],{"class":319},[178,12240,11722],{"class":188},[178,12242,6701],{"class":319},[178,12244,12245,12247,12249,12251,12253,12255,12257],{"class":180,"line":1059},[178,12246,6688],{"class":319},[178,12248,11731],{"class":188},[178,12250,2318],{"class":319},[178,12252,2690],{"class":195},[178,12254,2318],{"class":319},[178,12256,11722],{"class":188},[178,12258,6701],{"class":319},[178,12260,12261,12263,12265,12267,12269,12271,12273],{"class":180,"line":1072},[178,12262,6688],{"class":319},[178,12264,11748],{"class":188},[178,12266,2318],{"class":319},[178,12268,2640],{"class":195},[178,12270,2318],{"class":319},[178,12272,11722],{"class":188},[178,12274,6701],{"class":319},[178,12276,12277,12279,12281,12283,12285,12287,12289],{"class":180,"line":1077},[178,12278,6688],{"class":319},[178,12280,11765],{"class":188},[178,12282,2318],{"class":319},[178,12284,2665],{"class":195},[178,12286,2318],{"class":319},[178,12288,11722],{"class":188},[178,12290,6701],{"class":319},[178,12292,12293,12295,12297,12299,12301,12303,12305],{"class":180,"line":1082},[178,12294,6688],{"class":319},[178,12296,11782],{"class":188},[178,12298,2318],{"class":319},[178,12300,2615],{"class":195},[178,12302,2318],{"class":319},[178,12304,11791],{"class":188},[178,12306,6701],{"class":319},[178,12308,12309],{"class":180,"line":1099},[178,12310,6722],{"class":319},[178,12312,12313,12315,12317,12319,12322,12324,12327,12329],{"class":180,"line":9806},[178,12314,3769],{"class":699},[178,12316,9100],{"class":319},[178,12318,5974],{"class":699},[178,12320,12321],{"class":319},"(s1)",[178,12323,5980],{"class":699},[178,12325,12326],{"class":319},"(s1[",[178,12328,2133],{"class":195},[178,12330,5628],{"class":319},[178,12332,12333,12336,12338,12341,12343,12346,12349,12351],{"class":180,"line":9818},[178,12334,12335],{"class":319},"    Sanguo ",[178,12337,2395],{"class":699},[178,12339,12340],{"class":319},"s ",[178,12342,330],{"class":699},[178,12344,12345],{"class":699}," &",[178,12347,12348],{"class":319},"s1[",[178,12350,2133],{"class":195},[178,12352,6461],{"class":319},[178,12354,12355],{"class":180,"line":11477},[178,12356,12357],{"class":2008},"    \u002F\u002F排序前：\n",[178,12359,12360,12362,12364,12367,12369],{"class":180,"line":11502},[178,12361,8298],{"class":319},[178,12363,2983],{"class":699},[178,12365,12366],{"class":188}," \"排序前：\"",[178,12368,3251],{"class":699},[178,12370,10601],{"class":319},[178,12372,12373,12375],{"class":180,"line":11525},[178,12374,11676],{"class":184},[178,12376,12377],{"class":319},"(s,len);\n",[178,12379,12380],{"class":180,"line":11549},[178,12381,12382],{"class":2008},"    \u002F\u002F调用排序函数\n",[178,12384,12385,12387],{"class":180,"line":11554},[178,12386,9367],{"class":184},[178,12388,12377],{"class":319},[178,12390,12391],{"class":180,"line":11559},[178,12392,12393],{"class":2008},"    \u002F\u002F排序后\n",[178,12395,12396,12398,12400,12403,12405],{"class":180,"line":11564},[178,12397,8298],{"class":319},[178,12399,2983],{"class":699},[178,12401,12402],{"class":188}," \"排序后：\"",[178,12404,3251],{"class":699},[178,12406,10601],{"class":319},[178,12408,12409,12411],{"class":180,"line":11573},[178,12410,11676],{"class":184},[178,12412,12377],{"class":319},[178,12414,12415],{"class":180,"line":11578},[178,12416,3371],{"class":319},[19,12418,12419,12420,12422],{},"注意：使用指针时直接用传首地址**&s",[178,12421,2133],{},"**",[1853,12424,12425],{},"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":160,"searchDepth":263,"depth":263,"links":12427},[12428,12429,12430,12431,12432,12433,12434],{"id":9472,"depth":263,"text":9473},{"id":9826,"depth":263,"text":9827},{"id":10095,"depth":263,"text":10096},{"id":10260,"depth":263,"text":10261},{"id":10476,"depth":263,"text":10477},{"id":10797,"depth":263,"text":10798},{"id":11025,"depth":263,"text":11026},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9461,"description":9469},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12441,"title":12442,"body":12443,"description":160,"extension":1880,"meta":13786,"navigation":721,"path":13787,"seo":13788,"stem":13789,"__hash__":13790},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12444,"toc":13780},[12445,12448,12452,12458,12472,12477,12480,12484,12491,12497,12500,12507,12513,12518,12521,12524,12527,13091,13094,13108,13112,13117,13133,13273,13276,13282,13285,13290,13298,13406,13409,13414,13417,13422,13425,13431,13434,13777],[10,12446,12442],{"id":12447},"_5程序内存模型",[14,12449,12451],{"id":12450},"_51内存分区模型","5.1内存分区模型",[19,12453,12454,12455],{},"C++程序在执行时，将内存大方向划分为",[2093,12456,12457],{},"4个区域",[2946,12459,12460,12463,12466,12469],{},[29,12461,12462],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[29,12464,12465],{},"全局区：存放全局变量和静态变量以及常量",[29,12467,12468],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[29,12470,12471],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,12473,12474],{},[2093,12475,12476],{},"内存四区意义：",[19,12478,12479],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[387,12481,12483],{"id":12482},"_511程序运行前","5.1.1程序运行前",[19,12485,12486,12487,12490],{},"​\t在程序编译后，生成了exe可执行程序，",[2093,12488,12489],{},"未执行该程序前","分为两个区域",[19,12492,12493,12494],{},"​\t",[2093,12495,12496],{},"代码区：",[19,12498,12499],{},"​\t\t存放 CPU 执行的机器指令",[19,12501,12502,12503,12506],{},"​\t\t代码区是",[2093,12504,12505],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,12508,12502,12509,12512],{},[2093,12510,12511],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,12514,12493,12515],{},[2093,12516,12517],{},"全局区：",[19,12519,12520],{},"​\t\t全局变量和静态变量存放在此.",[19,12522,12523],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,12525,12526],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[154,12528,12530],{"className":1942,"code":12529,"language":1944,"meta":160,"style":160},"\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",[70,12531,12532,12537,12550,12563,12567,12572,12587,12602,12606,12615,12619,12624,12637,12650,12654,12659,12685,12711,12715,12742,12768,12772,12777,12793,12808,12812,12838,12864,12868,12893,12918,12922,12948,12974,12978,12994,13009,13035,13061,13065,13075,13079,13087],{"__ignoreMap":160},[178,12533,12534],{"class":180,"line":181},[178,12535,12536],{"class":2008},"\u002F\u002F全局变量\n",[178,12538,12539,12541,12544,12546,12548],{"class":180,"line":263},[178,12540,1956],{"class":699},[178,12542,12543],{"class":319}," g_a ",[178,12545,330],{"class":699},[178,12547,3822],{"class":195},[178,12549,3100],{"class":319},[178,12551,12552,12554,12557,12559,12561],{"class":180,"line":274},[178,12553,1956],{"class":699},[178,12555,12556],{"class":319}," g_b ",[178,12558,330],{"class":699},[178,12560,3822],{"class":195},[178,12562,3100],{"class":319},[178,12564,12565],{"class":180,"line":354},[178,12566,722],{"emptyLinePlaceholder":721},[178,12568,12569],{"class":180,"line":364},[178,12570,12571],{"class":2008},"\u002F\u002F全局常量\n",[178,12573,12574,12576,12578,12581,12583,12585],{"class":180,"line":740},[178,12575,8561],{"class":699},[178,12577,4166],{"class":699},[178,12579,12580],{"class":319}," c_g_a ",[178,12582,330],{"class":699},[178,12584,3822],{"class":195},[178,12586,3100],{"class":319},[178,12588,12589,12591,12593,12596,12598,12600],{"class":180,"line":746},[178,12590,8561],{"class":699},[178,12592,4166],{"class":699},[178,12594,12595],{"class":319}," c_g_b ",[178,12597,330],{"class":699},[178,12599,3822],{"class":195},[178,12601,3100],{"class":319},[178,12603,12604],{"class":180,"line":752},[178,12605,722],{"emptyLinePlaceholder":721},[178,12607,12608,12610,12612],{"class":180,"line":757},[178,12609,1956],{"class":699},[178,12611,838],{"class":184},[178,12613,12614],{"class":319},"() {\n",[178,12616,12617],{"class":180,"line":763},[178,12618,722],{"emptyLinePlaceholder":721},[178,12620,12621],{"class":180,"line":769},[178,12622,12623],{"class":2008},"    \u002F\u002F局部变量\n",[178,12625,12626,12628,12631,12633,12635],{"class":180,"line":774},[178,12627,3769],{"class":699},[178,12629,12630],{"class":319}," a ",[178,12632,330],{"class":699},[178,12634,3822],{"class":195},[178,12636,3100],{"class":319},[178,12638,12639,12641,12644,12646,12648],{"class":180,"line":780},[178,12640,3769],{"class":699},[178,12642,12643],{"class":319}," b ",[178,12645,330],{"class":699},[178,12647,3822],{"class":195},[178,12649,3100],{"class":319},[178,12651,12652],{"class":180,"line":786},[178,12653,722],{"emptyLinePlaceholder":721},[178,12655,12656],{"class":180,"line":792},[178,12657,12658],{"class":2008},"    \u002F\u002F打印地址\n",[178,12660,12661,12663,12665,12668,12670,12672,12674,12676,12678,12681,12683],{"class":180,"line":798},[178,12662,8298],{"class":319},[178,12664,2983],{"class":699},[178,12666,12667],{"class":188}," \"局部变量a地址为： \"",[178,12669,3251],{"class":699},[178,12671,3457],{"class":319},[178,12673,1956],{"class":699},[178,12675,2369],{"class":319},[178,12677,2293],{"class":699},[178,12679,12680],{"class":319},"a ",[178,12682,2983],{"class":699},[178,12684,10601],{"class":319},[178,12686,12687,12689,12691,12694,12696,12698,12700,12702,12704,12707,12709],{"class":180,"line":804},[178,12688,8298],{"class":319},[178,12690,2983],{"class":699},[178,12692,12693],{"class":188}," \"局部变量b地址为： \"",[178,12695,3251],{"class":699},[178,12697,3457],{"class":319},[178,12699,1956],{"class":699},[178,12701,2369],{"class":319},[178,12703,2293],{"class":699},[178,12705,12706],{"class":319},"b ",[178,12708,2983],{"class":699},[178,12710,10601],{"class":319},[178,12712,12713],{"class":180,"line":810},[178,12714,722],{"emptyLinePlaceholder":721},[178,12716,12717,12719,12721,12724,12726,12729,12731,12733,12735,12738,12740],{"class":180,"line":816},[178,12718,8298],{"class":319},[178,12720,2983],{"class":699},[178,12722,12723],{"class":188}," \"全局变量g_a地址为： \"",[178,12725,3251],{"class":699},[178,12727,12728],{"class":319},"  (",[178,12730,1956],{"class":699},[178,12732,2369],{"class":319},[178,12734,2293],{"class":699},[178,12736,12737],{"class":319},"g_a ",[178,12739,2983],{"class":699},[178,12741,10601],{"class":319},[178,12743,12744,12746,12748,12751,12753,12755,12757,12759,12761,12764,12766],{"class":180,"line":822},[178,12745,8298],{"class":319},[178,12747,2983],{"class":699},[178,12749,12750],{"class":188}," \"全局变量g_b地址为： \"",[178,12752,3251],{"class":699},[178,12754,12728],{"class":319},[178,12756,1956],{"class":699},[178,12758,2369],{"class":319},[178,12760,2293],{"class":699},[178,12762,12763],{"class":319},"g_b ",[178,12765,2983],{"class":699},[178,12767,10601],{"class":319},[178,12769,12770],{"class":180,"line":827},[178,12771,722],{"emptyLinePlaceholder":721},[178,12773,12774],{"class":180,"line":832},[178,12775,12776],{"class":2008},"    \u002F\u002F静态变量\n",[178,12778,12779,12782,12784,12787,12789,12791],{"class":180,"line":850},[178,12780,12781],{"class":699},"    static",[178,12783,4166],{"class":699},[178,12785,12786],{"class":319}," s_a ",[178,12788,330],{"class":699},[178,12790,3822],{"class":195},[178,12792,3100],{"class":319},[178,12794,12795,12797,12799,12802,12804,12806],{"class":180,"line":866},[178,12796,12781],{"class":699},[178,12798,4166],{"class":699},[178,12800,12801],{"class":319}," s_b ",[178,12803,330],{"class":699},[178,12805,3822],{"class":195},[178,12807,3100],{"class":319},[178,12809,12810],{"class":180,"line":877},[178,12811,722],{"emptyLinePlaceholder":721},[178,12813,12814,12816,12818,12821,12823,12825,12827,12829,12831,12834,12836],{"class":180,"line":882},[178,12815,8298],{"class":319},[178,12817,2983],{"class":699},[178,12819,12820],{"class":188}," \"静态变量s_a地址为： \"",[178,12822,3251],{"class":699},[178,12824,3457],{"class":319},[178,12826,1956],{"class":699},[178,12828,2369],{"class":319},[178,12830,2293],{"class":699},[178,12832,12833],{"class":319},"s_a ",[178,12835,2983],{"class":699},[178,12837,10601],{"class":319},[178,12839,12840,12842,12844,12847,12849,12851,12853,12855,12857,12860,12862],{"class":180,"line":898},[178,12841,8298],{"class":319},[178,12843,2983],{"class":699},[178,12845,12846],{"class":188}," \"静态变量s_b地址为： \"",[178,12848,3251],{"class":699},[178,12850,3457],{"class":319},[178,12852,1956],{"class":699},[178,12854,2369],{"class":319},[178,12856,2293],{"class":699},[178,12858,12859],{"class":319},"s_b ",[178,12861,2983],{"class":699},[178,12863,10601],{"class":319},[178,12865,12866],{"class":180,"line":914},[178,12867,722],{"emptyLinePlaceholder":721},[178,12869,12870,12872,12874,12877,12879,12881,12883,12885,12887,12889,12891],{"class":180,"line":919},[178,12871,8298],{"class":319},[178,12873,2983],{"class":699},[178,12875,12876],{"class":188}," \"字符串常量地址为： \"",[178,12878,3251],{"class":699},[178,12880,3457],{"class":319},[178,12882,1956],{"class":699},[178,12884,2369],{"class":319},[178,12886,2293],{"class":699},[178,12888,3000],{"class":188},[178,12890,3251],{"class":699},[178,12892,10601],{"class":319},[178,12894,12895,12897,12899,12901,12903,12905,12907,12909,12911,12914,12916],{"class":180,"line":935},[178,12896,8298],{"class":319},[178,12898,2983],{"class":699},[178,12900,12876],{"class":188},[178,12902,3251],{"class":699},[178,12904,3457],{"class":319},[178,12906,1956],{"class":699},[178,12908,2369],{"class":319},[178,12910,2293],{"class":699},[178,12912,12913],{"class":188},"\"hello world1\"",[178,12915,3251],{"class":699},[178,12917,10601],{"class":319},[178,12919,12920],{"class":180,"line":952},[178,12921,722],{"emptyLinePlaceholder":721},[178,12923,12924,12926,12928,12931,12933,12935,12937,12939,12941,12944,12946],{"class":180,"line":966},[178,12925,8298],{"class":319},[178,12927,2983],{"class":699},[178,12929,12930],{"class":188}," \"全局常量c_g_a地址为： \"",[178,12932,3251],{"class":699},[178,12934,3457],{"class":319},[178,12936,1956],{"class":699},[178,12938,2369],{"class":319},[178,12940,2293],{"class":699},[178,12942,12943],{"class":319},"c_g_a ",[178,12945,2983],{"class":699},[178,12947,10601],{"class":319},[178,12949,12950,12952,12954,12957,12959,12961,12963,12965,12967,12970,12972],{"class":180,"line":980},[178,12951,8298],{"class":319},[178,12953,2983],{"class":699},[178,12955,12956],{"class":188}," \"全局常量c_g_b地址为： \"",[178,12958,3251],{"class":699},[178,12960,3457],{"class":319},[178,12962,1956],{"class":699},[178,12964,2369],{"class":319},[178,12966,2293],{"class":699},[178,12968,12969],{"class":319},"c_g_b ",[178,12971,2983],{"class":699},[178,12973,10601],{"class":319},[178,12975,12976],{"class":180,"line":985},[178,12977,722],{"emptyLinePlaceholder":721},[178,12979,12980,12983,12985,12988,12990,12992],{"class":180,"line":1008},[178,12981,12982],{"class":699},"    const",[178,12984,4166],{"class":699},[178,12986,12987],{"class":319}," c_l_a ",[178,12989,330],{"class":699},[178,12991,3822],{"class":195},[178,12993,3100],{"class":319},[178,12995,12996,12998,13000,13003,13005,13007],{"class":180,"line":1014},[178,12997,12982],{"class":699},[178,12999,4166],{"class":699},[178,13001,13002],{"class":319}," c_l_b ",[178,13004,330],{"class":699},[178,13006,3822],{"class":195},[178,13008,3100],{"class":319},[178,13010,13011,13013,13015,13018,13020,13022,13024,13026,13028,13031,13033],{"class":180,"line":1019},[178,13012,8298],{"class":319},[178,13014,2983],{"class":699},[178,13016,13017],{"class":188}," \"局部常量c_l_a地址为： \"",[178,13019,3251],{"class":699},[178,13021,3457],{"class":319},[178,13023,1956],{"class":699},[178,13025,2369],{"class":319},[178,13027,2293],{"class":699},[178,13029,13030],{"class":319},"c_l_a ",[178,13032,2983],{"class":699},[178,13034,10601],{"class":319},[178,13036,13037,13039,13041,13044,13046,13048,13050,13052,13054,13057,13059],{"class":180,"line":1033},[178,13038,8298],{"class":319},[178,13040,2983],{"class":699},[178,13042,13043],{"class":188}," \"局部常量c_l_b地址为： \"",[178,13045,3251],{"class":699},[178,13047,3457],{"class":319},[178,13049,1956],{"class":699},[178,13051,2369],{"class":319},[178,13053,2293],{"class":699},[178,13055,13056],{"class":319},"c_l_b ",[178,13058,2983],{"class":699},[178,13060,10601],{"class":319},[178,13062,13063],{"class":180,"line":1046},[178,13064,722],{"emptyLinePlaceholder":721},[178,13066,13067,13069,13071,13073],{"class":180,"line":1059},[178,13068,4087],{"class":184},[178,13070,944],{"class":319},[178,13072,4092],{"class":188},[178,13074,4495],{"class":319},[178,13076,13077],{"class":180,"line":1072},[178,13078,722],{"emptyLinePlaceholder":721},[178,13080,13081,13083,13085],{"class":180,"line":1077},[178,13082,5862],{"class":699},[178,13084,930],{"class":195},[178,13086,3100],{"class":319},[178,13088,13089],{"class":180,"line":1082},[178,13090,3371],{"class":319},[19,13092,13093],{},"总结：",[2946,13095,13096,13099,13102,13105],{},[29,13097,13098],{},"c++中程序运行前分为全局区和代码区",[29,13100,13101],{},"代码区特点是共享和只读",[29,13103,13104],{},"全局区中存放全局变量、静态变量、常量",[29,13106,13107],{},"常量区中存放const修饰的全局常量和字符串常量",[387,13109,13111],{"id":13110},"_512程序运行后","5.1.2程序运行后",[26,13113,13114],{},[29,13115,13116],{},"栈区：",[2946,13118,13119,13126],{},[29,13120,13121,13122,13125],{},"由编译器自动分配释放, 存放",[2093,13123,13124],{},"函数的参数值,局部变量","等",[29,13127,13128,13129,13132],{},"注意事项：",[2093,13130,13131],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[154,13134,13136],{"className":1942,"code":13135,"language":1944,"meta":160,"style":160},"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",[70,13137,13138,13149,13153,13168,13180,13184,13188,13196,13201,13216,13234,13251,13261,13269],{"__ignoreMap":160},[178,13139,13140,13142,13144,13147],{"class":180,"line":181},[178,13141,1956],{"class":699},[178,13143,8287],{"class":699},[178,13145,13146],{"class":184}," func",[178,13148,3760],{"class":319},[178,13150,13151],{"class":180,"line":263},[178,13152,3352],{"class":319},[178,13154,13155,13157,13159,13161,13163,13165],{"class":180,"line":274},[178,13156,3769],{"class":699},[178,13158,12630],{"class":319},[178,13160,330],{"class":699},[178,13162,3822],{"class":195},[178,13164,2005],{"class":319},[178,13166,13167],{"class":2008}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[178,13169,13170,13172,13174,13177],{"class":180,"line":354},[178,13171,5862],{"class":699},[178,13173,12345],{"class":699},[178,13175,13176],{"class":319},"a;",[178,13178,13179],{"class":2008}," \u002F\u002F放回局部变量的地址\n",[178,13181,13182],{"class":180,"line":364},[178,13183,3371],{"class":319},[178,13185,13186],{"class":180,"line":740},[178,13187,722],{"emptyLinePlaceholder":721},[178,13189,13190,13192,13194],{"class":180,"line":746},[178,13191,1956],{"class":699},[178,13193,838],{"class":184},[178,13195,12614],{"class":319},[178,13197,13198],{"class":180,"line":752},[178,13199,13200],{"class":2008},"    \u002F\u002F接受func的返回值\n",[178,13202,13203,13205,13207,13210,13212,13214],{"class":180,"line":757},[178,13204,3769],{"class":699},[178,13206,8287],{"class":699},[178,13208,13209],{"class":319},"p ",[178,13211,330],{"class":699},[178,13213,13146],{"class":184},[178,13215,7405],{"class":319},[178,13217,13218,13220,13222,13224,13226,13228,13231],{"class":180,"line":763},[178,13219,8298],{"class":319},[178,13221,2983],{"class":699},[178,13223,8287],{"class":699},[178,13225,13209],{"class":319},[178,13227,2983],{"class":699},[178,13229,13230],{"class":319}," endl;",[178,13232,13233],{"class":2008}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[178,13235,13236,13238,13240,13242,13244,13246,13248],{"class":180,"line":769},[178,13237,8298],{"class":319},[178,13239,2983],{"class":699},[178,13241,8287],{"class":699},[178,13243,13209],{"class":319},[178,13245,2983],{"class":699},[178,13247,13230],{"class":319},[178,13249,13250],{"class":2008}," \u002F\u002F第二次这个数据不再保留\n",[178,13252,13253,13255,13257,13259],{"class":180,"line":774},[178,13254,4087],{"class":184},[178,13256,944],{"class":319},[178,13258,4092],{"class":188},[178,13260,4495],{"class":319},[178,13262,13263,13265,13267],{"class":180,"line":780},[178,13264,5862],{"class":699},[178,13266,930],{"class":195},[178,13268,3100],{"class":319},[178,13270,13271],{"class":180,"line":786},[178,13272,3371],{"class":319},[19,13274,13275],{},"输出结果：",[19,13277,13278],{},[3269,13279],{"alt":13280,"src":13281},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,13283,13284],{},"总结：不要返回局部变量的地址",[26,13286,13287],{"start":263},[29,13288,13289],{},"堆区",[2946,13291,13292,13295],{},[29,13293,13294],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[29,13296,13297],{},"在c++中主要利用new在堆区开辟内存",[154,13299,13301],{"className":1942,"code":13300,"language":1944,"meta":160,"style":160},"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",[70,13302,13303,13318,13322,13327,13348,13355,13359,13367,13371,13376,13390,13402],{"__ignoreMap":160},[178,13304,13305,13307,13310,13313,13315],{"class":180,"line":181},[178,13306,1956],{"class":699},[178,13308,13309],{"class":699},"  *",[178,13311,13312],{"class":184},"func",[178,13314,4210],{"class":319},[178,13316,13317],{"class":2008},"  \u002F\u002F函数返回指针\n",[178,13319,13320],{"class":180,"line":263},[178,13321,3352],{"class":319},[178,13323,13324],{"class":180,"line":274},[178,13325,13326],{"class":2008},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[178,13328,13329,13331,13333,13335,13337,13340,13342,13344,13346],{"class":180,"line":354},[178,13330,5918],{"class":699},[178,13332,8287],{"class":699},[178,13334,19],{"class":319},[178,13336,330],{"class":699},[178,13338,13339],{"class":699}," new",[178,13341,4166],{"class":699},[178,13343,944],{"class":319},[178,13345,2386],{"class":195},[178,13347,4495],{"class":319},[178,13349,13350,13352],{"class":180,"line":364},[178,13351,6152],{"class":699},[178,13353,13354],{"class":319}," p;\n",[178,13356,13357],{"class":180,"line":740},[178,13358,3371],{"class":319},[178,13360,13361,13363,13365],{"class":180,"line":746},[178,13362,1956],{"class":699},[178,13364,838],{"class":184},[178,13366,3760],{"class":319},[178,13368,13369],{"class":180,"line":752},[178,13370,3352],{"class":319},[178,13372,13373],{"class":180,"line":757},[178,13374,13375],{"class":2008},"    \u002F\u002F在堆区开辟数据\n",[178,13377,13378,13380,13382,13384,13386,13388],{"class":180,"line":763},[178,13379,3769],{"class":699},[178,13381,8287],{"class":699},[178,13383,19],{"class":319},[178,13385,330],{"class":699},[178,13387,13312],{"class":184},[178,13389,7405],{"class":319},[178,13391,13392,13394,13396,13398,13400],{"class":180,"line":769},[178,13393,3357],{"class":319},[178,13395,8188],{"class":699},[178,13397,19],{"class":319},[178,13399,2983],{"class":699},[178,13401,3005],{"class":319},[178,13403,13404],{"class":180,"line":774},[178,13405,3371],{"class":319},[19,13407,13408],{},"图片展示：",[19,13410,13411],{},[3269,13412],{"alt":13280,"src":13413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,13415,13416],{},"堆区内存由程序员管生死！！！",[26,13418,13419],{"start":274},[29,13420,13421],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,13423,13424],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,13426,13427,13428],{},"​语法：",[70,13429,13430],{}," new 数据类型",[19,13432,13433],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[154,13435,13437],{"className":1942,"code":13436,"language":1944,"meta":160,"style":160},"\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",[70,13438,13439,13444,13454,13458,13463,13468,13490,13494,13502,13506,13520,13532,13544,13556,13561,13566,13577,13581,13586,13594,13598,13603,13625,13651,13655,13673,13677,13703,13707,13719,13723,13728,13733,13741,13745,13749,13757,13761,13767,13773],{"__ignoreMap":160},[178,13440,13441],{"class":180,"line":181},[178,13442,13443],{"class":2008},"\u002F\u002F1.new的基本语法\n",[178,13445,13446,13448,13450,13452],{"class":180,"line":263},[178,13447,1956],{"class":699},[178,13449,8287],{"class":699},[178,13451,13312],{"class":184},[178,13453,3760],{"class":319},[178,13455,13456],{"class":180,"line":274},[178,13457,3352],{"class":319},[178,13459,13460],{"class":180,"line":354},[178,13461,13462],{"class":2008},"    \u002F\u002F在堆区创建整型数据\n",[178,13464,13465],{"class":180,"line":364},[178,13466,13467],{"class":2008},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[178,13469,13470,13472,13474,13476,13479,13481,13483,13485,13487],{"class":180,"line":740},[178,13471,3769],{"class":699},[178,13473,8287],{"class":699},[178,13475,19],{"class":319},[178,13477,13478],{"class":699},"=new",[178,13480,4166],{"class":699},[178,13482,944],{"class":319},[178,13484,2386],{"class":195},[178,13486,7735],{"class":319},[178,13488,13489],{"class":2008},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[178,13491,13492],{"class":180,"line":746},[178,13493,3371],{"class":319},[178,13495,13496,13498,13500],{"class":180,"line":752},[178,13497,7133],{"class":699},[178,13499,7357],{"class":184},[178,13501,3760],{"class":319},[178,13503,13504],{"class":180,"line":757},[178,13505,3352],{"class":319},[178,13507,13508,13510,13512,13514,13516,13518],{"class":180,"line":763},[178,13509,3769],{"class":699},[178,13511,8287],{"class":699},[178,13513,19],{"class":319},[178,13515,330],{"class":699},[178,13517,13312],{"class":184},[178,13519,7405],{"class":319},[178,13521,13522,13524,13526,13528,13530],{"class":180,"line":769},[178,13523,3357],{"class":319},[178,13525,8188],{"class":699},[178,13527,19],{"class":319},[178,13529,2983],{"class":699},[178,13531,3005],{"class":319},[178,13533,13534,13536,13538,13540,13542],{"class":180,"line":774},[178,13535,3357],{"class":319},[178,13537,8188],{"class":699},[178,13539,19],{"class":319},[178,13541,2983],{"class":699},[178,13543,3005],{"class":319},[178,13545,13546,13548,13550,13552,13554],{"class":180,"line":780},[178,13547,3357],{"class":319},[178,13549,8188],{"class":699},[178,13551,19],{"class":319},[178,13553,2983],{"class":699},[178,13555,3005],{"class":319},[178,13557,13558],{"class":180,"line":786},[178,13559,13560],{"class":2008},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[178,13562,13563],{"class":180,"line":792},[178,13564,13565],{"class":2008},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[178,13567,13568,13571,13574],{"class":180,"line":798},[178,13569,13570],{"class":699},"    delete",[178,13572,13573],{"class":319}," p;",[178,13575,13576],{"class":2008},"\u002F\u002F删除这块地址\n",[178,13578,13579],{"class":180,"line":804},[178,13580,3371],{"class":319},[178,13582,13583],{"class":180,"line":810},[178,13584,13585],{"class":2008},"\u002F\u002F2.在堆区利用new开辟数组\n",[178,13587,13588,13590,13592],{"class":180,"line":816},[178,13589,7133],{"class":699},[178,13591,7426],{"class":184},[178,13593,3760],{"class":319},[178,13595,13596],{"class":180,"line":822},[178,13597,3352],{"class":319},[178,13599,13600],{"class":180,"line":827},[178,13601,13602],{"class":2008},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[178,13604,13605,13607,13609,13611,13613,13615,13617,13619,13622],{"class":180,"line":832},[178,13606,3769],{"class":699},[178,13608,8287],{"class":699},[178,13610,5652],{"class":319},[178,13612,13478],{"class":699},[178,13614,4166],{"class":699},[178,13616,2830],{"class":319},[178,13618,2386],{"class":195},[178,13620,13621],{"class":319},"];",[178,13623,13624],{"class":2008},"\u002F\u002F10代表数组有10个元素\n",[178,13626,13627,13629,13631,13633,13635,13637,13639,13641,13643,13645,13647,13649],{"class":180,"line":850},[178,13628,988],{"class":699},[178,13630,3457],{"class":319},[178,13632,1956],{"class":699},[178,13634,4807],{"class":319},[178,13636,330],{"class":699},[178,13638,2133],{"class":195},[178,13640,4814],{"class":319},[178,13642,320],{"class":699},[178,13644,2386],{"class":195},[178,13646,4814],{"class":319},[178,13648,4076],{"class":699},[178,13650,863],{"class":319},[178,13652,13653],{"class":180,"line":866},[178,13654,3814],{"class":319},[178,13656,13657,13660,13662,13664,13666,13668,13670],{"class":180,"line":877},[178,13658,13659],{"class":319},"        arr[i]",[178,13661,330],{"class":699},[178,13663,2381],{"class":319},[178,13665,2421],{"class":699},[178,13667,2251],{"class":195},[178,13669,2005],{"class":319},[178,13671,13672],{"class":2008},"\u002F\u002F给10个元素赋值100～109\n",[178,13674,13675],{"class":180,"line":882},[178,13676,3971],{"class":319},[178,13678,13679,13681,13683,13685,13687,13689,13691,13693,13695,13697,13699,13701],{"class":180,"line":898},[178,13680,988],{"class":699},[178,13682,3457],{"class":319},[178,13684,1956],{"class":699},[178,13686,4807],{"class":319},[178,13688,330],{"class":699},[178,13690,2133],{"class":195},[178,13692,4814],{"class":319},[178,13694,320],{"class":699},[178,13696,2386],{"class":195},[178,13698,4814],{"class":319},[178,13700,4076],{"class":699},[178,13702,863],{"class":319},[178,13704,13705],{"class":180,"line":914},[178,13706,3814],{"class":319},[178,13708,13709,13711,13713,13715,13717],{"class":180,"line":919},[178,13710,5224],{"class":319},[178,13712,2983],{"class":699},[178,13714,6125],{"class":319},[178,13716,2983],{"class":699},[178,13718,3005],{"class":319},[178,13720,13721],{"class":180,"line":935},[178,13722,3971],{"class":319},[178,13724,13725],{"class":180,"line":952},[178,13726,13727],{"class":2008},"    \u002F\u002F释放堆区数组\n",[178,13729,13730],{"class":180,"line":966},[178,13731,13732],{"class":2008},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[178,13734,13735,13738],{"class":180,"line":980},[178,13736,13737],{"class":699},"    delete[]",[178,13739,13740],{"class":319}," arr;\n",[178,13742,13743],{"class":180,"line":985},[178,13744,3371],{"class":319},[178,13746,13747],{"class":180,"line":1008},[178,13748,722],{"emptyLinePlaceholder":721},[178,13750,13751,13753,13755],{"class":180,"line":1014},[178,13752,1956],{"class":699},[178,13754,838],{"class":184},[178,13756,3760],{"class":319},[178,13758,13759],{"class":180,"line":1019},[178,13760,3352],{"class":319},[178,13762,13763,13765],{"class":180,"line":1033},[178,13764,7402],{"class":184},[178,13766,7405],{"class":319},[178,13768,13769,13771],{"class":180,"line":1046},[178,13770,7471],{"class":184},[178,13772,7405],{"class":319},[178,13774,13775],{"class":180,"line":1059},[178,13776,3371],{"class":319},[1853,13778,13779],{},"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":160,"searchDepth":263,"depth":263,"links":13781},[13782],{"id":12450,"depth":263,"text":12451,"children":13783},[13784,13785],{"id":12482,"depth":274,"text":12483},{"id":13110,"depth":274,"text":13111},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12442,"description":160},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13792,"title":13793,"body":13794,"description":160,"extension":1880,"meta":15275,"navigation":721,"path":15276,"seo":15277,"stem":15278,"__hash__":15279},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13795,"toc":15267},[13796,13799,13803,13806,13809,13978,13982,13987,14004,14009,14161,14165,14168,14171,14565,14569,14572,14577,14580,14892,14896,14902,15062,15064,15072,15076,15079,15086,15264],[10,13797,13793],{"id":13798},"_6引用",[14,13800,13802],{"id":13801},"_61引用基本用法","6.1引用基本用法",[19,13804,13805],{},"引用的本质：给变量起别名",[19,13807,13808],{},"语法：数据类型 &别名=原名",[154,13810,13812],{"className":1942,"code":13811,"language":1944,"meta":160,"style":160},"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",[70,13813,13814,13822,13826,13838,13850,13854,13873,13892,13896,13907,13911,13930,13948,13952,13962,13966,13974],{"__ignoreMap":160},[178,13815,13816,13818,13820],{"class":180,"line":181},[178,13817,1956],{"class":699},[178,13819,838],{"class":184},[178,13821,12614],{"class":319},[178,13823,13824],{"class":180,"line":263},[178,13825,722],{"emptyLinePlaceholder":721},[178,13827,13828,13830,13832,13834,13836],{"class":180,"line":274},[178,13829,3769],{"class":699},[178,13831,12630],{"class":319},[178,13833,330],{"class":699},[178,13835,3822],{"class":195},[178,13837,3100],{"class":319},[178,13839,13840,13842,13844,13846,13848],{"class":180,"line":354},[178,13841,3769],{"class":699},[178,13843,12345],{"class":699},[178,13845,12706],{"class":319},[178,13847,330],{"class":699},[178,13849,3239],{"class":319},[178,13851,13852],{"class":180,"line":364},[178,13853,722],{"emptyLinePlaceholder":721},[178,13855,13856,13858,13860,13863,13865,13867,13869,13871],{"class":180,"line":740},[178,13857,8298],{"class":319},[178,13859,2983],{"class":699},[178,13861,13862],{"class":188}," \"a = \"",[178,13864,3251],{"class":699},[178,13866,12630],{"class":319},[178,13868,2983],{"class":699},[178,13870,13230],{"class":319},[178,13872,9037],{"class":2008},[178,13874,13875,13877,13879,13882,13884,13886,13888,13890],{"class":180,"line":746},[178,13876,8298],{"class":319},[178,13878,2983],{"class":699},[178,13880,13881],{"class":188}," \"b = \"",[178,13883,3251],{"class":699},[178,13885,12643],{"class":319},[178,13887,2983],{"class":699},[178,13889,13230],{"class":319},[178,13891,9037],{"class":2008},[178,13893,13894],{"class":180,"line":752},[178,13895,722],{"emptyLinePlaceholder":721},[178,13897,13898,13901,13903,13905],{"class":180,"line":757},[178,13899,13900],{"class":319},"    b ",[178,13902,330],{"class":699},[178,13904,7523],{"class":195},[178,13906,3100],{"class":319},[178,13908,13909],{"class":180,"line":763},[178,13910,722],{"emptyLinePlaceholder":721},[178,13912,13913,13915,13917,13919,13921,13923,13925,13927],{"class":180,"line":769},[178,13914,8298],{"class":319},[178,13916,2983],{"class":699},[178,13918,13862],{"class":188},[178,13920,3251],{"class":699},[178,13922,12630],{"class":319},[178,13924,2983],{"class":699},[178,13926,13230],{"class":319},[178,13928,13929],{"class":2008},"\u002F\u002F100\n",[178,13931,13932,13934,13936,13938,13940,13942,13944,13946],{"class":180,"line":774},[178,13933,8298],{"class":319},[178,13935,2983],{"class":699},[178,13937,13881],{"class":188},[178,13939,3251],{"class":699},[178,13941,12643],{"class":319},[178,13943,2983],{"class":699},[178,13945,13230],{"class":319},[178,13947,13929],{"class":2008},[178,13949,13950],{"class":180,"line":780},[178,13951,722],{"emptyLinePlaceholder":721},[178,13953,13954,13956,13958,13960],{"class":180,"line":786},[178,13955,4087],{"class":184},[178,13957,944],{"class":319},[178,13959,4092],{"class":188},[178,13961,4495],{"class":319},[178,13963,13964],{"class":180,"line":792},[178,13965,722],{"emptyLinePlaceholder":721},[178,13967,13968,13970,13972],{"class":180,"line":798},[178,13969,5862],{"class":699},[178,13971,930],{"class":195},[178,13973,3100],{"class":319},[178,13975,13976],{"class":180,"line":804},[178,13977,3371],{"class":319},[14,13979,13981],{"id":13980},"_62引用的注意事项","6.2引用的注意事项",[26,13983,13984],{},[29,13985,13986],{},"引用必须要初始化",[154,13988,13990],{"className":1942,"code":13989,"language":1944,"meta":160,"style":160},"int &b;\u002F\u002F非常错误！\n",[70,13991,13992],{"__ignoreMap":160},[178,13993,13994,13996,13998,14001],{"class":180,"line":181},[178,13995,1956],{"class":699},[178,13997,12345],{"class":699},[178,13999,14000],{"class":319},"b;",[178,14002,14003],{"class":2008},"\u002F\u002F非常错误！\n",[26,14005,14006],{"start":263},[29,14007,14008],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[154,14010,14012],{"className":1942,"code":14011,"language":1944,"meta":160,"style":160},"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",[70,14013,14014,14022,14034,14046,14054,14070,14083,14101,14119,14139,14149,14157],{"__ignoreMap":160},[178,14015,14016,14018,14020],{"class":180,"line":181},[178,14017,1956],{"class":699},[178,14019,838],{"class":184},[178,14021,12614],{"class":319},[178,14023,14024,14026,14028,14030,14032],{"class":180,"line":263},[178,14025,3769],{"class":699},[178,14027,12630],{"class":319},[178,14029,330],{"class":699},[178,14031,3822],{"class":195},[178,14033,3100],{"class":319},[178,14035,14036,14038,14040,14042,14044],{"class":180,"line":274},[178,14037,3769],{"class":699},[178,14039,12643],{"class":319},[178,14041,330],{"class":699},[178,14043,10711],{"class":195},[178,14045,3100],{"class":319},[178,14047,14048,14051],{"class":180,"line":354},[178,14049,14050],{"class":2008},"    \u002F\u002Fint &c;",[178,14052,14053],{"class":2008}," \u002F\u002F错误，引用必须初始化\n",[178,14055,14056,14058,14060,14062,14064,14067],{"class":180,"line":364},[178,14057,3769],{"class":699},[178,14059,12345],{"class":699},[178,14061,4722],{"class":319},[178,14063,330],{"class":699},[178,14065,14066],{"class":319}," a;",[178,14068,14069],{"class":2008}," \u002F\u002F一旦初始化后，就不可以更改\n",[178,14071,14072,14075,14077,14080],{"class":180,"line":740},[178,14073,14074],{"class":319},"    c ",[178,14076,330],{"class":699},[178,14078,14079],{"class":319}," b;",[178,14081,14082],{"class":2008}," \u002F\u002F这是赋值操作，不是更改引用\n",[178,14084,14085,14087,14089,14091,14093,14095,14097,14099],{"class":180,"line":746},[178,14086,8298],{"class":319},[178,14088,2983],{"class":699},[178,14090,13862],{"class":188},[178,14092,3251],{"class":699},[178,14094,12630],{"class":319},[178,14096,2983],{"class":699},[178,14098,13230],{"class":319},[178,14100,9022],{"class":2008},[178,14102,14103,14105,14107,14109,14111,14113,14115,14117],{"class":180,"line":752},[178,14104,8298],{"class":319},[178,14106,2983],{"class":699},[178,14108,13881],{"class":188},[178,14110,3251],{"class":699},[178,14112,12643],{"class":319},[178,14114,2983],{"class":699},[178,14116,13230],{"class":319},[178,14118,9022],{"class":2008},[178,14120,14121,14123,14125,14128,14130,14133,14135,14137],{"class":180,"line":757},[178,14122,8298],{"class":319},[178,14124,2983],{"class":699},[178,14126,14127],{"class":188}," \"c = \"",[178,14129,3251],{"class":699},[178,14131,14132],{"class":319}," c ",[178,14134,2983],{"class":699},[178,14136,13230],{"class":319},[178,14138,9022],{"class":2008},[178,14140,14141,14143,14145,14147],{"class":180,"line":763},[178,14142,4087],{"class":184},[178,14144,944],{"class":319},[178,14146,4092],{"class":188},[178,14148,4495],{"class":319},[178,14150,14151,14153,14155],{"class":180,"line":769},[178,14152,5862],{"class":699},[178,14154,930],{"class":195},[178,14156,3100],{"class":319},[178,14158,14159],{"class":180,"line":774},[178,14160,3371],{"class":319},[14,14162,14164],{"id":14163},"_63引用做函数参数","6.3引用做函数参数",[19,14166,14167],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,14169,14170],{},"优点：可以简化指针修改实参",[154,14172,14174],{"className":1942,"code":14173,"language":1944,"meta":160,"style":160},"\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",[70,14175,14176,14181,14204,14215,14225,14234,14238,14242,14247,14269,14281,14293,14303,14307,14311,14316,14338,14348,14356,14364,14368,14372,14380,14384,14396,14408,14412,14423,14449,14453,14473,14497,14501,14511,14535,14539,14549,14553,14561],{"__ignoreMap":160},[178,14177,14178],{"class":180,"line":181},[178,14179,14180],{"class":2008},"\u002F\u002F1. 值传递\n",[178,14182,14183,14185,14188,14190,14192,14194,14197,14199,14201],{"class":180,"line":263},[178,14184,7133],{"class":699},[178,14186,14187],{"class":184}," mySwap01",[178,14189,944],{"class":319},[178,14191,1956],{"class":699},[178,14193,3205],{"class":6985},[178,14195,14196],{"class":319},", ",[178,14198,1956],{"class":699},[178,14200,4609],{"class":6985},[178,14202,14203],{"class":319},") {\n",[178,14205,14206,14208,14211,14213],{"class":180,"line":274},[178,14207,3769],{"class":699},[178,14209,14210],{"class":319}," temp ",[178,14212,330],{"class":699},[178,14214,3239],{"class":319},[178,14216,14217,14220,14222],{"class":180,"line":354},[178,14218,14219],{"class":319},"    a ",[178,14221,330],{"class":699},[178,14223,14224],{"class":319}," b;\n",[178,14226,14227,14229,14231],{"class":180,"line":364},[178,14228,13900],{"class":319},[178,14230,330],{"class":699},[178,14232,14233],{"class":319}," temp;\n",[178,14235,14236],{"class":180,"line":740},[178,14237,3371],{"class":319},[178,14239,14240],{"class":180,"line":746},[178,14241,722],{"emptyLinePlaceholder":721},[178,14243,14244],{"class":180,"line":752},[178,14245,14246],{"class":2008},"\u002F\u002F2. 地址传递\n",[178,14248,14249,14251,14254,14256,14259,14261,14263,14265,14267],{"class":180,"line":757},[178,14250,7133],{"class":699},[178,14252,14253],{"class":184}," mySwap02",[178,14255,944],{"class":319},[178,14257,14258],{"class":699},"int*",[178,14260,3205],{"class":6985},[178,14262,14196],{"class":319},[178,14264,14258],{"class":699},[178,14266,4609],{"class":6985},[178,14268,14203],{"class":319},[178,14270,14271,14273,14275,14277,14279],{"class":180,"line":763},[178,14272,3769],{"class":699},[178,14274,14210],{"class":319},[178,14276,330],{"class":699},[178,14278,8287],{"class":699},[178,14280,7966],{"class":319},[178,14282,14283,14285,14287,14289,14291],{"class":180,"line":769},[178,14284,8172],{"class":699},[178,14286,12680],{"class":319},[178,14288,330],{"class":699},[178,14290,8287],{"class":699},[178,14292,7838],{"class":319},[178,14294,14295,14297,14299,14301],{"class":180,"line":774},[178,14296,8172],{"class":699},[178,14298,12706],{"class":319},[178,14300,330],{"class":699},[178,14302,14233],{"class":319},[178,14304,14305],{"class":180,"line":780},[178,14306,3371],{"class":319},[178,14308,14309],{"class":180,"line":786},[178,14310,722],{"emptyLinePlaceholder":721},[178,14312,14313],{"class":180,"line":792},[178,14314,14315],{"class":2008},"\u002F\u002F3. 引用传递\n",[178,14317,14318,14320,14323,14325,14328,14330,14332,14334,14336],{"class":180,"line":798},[178,14319,7133],{"class":699},[178,14321,14322],{"class":184}," mySwap03",[178,14324,944],{"class":319},[178,14326,14327],{"class":699},"int&",[178,14329,3205],{"class":6985},[178,14331,14196],{"class":319},[178,14333,14327],{"class":699},[178,14335,4609],{"class":6985},[178,14337,14203],{"class":319},[178,14339,14340,14342,14344,14346],{"class":180,"line":804},[178,14341,3769],{"class":699},[178,14343,14210],{"class":319},[178,14345,330],{"class":699},[178,14347,3239],{"class":319},[178,14349,14350,14352,14354],{"class":180,"line":810},[178,14351,14219],{"class":319},[178,14353,330],{"class":699},[178,14355,14224],{"class":319},[178,14357,14358,14360,14362],{"class":180,"line":816},[178,14359,13900],{"class":319},[178,14361,330],{"class":699},[178,14363,14233],{"class":319},[178,14365,14366],{"class":180,"line":822},[178,14367,3371],{"class":319},[178,14369,14370],{"class":180,"line":827},[178,14371,722],{"emptyLinePlaceholder":721},[178,14373,14374,14376,14378],{"class":180,"line":832},[178,14375,1956],{"class":699},[178,14377,838],{"class":184},[178,14379,12614],{"class":319},[178,14381,14382],{"class":180,"line":850},[178,14383,722],{"emptyLinePlaceholder":721},[178,14385,14386,14388,14390,14392,14394],{"class":180,"line":866},[178,14387,3769],{"class":699},[178,14389,12630],{"class":319},[178,14391,330],{"class":699},[178,14393,3822],{"class":195},[178,14395,3100],{"class":319},[178,14397,14398,14400,14402,14404,14406],{"class":180,"line":877},[178,14399,3769],{"class":699},[178,14401,12643],{"class":319},[178,14403,330],{"class":699},[178,14405,10711],{"class":195},[178,14407,3100],{"class":319},[178,14409,14410],{"class":180,"line":882},[178,14411,722],{"emptyLinePlaceholder":721},[178,14413,14414,14417,14420],{"class":180,"line":898},[178,14415,14416],{"class":184},"    mySwap01",[178,14418,14419],{"class":319},"(a, b);",[178,14421,14422],{"class":2008},"\u002F\u002F值传递，形参不会修饰实参\n",[178,14424,14425,14427,14429,14432,14434,14436,14438,14441,14443,14445,14447],{"class":180,"line":914},[178,14426,8298],{"class":319},[178,14428,2983],{"class":699},[178,14430,14431],{"class":188}," \"a:\"",[178,14433,3251],{"class":699},[178,14435,12630],{"class":319},[178,14437,2983],{"class":699},[178,14439,14440],{"class":188}," \" b:\"",[178,14442,3251],{"class":699},[178,14444,12643],{"class":319},[178,14446,2983],{"class":699},[178,14448,10601],{"class":319},[178,14450,14451],{"class":180,"line":919},[178,14452,722],{"emptyLinePlaceholder":721},[178,14454,14455,14458,14460,14462,14465,14467,14470],{"class":180,"line":935},[178,14456,14457],{"class":184},"    mySwap02",[178,14459,944],{"class":319},[178,14461,2293],{"class":699},[178,14463,14464],{"class":319},"a, ",[178,14466,2293],{"class":699},[178,14468,14469],{"class":319},"b);",[178,14471,14472],{"class":2008},"\u002F\u002F地址传递，形参会修饰实参\n",[178,14474,14475,14477,14479,14481,14483,14485,14487,14489,14491,14493,14495],{"class":180,"line":952},[178,14476,8298],{"class":319},[178,14478,2983],{"class":699},[178,14480,14431],{"class":188},[178,14482,3251],{"class":699},[178,14484,12630],{"class":319},[178,14486,2983],{"class":699},[178,14488,14440],{"class":188},[178,14490,3251],{"class":699},[178,14492,12643],{"class":319},[178,14494,2983],{"class":699},[178,14496,10601],{"class":319},[178,14498,14499],{"class":180,"line":966},[178,14500,722],{"emptyLinePlaceholder":721},[178,14502,14503,14506,14508],{"class":180,"line":980},[178,14504,14505],{"class":184},"    mySwap03",[178,14507,14419],{"class":319},[178,14509,14510],{"class":2008},"\u002F\u002F引用传递，形参会修饰实参\n",[178,14512,14513,14515,14517,14519,14521,14523,14525,14527,14529,14531,14533],{"class":180,"line":985},[178,14514,8298],{"class":319},[178,14516,2983],{"class":699},[178,14518,14431],{"class":188},[178,14520,3251],{"class":699},[178,14522,12630],{"class":319},[178,14524,2983],{"class":699},[178,14526,14440],{"class":188},[178,14528,3251],{"class":699},[178,14530,12643],{"class":319},[178,14532,2983],{"class":699},[178,14534,10601],{"class":319},[178,14536,14537],{"class":180,"line":1008},[178,14538,722],{"emptyLinePlaceholder":721},[178,14540,14541,14543,14545,14547],{"class":180,"line":1014},[178,14542,4087],{"class":184},[178,14544,944],{"class":319},[178,14546,4092],{"class":188},[178,14548,4495],{"class":319},[178,14550,14551],{"class":180,"line":1019},[178,14552,722],{"emptyLinePlaceholder":721},[178,14554,14555,14557,14559],{"class":180,"line":1033},[178,14556,5862],{"class":699},[178,14558,930],{"class":195},[178,14560,3100],{"class":319},[178,14562,14563],{"class":180,"line":1046},[178,14564,3371],{"class":319},[14,14566,14568],{"id":14567},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,14570,14571],{},"作用：引用是可以作为函数的返回值存在的",[19,14573,10786,14574],{},[2093,14575,14576],{},"不要返回局部变量引用",[19,14578,14579],{},"用法：函数调用作为左值",[154,14581,14583],{"className":11702,"code":14582,"language":11704,"meta":160,"style":160},"\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",[70,14584,14585,14590,14598,14613,14619,14623,14627,14632,14640,14657,14663,14667,14671,14679,14683,14688,14702,14722,14741,14745,14750,14763,14783,14801,14805,14821,14825,14844,14862,14866,14876,14880,14888],{"__ignoreMap":160},[178,14586,14587],{"class":180,"line":181},[178,14588,14589],{"class":2008},"\u002F\u002F返回局部变量引用\n",[178,14591,14592,14594,14596],{"class":180,"line":263},[178,14593,14327],{"class":699},[178,14595,7357],{"class":184},[178,14597,12614],{"class":319},[178,14599,14600,14602,14604,14606,14608,14610],{"class":180,"line":274},[178,14601,3769],{"class":699},[178,14603,12630],{"class":319},[178,14605,330],{"class":699},[178,14607,3822],{"class":195},[178,14609,2005],{"class":319},[178,14611,14612],{"class":2008}," \u002F\u002F局部变量\n",[178,14614,14615,14617],{"class":180,"line":354},[178,14616,5862],{"class":699},[178,14618,3239],{"class":319},[178,14620,14621],{"class":180,"line":364},[178,14622,3371],{"class":319},[178,14624,14625],{"class":180,"line":740},[178,14626,722],{"emptyLinePlaceholder":721},[178,14628,14629],{"class":180,"line":746},[178,14630,14631],{"class":2008},"\u002F\u002F返回静态变量引用\n",[178,14633,14634,14636,14638],{"class":180,"line":752},[178,14635,14327],{"class":699},[178,14637,7426],{"class":184},[178,14639,12614],{"class":319},[178,14641,14642,14644,14646,14648,14650,14652,14654],{"class":180,"line":757},[178,14643,12781],{"class":699},[178,14645,4166],{"class":699},[178,14647,12630],{"class":319},[178,14649,330],{"class":699},[178,14651,10711],{"class":195},[178,14653,2005],{"class":319},[178,14655,14656],{"class":2008},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[178,14658,14659,14661],{"class":180,"line":763},[178,14660,5862],{"class":699},[178,14662,3239],{"class":319},[178,14664,14665],{"class":180,"line":769},[178,14666,3371],{"class":319},[178,14668,14669],{"class":180,"line":774},[178,14670,722],{"emptyLinePlaceholder":721},[178,14672,14673,14675,14677],{"class":180,"line":780},[178,14674,1956],{"class":699},[178,14676,838],{"class":184},[178,14678,12614],{"class":319},[178,14680,14681],{"class":180,"line":786},[178,14682,722],{"emptyLinePlaceholder":721},[178,14684,14685],{"class":180,"line":792},[178,14686,14687],{"class":2008},"    \u002F\u002F不能返回局部变量的引用\n",[178,14689,14690,14693,14696,14698,14700],{"class":180,"line":798},[178,14691,14692],{"class":699},"    int&",[178,14694,14695],{"class":319}," ref ",[178,14697,330],{"class":699},[178,14699,7357],{"class":184},[178,14701,7405],{"class":319},[178,14703,14704,14706,14708,14711,14713,14715,14717,14719],{"class":180,"line":804},[178,14705,8298],{"class":319},[178,14707,2983],{"class":699},[178,14709,14710],{"class":188}," \"ref = \"",[178,14712,3251],{"class":699},[178,14714,14695],{"class":319},[178,14716,2983],{"class":699},[178,14718,13230],{"class":319},[178,14720,14721],{"class":2008},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[178,14723,14724,14726,14728,14730,14732,14734,14736,14738],{"class":180,"line":810},[178,14725,8298],{"class":319},[178,14727,2983],{"class":699},[178,14729,14710],{"class":188},[178,14731,3251],{"class":699},[178,14733,14695],{"class":319},[178,14735,2983],{"class":699},[178,14737,13230],{"class":319},[178,14739,14740],{"class":2008},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[178,14742,14743],{"class":180,"line":816},[178,14744,722],{"emptyLinePlaceholder":721},[178,14746,14747],{"class":180,"line":822},[178,14748,14749],{"class":2008},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[178,14751,14752,14754,14757,14759,14761],{"class":180,"line":827},[178,14753,14692],{"class":699},[178,14755,14756],{"class":319}," ref2 ",[178,14758,330],{"class":699},[178,14760,7426],{"class":184},[178,14762,7405],{"class":319},[178,14764,14765,14767,14769,14772,14774,14776,14778,14780],{"class":180,"line":832},[178,14766,8298],{"class":319},[178,14768,2983],{"class":699},[178,14770,14771],{"class":188}," \"ref2 = \"",[178,14773,3251],{"class":699},[178,14775,14756],{"class":319},[178,14777,2983],{"class":699},[178,14779,13230],{"class":319},[178,14781,14782],{"class":2008}," \u002F\u002F20\n",[178,14784,14785,14787,14789,14791,14793,14795,14797,14799],{"class":180,"line":850},[178,14786,8298],{"class":319},[178,14788,2983],{"class":699},[178,14790,14771],{"class":188},[178,14792,3251],{"class":699},[178,14794,14756],{"class":319},[178,14796,2983],{"class":699},[178,14798,13230],{"class":319},[178,14800,14782],{"class":2008},[178,14802,14803],{"class":180,"line":866},[178,14804,722],{"emptyLinePlaceholder":721},[178,14806,14807,14809,14812,14814,14816,14818],{"class":180,"line":877},[178,14808,7471],{"class":184},[178,14810,14811],{"class":319},"() ",[178,14813,330],{"class":699},[178,14815,4775],{"class":195},[178,14817,2005],{"class":319},[178,14819,14820],{"class":2008},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[178,14822,14823],{"class":180,"line":882},[178,14824,722],{"emptyLinePlaceholder":721},[178,14826,14827,14829,14831,14833,14835,14837,14839,14841],{"class":180,"line":898},[178,14828,8298],{"class":319},[178,14830,2983],{"class":699},[178,14832,14771],{"class":188},[178,14834,3251],{"class":699},[178,14836,14756],{"class":319},[178,14838,2983],{"class":699},[178,14840,13230],{"class":319},[178,14842,14843],{"class":2008}," \u002F\u002F1000\n",[178,14845,14846,14848,14850,14852,14854,14856,14858,14860],{"class":180,"line":914},[178,14847,8298],{"class":319},[178,14849,2983],{"class":699},[178,14851,14771],{"class":188},[178,14853,3251],{"class":699},[178,14855,14756],{"class":319},[178,14857,2983],{"class":699},[178,14859,13230],{"class":319},[178,14861,14843],{"class":2008},[178,14863,14864],{"class":180,"line":919},[178,14865,722],{"emptyLinePlaceholder":721},[178,14867,14868,14870,14872,14874],{"class":180,"line":935},[178,14869,4087],{"class":184},[178,14871,944],{"class":319},[178,14873,4092],{"class":188},[178,14875,4495],{"class":319},[178,14877,14878],{"class":180,"line":952},[178,14879,722],{"emptyLinePlaceholder":721},[178,14881,14882,14884,14886],{"class":180,"line":966},[178,14883,5862],{"class":699},[178,14885,930],{"class":195},[178,14887,3100],{"class":319},[178,14889,14890],{"class":180,"line":980},[178,14891,3371],{"class":319},[14,14893,14895],{"id":14894},"_65引用的本质","6.5引用的本质",[19,14897,14898,14899],{},"本质：",[2093,14900,14901],{},"引用的本质在c++内部实现是一个指针常量.",[154,14903,14905],{"className":1942,"code":14904,"language":1944,"meta":160,"style":160},"\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",[70,14906,14907,14912,14928,14942,14946,14955,14967,14972,14977,14988,15001,15005,15021,15038,15042,15050,15058],{"__ignoreMap":160},[178,14908,14909],{"class":180,"line":181},[178,14910,14911],{"class":2008},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[178,14913,14914,14916,14918,14920,14922,14925],{"class":180,"line":263},[178,14915,7133],{"class":699},[178,14917,13146],{"class":184},[178,14919,944],{"class":319},[178,14921,14327],{"class":699},[178,14923,14924],{"class":6985}," ref",[178,14926,14927],{"class":319},"){\n",[178,14929,14930,14933,14935,14937,14939],{"class":180,"line":274},[178,14931,14932],{"class":319},"    ref ",[178,14934,330],{"class":699},[178,14936,7523],{"class":195},[178,14938,2005],{"class":319},[178,14940,14941],{"class":2008}," \u002F\u002F ref是引用，转换为*ref = 100\n",[178,14943,14944],{"class":180,"line":354},[178,14945,3371],{"class":319},[178,14947,14948,14950,14952],{"class":180,"line":364},[178,14949,1956],{"class":699},[178,14951,838],{"class":184},[178,14953,14954],{"class":319},"(){\n",[178,14956,14957,14959,14961,14963,14965],{"class":180,"line":740},[178,14958,3769],{"class":699},[178,14960,12630],{"class":319},[178,14962,330],{"class":699},[178,14964,3822],{"class":195},[178,14966,3100],{"class":319},[178,14968,14969],{"class":180,"line":746},[178,14970,14971],{"class":319},"    \n",[178,14973,14974],{"class":180,"line":752},[178,14975,14976],{"class":2008},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[178,14978,14979,14981,14983,14985],{"class":180,"line":757},[178,14980,14692],{"class":699},[178,14982,14695],{"class":319},[178,14984,330],{"class":699},[178,14986,14987],{"class":319}," a; \n",[178,14989,14990,14992,14994,14996,14998],{"class":180,"line":763},[178,14991,14932],{"class":319},[178,14993,330],{"class":699},[178,14995,10711],{"class":195},[178,14997,2005],{"class":319},[178,14999,15000],{"class":2008}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[178,15002,15003],{"class":180,"line":769},[178,15004,14971],{"class":319},[178,15006,15007,15009,15011,15013,15015,15017,15019],{"class":180,"line":774},[178,15008,8298],{"class":319},[178,15010,2983],{"class":699},[178,15012,14431],{"class":188},[178,15014,3251],{"class":699},[178,15016,12630],{"class":319},[178,15018,2983],{"class":699},[178,15020,10601],{"class":319},[178,15022,15023,15025,15027,15030,15032,15034,15036],{"class":180,"line":780},[178,15024,8298],{"class":319},[178,15026,2983],{"class":699},[178,15028,15029],{"class":188}," \"ref:\"",[178,15031,3251],{"class":699},[178,15033,14695],{"class":319},[178,15035,2983],{"class":699},[178,15037,10601],{"class":319},[178,15039,15040],{"class":180,"line":786},[178,15041,14971],{"class":319},[178,15043,15044,15047],{"class":180,"line":792},[178,15045,15046],{"class":184},"    func",[178,15048,15049],{"class":319},"(a);\n",[178,15051,15052,15054,15056],{"class":180,"line":798},[178,15053,5862],{"class":699},[178,15055,930],{"class":195},[178,15057,3100],{"class":319},[178,15059,15060],{"class":180,"line":804},[178,15061,3371],{"class":319},[19,15063,13093],{},[26,15065,15066,15069],{},[29,15067,15068],{},"引用的本质，就是一个指针常量",[29,15070,15071],{},"引用一旦初始化，就不可以发生改变",[14,15073,15075],{"id":15074},"_66常量引用","6.6常量引用",[19,15077,15078],{},"作用：常量引用主要用来修饰形参",[19,15080,15081,15082,15085],{},"在函数形参列表中，可以加",[2093,15083,15084],{},"const修饰形参","，防止形参改变实参",[154,15087,15089],{"className":1942,"code":15088,"language":1944,"meta":160,"style":160},"\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",[70,15090,15091,15096,15101,15120,15125,15138,15142,15146,15154,15158,15163,15168,15182,15186,15194,15206,15210,15215,15227,15234,15238,15248,15252,15260],{"__ignoreMap":160},[178,15092,15093],{"class":180,"line":181},[178,15094,15095],{"class":2008},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[178,15097,15098],{"class":180,"line":263},[178,15099,15100],{"class":2008},"\u002F\u002F加上const就不能修改实参的\n",[178,15102,15103,15105,15108,15110,15112,15115,15118],{"class":180,"line":274},[178,15104,7133],{"class":699},[178,15106,15107],{"class":184}," showValue",[178,15109,944],{"class":319},[178,15111,8561],{"class":699},[178,15113,15114],{"class":699}," int&",[178,15116,15117],{"class":6985}," v",[178,15119,14203],{"class":319},[178,15121,15122],{"class":180,"line":354},[178,15123,15124],{"class":2008},"    \u002F\u002Fv += 100;\n",[178,15126,15127,15129,15131,15134,15136],{"class":180,"line":364},[178,15128,8298],{"class":319},[178,15130,2983],{"class":699},[178,15132,15133],{"class":319}," v ",[178,15135,2983],{"class":699},[178,15137,10601],{"class":319},[178,15139,15140],{"class":180,"line":740},[178,15141,3371],{"class":319},[178,15143,15144],{"class":180,"line":746},[178,15145,722],{"emptyLinePlaceholder":721},[178,15147,15148,15150,15152],{"class":180,"line":752},[178,15149,1956],{"class":699},[178,15151,838],{"class":184},[178,15153,12614],{"class":319},[178,15155,15156],{"class":180,"line":757},[178,15157,722],{"emptyLinePlaceholder":721},[178,15159,15160],{"class":180,"line":763},[178,15161,15162],{"class":2008},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[178,15164,15165],{"class":180,"line":769},[178,15166,15167],{"class":2008},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[178,15169,15170,15172,15174,15176,15178,15180],{"class":180,"line":774},[178,15171,12982],{"class":699},[178,15173,15114],{"class":699},[178,15175,14695],{"class":319},[178,15177,330],{"class":699},[178,15179,3822],{"class":195},[178,15181,3100],{"class":319},[178,15183,15184],{"class":180,"line":780},[178,15185,722],{"emptyLinePlaceholder":721},[178,15187,15188,15191],{"class":180,"line":786},[178,15189,15190],{"class":2008},"    \u002F\u002Fref = 100;",[178,15192,15193],{"class":2008},"  \u002F\u002F加入const后不可以修改变量\n",[178,15195,15196,15198,15200,15202,15204],{"class":180,"line":792},[178,15197,8298],{"class":319},[178,15199,2983],{"class":699},[178,15201,14695],{"class":319},[178,15203,2983],{"class":699},[178,15205,10601],{"class":319},[178,15207,15208],{"class":180,"line":798},[178,15209,722],{"emptyLinePlaceholder":721},[178,15211,15212],{"class":180,"line":804},[178,15213,15214],{"class":2008},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[178,15216,15217,15219,15221,15223,15225],{"class":180,"line":810},[178,15218,3769],{"class":699},[178,15220,12630],{"class":319},[178,15222,330],{"class":699},[178,15224,3822],{"class":195},[178,15226,3100],{"class":319},[178,15228,15229,15232],{"class":180,"line":816},[178,15230,15231],{"class":184},"    showValue",[178,15233,15049],{"class":319},[178,15235,15236],{"class":180,"line":822},[178,15237,722],{"emptyLinePlaceholder":721},[178,15239,15240,15242,15244,15246],{"class":180,"line":827},[178,15241,4087],{"class":184},[178,15243,944],{"class":319},[178,15245,4092],{"class":188},[178,15247,4495],{"class":319},[178,15249,15250],{"class":180,"line":832},[178,15251,722],{"emptyLinePlaceholder":721},[178,15253,15254,15256,15258],{"class":180,"line":850},[178,15255,5862],{"class":699},[178,15257,930],{"class":195},[178,15259,3100],{"class":319},[178,15261,15262],{"class":180,"line":866},[178,15263,3371],{"class":319},[1853,15265,15266],{},"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":160,"searchDepth":263,"depth":263,"links":15268},[15269,15270,15271,15272,15273,15274],{"id":13801,"depth":263,"text":13802},{"id":13980,"depth":263,"text":13981},{"id":14163,"depth":263,"text":14164},{"id":14567,"depth":263,"text":14568},{"id":14894,"depth":263,"text":14895},{"id":15074,"depth":263,"text":15075},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13793,"description":160},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15281,"title":15282,"body":15283,"description":160,"extension":1880,"meta":16363,"navigation":721,"path":16364,"seo":16365,"stem":16366,"__hash__":16367},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15284,"toc":16355},[15285,15288,15292,15295,15300,15531,15533,15544,15548,15551,15559,15663,15666,15670,15673,15677,15680,15685,15707,15713,16040,16043,16047,16055,16352],[10,15286,15282],{"id":15287},"_7函数高级部分",[14,15289,15291],{"id":15290},"_71函数默认参数","7.1函数默认参数",[19,15293,15294],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,15296,6952,15297],{},[70,15298,15299],{}," 返回值类型  函数名 （参数= 默认值）{}",[154,15301,15303],{"className":1942,"code":15302,"language":1944,"meta":160,"style":160},"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",[70,15304,15305,15339,15354,15358,15362,15367,15372,15401,15421,15431,15435,15439,15447,15451,15479,15501,15505,15515,15519,15527],{"__ignoreMap":160},[178,15306,15307,15309,15311,15313,15315,15317,15319,15321,15323,15325,15327,15329,15331,15333,15335,15337],{"class":180,"line":181},[178,15308,1956],{"class":699},[178,15310,13146],{"class":184},[178,15312,944],{"class":319},[178,15314,1956],{"class":699},[178,15316,3205],{"class":6985},[178,15318,14196],{"class":319},[178,15320,1956],{"class":699},[178,15322,4609],{"class":6985},[178,15324,734],{"class":699},[178,15326,3822],{"class":195},[178,15328,14196],{"class":319},[178,15330,1956],{"class":699},[178,15332,4625],{"class":6985},[178,15334,734],{"class":699},[178,15336,3822],{"class":195},[178,15338,14203],{"class":319},[178,15340,15341,15343,15345,15347,15349,15351],{"class":180,"line":263},[178,15342,5862],{"class":699},[178,15344,12630],{"class":319},[178,15346,2421],{"class":699},[178,15348,12643],{"class":319},[178,15350,2421],{"class":699},[178,15352,15353],{"class":319}," c;\n",[178,15355,15356],{"class":180,"line":274},[178,15357,3371],{"class":319},[178,15359,15360],{"class":180,"line":354},[178,15361,722],{"emptyLinePlaceholder":721},[178,15363,15364],{"class":180,"line":364},[178,15365,15366],{"class":2008},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[178,15368,15369],{"class":180,"line":740},[178,15370,15371],{"class":2008},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[178,15373,15374,15376,15379,15381,15383,15385,15387,15389,15391,15393,15395,15397,15399],{"class":180,"line":746},[178,15375,1956],{"class":699},[178,15377,15378],{"class":184}," func2",[178,15380,944],{"class":319},[178,15382,1956],{"class":699},[178,15384,3205],{"class":6985},[178,15386,734],{"class":699},[178,15388,3822],{"class":195},[178,15390,14196],{"class":319},[178,15392,1956],{"class":699},[178,15394,4609],{"class":6985},[178,15396,734],{"class":699},[178,15398,3822],{"class":195},[178,15400,4495],{"class":319},[178,15402,15403,15405,15407,15409,15411,15413,15415,15417,15419],{"class":180,"line":752},[178,15404,1956],{"class":699},[178,15406,15378],{"class":184},[178,15408,944],{"class":319},[178,15410,1956],{"class":699},[178,15412,3205],{"class":6985},[178,15414,14196],{"class":319},[178,15416,1956],{"class":699},[178,15418,4609],{"class":6985},[178,15420,14203],{"class":319},[178,15422,15423,15425,15427,15429],{"class":180,"line":757},[178,15424,5862],{"class":699},[178,15426,12630],{"class":319},[178,15428,2421],{"class":699},[178,15430,14224],{"class":319},[178,15432,15433],{"class":180,"line":763},[178,15434,3371],{"class":319},[178,15436,15437],{"class":180,"line":769},[178,15438,722],{"emptyLinePlaceholder":721},[178,15440,15441,15443,15445],{"class":180,"line":774},[178,15442,1956],{"class":699},[178,15444,838],{"class":184},[178,15446,12614],{"class":319},[178,15448,15449],{"class":180,"line":780},[178,15450,722],{"emptyLinePlaceholder":721},[178,15452,15453,15455,15457,15460,15462,15464,15466,15468,15470,15472,15475,15477],{"class":180,"line":786},[178,15454,8298],{"class":319},[178,15456,2983],{"class":699},[178,15458,15459],{"class":188}," \"ret = \"",[178,15461,3251],{"class":699},[178,15463,13146],{"class":184},[178,15465,944],{"class":319},[178,15467,2640],{"class":195},[178,15469,14196],{"class":319},[178,15471,2640],{"class":195},[178,15473,15474],{"class":319},") ",[178,15476,2983],{"class":699},[178,15478,10601],{"class":319},[178,15480,15481,15483,15485,15487,15489,15491,15493,15495,15497,15499],{"class":180,"line":792},[178,15482,8298],{"class":319},[178,15484,2983],{"class":699},[178,15486,15459],{"class":188},[178,15488,3251],{"class":699},[178,15490,13146],{"class":184},[178,15492,944],{"class":319},[178,15494,2251],{"class":195},[178,15496,15474],{"class":319},[178,15498,2983],{"class":699},[178,15500,10601],{"class":319},[178,15502,15503],{"class":180,"line":798},[178,15504,722],{"emptyLinePlaceholder":721},[178,15506,15507,15509,15511,15513],{"class":180,"line":804},[178,15508,4087],{"class":184},[178,15510,944],{"class":319},[178,15512,4092],{"class":188},[178,15514,4495],{"class":319},[178,15516,15517],{"class":180,"line":810},[178,15518,722],{"emptyLinePlaceholder":721},[178,15520,15521,15523,15525],{"class":180,"line":816},[178,15522,5862],{"class":699},[178,15524,930],{"class":195},[178,15526,3100],{"class":319},[178,15528,15529],{"class":180,"line":822},[178,15530,3371],{"class":319},[19,15532,13093],{},[26,15534,15535,15538,15541],{},[29,15536,15537],{},"我传就用我；没传就用你",[29,15539,15540],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[29,15542,15543],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15545,15547],{"id":15546},"_72函数的占位参数","7.2函数的占位参数",[19,15549,15550],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,15552,15553,15555,15556],{},[2093,15554,6952],{}," ",[70,15557,15558],{},"返回值类型 函数名 (数据类型){}",[154,15560,15562],{"className":1942,"code":15561,"language":1944,"meta":160,"style":160},"\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",[70,15563,15564,15569,15587,15600,15604,15612,15616,15633,15637,15647,15651,15659],{"__ignoreMap":160},[178,15565,15566],{"class":180,"line":181},[178,15567,15568],{"class":2008},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[178,15570,15571,15573,15575,15577,15579,15581,15583,15585],{"class":180,"line":263},[178,15572,7133],{"class":699},[178,15574,13146],{"class":184},[178,15576,944],{"class":319},[178,15578,1956],{"class":699},[178,15580,3205],{"class":6985},[178,15582,14196],{"class":319},[178,15584,1956],{"class":699},[178,15586,14203],{"class":319},[178,15588,15589,15591,15593,15596,15598],{"class":180,"line":274},[178,15590,8298],{"class":319},[178,15592,2983],{"class":699},[178,15594,15595],{"class":188}," \"this is func\"",[178,15597,3251],{"class":699},[178,15599,10601],{"class":319},[178,15601,15602],{"class":180,"line":354},[178,15603,3371],{"class":319},[178,15605,15606,15608,15610],{"class":180,"line":364},[178,15607,1956],{"class":699},[178,15609,838],{"class":184},[178,15611,12614],{"class":319},[178,15613,15614],{"class":180,"line":740},[178,15615,722],{"emptyLinePlaceholder":721},[178,15617,15618,15620,15622,15624,15626,15628,15630],{"class":180,"line":746},[178,15619,15046],{"class":184},[178,15621,944],{"class":319},[178,15623,2386],{"class":195},[178,15625,2318],{"class":319},[178,15627,2386],{"class":195},[178,15629,7735],{"class":319},[178,15631,15632],{"class":2008}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[178,15634,15635],{"class":180,"line":752},[178,15636,722],{"emptyLinePlaceholder":721},[178,15638,15639,15641,15643,15645],{"class":180,"line":757},[178,15640,4087],{"class":184},[178,15642,944],{"class":319},[178,15644,4092],{"class":188},[178,15646,4495],{"class":319},[178,15648,15649],{"class":180,"line":763},[178,15650,722],{"emptyLinePlaceholder":721},[178,15652,15653,15655,15657],{"class":180,"line":769},[178,15654,5862],{"class":699},[178,15656,930],{"class":195},[178,15658,3100],{"class":319},[178,15660,15661],{"class":180,"line":774},[178,15662,3371],{"class":319},[19,15664,15665],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15667,15669],{"id":15668},"_73函数重载","7.3函数重载",[19,15671,15672],{},"意思是函数名是可以相同的",[387,15674,15676],{"id":15675},"_731基本语法","7.3.1基本语法",[19,15678,15679],{},"作用：函数名可以相同，提高复用性",[19,15681,15682],{},[2093,15683,15684],{},"函数重载满足条件：",[2946,15686,15687,15690,15693],{},[29,15688,15689],{},"同一个作用域下",[29,15691,15692],{},"函数名称相同",[29,15694,15695,15696,15699,15700,15703,15704],{},"函数参数",[2093,15697,15698],{},"类型不同","  或者 ",[2093,15701,15702],{},"个数不同"," 或者 ",[2093,15705,15706],{},"顺序不同",[19,15708,15709,15712],{},[2093,15710,15711],{},"注意:","  函数的返回值不可以作为函数重载的条件",[154,15714,15716],{"className":11702,"code":15715,"language":11704,"meta":160,"style":160},"\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",[70,15717,15718,15723,15731,15735,15748,15752,15766,15770,15783,15787,15802,15806,15819,15823,15844,15848,15861,15865,15885,15889,15902,15906,15910,15915,15920,15925,15930,15935,15939,15943,15951,15955,15961,15971,15981,15995,16010,16014,16024,16028,16036],{"__ignoreMap":160},[178,15719,15720],{"class":180,"line":181},[178,15721,15722],{"class":2008},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[178,15724,15725,15727,15729],{"class":180,"line":263},[178,15726,7133],{"class":699},[178,15728,13146],{"class":184},[178,15730,3760],{"class":319},[178,15732,15733],{"class":180,"line":274},[178,15734,3352],{"class":319},[178,15736,15737,15739,15741,15744,15746],{"class":180,"line":354},[178,15738,8298],{"class":319},[178,15740,2983],{"class":699},[178,15742,15743],{"class":188}," \"func 的调用！\"",[178,15745,3251],{"class":699},[178,15747,10601],{"class":319},[178,15749,15750],{"class":180,"line":364},[178,15751,3371],{"class":319},[178,15753,15754,15756,15758,15760,15762,15764],{"class":180,"line":740},[178,15755,7133],{"class":699},[178,15757,13146],{"class":184},[178,15759,944],{"class":319},[178,15761,1956],{"class":699},[178,15763,3205],{"class":6985},[178,15765,863],{"class":319},[178,15767,15768],{"class":180,"line":746},[178,15769,3352],{"class":319},[178,15771,15772,15774,15776,15779,15781],{"class":180,"line":752},[178,15773,8298],{"class":319},[178,15775,2983],{"class":699},[178,15777,15778],{"class":188}," \"func (int a) 的调用！\"",[178,15780,3251],{"class":699},[178,15782,10601],{"class":319},[178,15784,15785],{"class":180,"line":757},[178,15786,3371],{"class":319},[178,15788,15789,15791,15793,15795,15798,15800],{"class":180,"line":763},[178,15790,7133],{"class":699},[178,15792,13146],{"class":184},[178,15794,944],{"class":319},[178,15796,15797],{"class":699},"double",[178,15799,3205],{"class":6985},[178,15801,863],{"class":319},[178,15803,15804],{"class":180,"line":769},[178,15805,3352],{"class":319},[178,15807,15808,15810,15812,15815,15817],{"class":180,"line":774},[178,15809,8298],{"class":319},[178,15811,2983],{"class":699},[178,15813,15814],{"class":188}," \"func (double a)的调用！\"",[178,15816,3251],{"class":699},[178,15818,10601],{"class":319},[178,15820,15821],{"class":180,"line":780},[178,15822,3371],{"class":319},[178,15824,15825,15827,15829,15831,15833,15835,15838,15840,15842],{"class":180,"line":786},[178,15826,7133],{"class":699},[178,15828,13146],{"class":184},[178,15830,944],{"class":319},[178,15832,1956],{"class":699},[178,15834,3205],{"class":6985},[178,15836,15837],{"class":319}," ,",[178,15839,15797],{"class":699},[178,15841,4609],{"class":6985},[178,15843,863],{"class":319},[178,15845,15846],{"class":180,"line":792},[178,15847,3352],{"class":319},[178,15849,15850,15852,15854,15857,15859],{"class":180,"line":798},[178,15851,8298],{"class":319},[178,15853,2983],{"class":699},[178,15855,15856],{"class":188}," \"func (int a ,double b) 的调用！\"",[178,15858,3251],{"class":699},[178,15860,10601],{"class":319},[178,15862,15863],{"class":180,"line":804},[178,15864,3371],{"class":319},[178,15866,15867,15869,15871,15873,15875,15877,15879,15881,15883],{"class":180,"line":810},[178,15868,7133],{"class":699},[178,15870,13146],{"class":184},[178,15872,944],{"class":319},[178,15874,15797],{"class":699},[178,15876,3205],{"class":6985},[178,15878,15837],{"class":319},[178,15880,1956],{"class":699},[178,15882,4609],{"class":6985},[178,15884,863],{"class":319},[178,15886,15887],{"class":180,"line":816},[178,15888,3352],{"class":319},[178,15890,15891,15893,15895,15898,15900],{"class":180,"line":822},[178,15892,8298],{"class":319},[178,15894,2983],{"class":699},[178,15896,15897],{"class":188}," \"func (double a ,int b)的调用！\"",[178,15899,3251],{"class":699},[178,15901,10601],{"class":319},[178,15903,15904],{"class":180,"line":827},[178,15905,3371],{"class":319},[178,15907,15908],{"class":180,"line":832},[178,15909,722],{"emptyLinePlaceholder":721},[178,15911,15912],{"class":180,"line":850},[178,15913,15914],{"class":2008},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[178,15916,15917],{"class":180,"line":866},[178,15918,15919],{"class":2008},"\u002F\u002Fint func(double a, int b)\n",[178,15921,15922],{"class":180,"line":877},[178,15923,15924],{"class":2008},"\u002F\u002F{\n",[178,15926,15927],{"class":180,"line":882},[178,15928,15929],{"class":2008},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[178,15931,15932],{"class":180,"line":898},[178,15933,15934],{"class":2008},"\u002F\u002F}\n",[178,15936,15937],{"class":180,"line":914},[178,15938,722],{"emptyLinePlaceholder":721},[178,15940,15941],{"class":180,"line":919},[178,15942,722],{"emptyLinePlaceholder":721},[178,15944,15945,15947,15949],{"class":180,"line":935},[178,15946,1956],{"class":699},[178,15948,838],{"class":184},[178,15950,12614],{"class":319},[178,15952,15953],{"class":180,"line":952},[178,15954,722],{"emptyLinePlaceholder":721},[178,15956,15957,15959],{"class":180,"line":966},[178,15958,15046],{"class":184},[178,15960,7405],{"class":319},[178,15962,15963,15965,15967,15969],{"class":180,"line":980},[178,15964,15046],{"class":184},[178,15966,944],{"class":319},[178,15968,2386],{"class":195},[178,15970,4495],{"class":319},[178,15972,15973,15975,15977,15979],{"class":180,"line":985},[178,15974,15046],{"class":184},[178,15976,944],{"class":319},[178,15978,1999],{"class":195},[178,15980,4495],{"class":319},[178,15982,15983,15985,15987,15989,15991,15993],{"class":180,"line":1008},[178,15984,15046],{"class":184},[178,15986,944],{"class":319},[178,15988,2386],{"class":195},[178,15990,2318],{"class":319},[178,15992,1999],{"class":195},[178,15994,4495],{"class":319},[178,15996,15997,15999,16001,16003,16006,16008],{"class":180,"line":1014},[178,15998,15046],{"class":184},[178,16000,944],{"class":319},[178,16002,1999],{"class":195},[178,16004,16005],{"class":319}," , ",[178,16007,2386],{"class":195},[178,16009,4495],{"class":319},[178,16011,16012],{"class":180,"line":1019},[178,16013,14971],{"class":319},[178,16015,16016,16018,16020,16022],{"class":180,"line":1033},[178,16017,4087],{"class":184},[178,16019,944],{"class":319},[178,16021,4092],{"class":188},[178,16023,4495],{"class":319},[178,16025,16026],{"class":180,"line":1046},[178,16027,722],{"emptyLinePlaceholder":721},[178,16029,16030,16032,16034],{"class":180,"line":1059},[178,16031,5862],{"class":699},[178,16033,930],{"class":195},[178,16035,3100],{"class":319},[178,16037,16038],{"class":180,"line":1072},[178,16039,3371],{"class":319},[19,16041,16042],{},"重点：函数返回值不可以作为函数重载条件！",[387,16044,16046],{"id":16045},"_732注意事项","7.3.2注意事项",[2946,16048,16049,16052],{},[29,16050,16051],{},"引用作为重载条件!!!",[29,16053,16054],{},"函数重载碰到函数默认参数",[154,16056,16058],{"className":1942,"code":16057,"language":1944,"meta":160,"style":160},"\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",[70,16059,16060,16065,16070,16074,16090,16094,16107,16111,16115,16133,16137,16150,16154,16158,16162,16167,16171,16195,16199,16212,16216,16220,16234,16238,16251,16255,16259,16267,16271,16283,16293,16306,16310,16314,16322,16326,16336,16340,16348],{"__ignoreMap":160},[178,16061,16062],{"class":180,"line":181},[178,16063,16064],{"class":2008},"\u002F\u002F函数重载注意事项\n",[178,16066,16067],{"class":180,"line":263},[178,16068,16069],{"class":2008},"\u002F\u002F1、引用作为重载条件\n",[178,16071,16072],{"class":180,"line":274},[178,16073,722],{"emptyLinePlaceholder":721},[178,16075,16076,16078,16080,16082,16084,16086,16088],{"class":180,"line":354},[178,16077,7133],{"class":699},[178,16079,13146],{"class":184},[178,16081,944],{"class":319},[178,16083,1956],{"class":699},[178,16085,12345],{"class":699},[178,16087,2178],{"class":6985},[178,16089,863],{"class":319},[178,16091,16092],{"class":180,"line":364},[178,16093,3352],{"class":319},[178,16095,16096,16098,16100,16103,16105],{"class":180,"line":740},[178,16097,8298],{"class":319},[178,16099,2983],{"class":699},[178,16101,16102],{"class":188}," \"func (int &a) 调用 \"",[178,16104,3251],{"class":699},[178,16106,10601],{"class":319},[178,16108,16109],{"class":180,"line":746},[178,16110,3371],{"class":319},[178,16112,16113],{"class":180,"line":752},[178,16114,722],{"emptyLinePlaceholder":721},[178,16116,16117,16119,16121,16123,16125,16127,16129,16131],{"class":180,"line":757},[178,16118,7133],{"class":699},[178,16120,13146],{"class":184},[178,16122,944],{"class":319},[178,16124,8561],{"class":699},[178,16126,4166],{"class":699},[178,16128,12345],{"class":699},[178,16130,2178],{"class":6985},[178,16132,863],{"class":319},[178,16134,16135],{"class":180,"line":763},[178,16136,3352],{"class":319},[178,16138,16139,16141,16143,16146,16148],{"class":180,"line":769},[178,16140,8298],{"class":319},[178,16142,2983],{"class":699},[178,16144,16145],{"class":188}," \"func (const int &a) 调用 \"",[178,16147,3251],{"class":699},[178,16149,10601],{"class":319},[178,16151,16152],{"class":180,"line":774},[178,16153,3371],{"class":319},[178,16155,16156],{"class":180,"line":780},[178,16157,722],{"emptyLinePlaceholder":721},[178,16159,16160],{"class":180,"line":786},[178,16161,722],{"emptyLinePlaceholder":721},[178,16163,16164],{"class":180,"line":792},[178,16165,16166],{"class":2008},"\u002F\u002F2、函数重载碰到函数默认参数\n",[178,16168,16169],{"class":180,"line":798},[178,16170,722],{"emptyLinePlaceholder":721},[178,16172,16173,16175,16177,16179,16181,16183,16185,16187,16189,16191,16193],{"class":180,"line":804},[178,16174,7133],{"class":699},[178,16176,15378],{"class":184},[178,16178,944],{"class":319},[178,16180,1956],{"class":699},[178,16182,3205],{"class":6985},[178,16184,14196],{"class":319},[178,16186,1956],{"class":699},[178,16188,4609],{"class":6985},[178,16190,734],{"class":699},[178,16192,3822],{"class":195},[178,16194,863],{"class":319},[178,16196,16197],{"class":180,"line":810},[178,16198,3352],{"class":319},[178,16200,16201,16203,16205,16208,16210],{"class":180,"line":816},[178,16202,8298],{"class":319},[178,16204,2983],{"class":699},[178,16206,16207],{"class":188}," \"func2(int a, int b = 10) 调用\"",[178,16209,3251],{"class":699},[178,16211,10601],{"class":319},[178,16213,16214],{"class":180,"line":822},[178,16215,3371],{"class":319},[178,16217,16218],{"class":180,"line":827},[178,16219,722],{"emptyLinePlaceholder":721},[178,16221,16222,16224,16226,16228,16230,16232],{"class":180,"line":832},[178,16223,7133],{"class":699},[178,16225,15378],{"class":184},[178,16227,944],{"class":319},[178,16229,1956],{"class":699},[178,16231,3205],{"class":6985},[178,16233,863],{"class":319},[178,16235,16236],{"class":180,"line":850},[178,16237,3352],{"class":319},[178,16239,16240,16242,16244,16247,16249],{"class":180,"line":866},[178,16241,8298],{"class":319},[178,16243,2983],{"class":699},[178,16245,16246],{"class":188}," \"func2(int a) 调用\"",[178,16248,3251],{"class":699},[178,16250,10601],{"class":319},[178,16252,16253],{"class":180,"line":877},[178,16254,3371],{"class":319},[178,16256,16257],{"class":180,"line":882},[178,16258,722],{"emptyLinePlaceholder":721},[178,16260,16261,16263,16265],{"class":180,"line":898},[178,16262,1956],{"class":699},[178,16264,838],{"class":184},[178,16266,12614],{"class":319},[178,16268,16269],{"class":180,"line":914},[178,16270,14971],{"class":319},[178,16272,16273,16275,16277,16279,16281],{"class":180,"line":919},[178,16274,3769],{"class":699},[178,16276,12630],{"class":319},[178,16278,330],{"class":699},[178,16280,3822],{"class":195},[178,16282,3100],{"class":319},[178,16284,16285,16287,16290],{"class":180,"line":935},[178,16286,15046],{"class":184},[178,16288,16289],{"class":319},"(a);",[178,16291,16292],{"class":2008}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[178,16294,16295,16297,16299,16301,16303],{"class":180,"line":952},[178,16296,15046],{"class":184},[178,16298,944],{"class":319},[178,16300,2386],{"class":195},[178,16302,7735],{"class":319},[178,16304,16305],{"class":2008},"\u002F\u002F调用有const   10是个常量\n",[178,16307,16308],{"class":180,"line":966},[178,16309,722],{"emptyLinePlaceholder":721},[178,16311,16312],{"class":180,"line":980},[178,16313,722],{"emptyLinePlaceholder":721},[178,16315,16316,16319],{"class":180,"line":985},[178,16317,16318],{"class":2008},"    \u002F\u002Ffunc2(10);",[178,16320,16321],{"class":2008}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[178,16323,16324],{"class":180,"line":1008},[178,16325,722],{"emptyLinePlaceholder":721},[178,16327,16328,16330,16332,16334],{"class":180,"line":1014},[178,16329,4087],{"class":184},[178,16331,944],{"class":319},[178,16333,4092],{"class":188},[178,16335,4495],{"class":319},[178,16337,16338],{"class":180,"line":1019},[178,16339,722],{"emptyLinePlaceholder":721},[178,16341,16342,16344,16346],{"class":180,"line":1033},[178,16343,5862],{"class":699},[178,16345,930],{"class":195},[178,16347,3100],{"class":319},[178,16349,16350],{"class":180,"line":1046},[178,16351,3371],{"class":319},[1853,16353,16354],{},"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":160,"searchDepth":263,"depth":263,"links":16356},[16357,16358,16359],{"id":15290,"depth":263,"text":15291},{"id":15546,"depth":263,"text":15547},{"id":15668,"depth":263,"text":15669,"children":16360},[16361,16362],{"id":15675,"depth":274,"text":15676},{"id":16045,"depth":274,"text":16046},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15282,"description":160},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16369,"title":16370,"body":16371,"description":25123,"extension":1880,"meta":25124,"navigation":721,"path":25125,"seo":25126,"stem":25127,"__hash__":25128},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16372,"toc":25104},[16373,16376,16382,16389,16393,16396,16399,16402,16406,16410,16413,16416,16424,16429,16432,16439,16444,16603,16606,16858,16861,16864,16867,16872,16875,16878,16889,16894,17130,17134,17144,17147,17155,17302,17306,17309,17312,17316,17761,17765,17773,17781,18693,18700,18705,19333,19336,19339,19342,19461,19464,19551,19554,19680,19683,19777,19780,20133,20137,20145,20149,20156,20159,20162,20173,20179,20184,20196,20204,20224,20232,20249,20435,20438,20442,20445,20448,20451,20454,20457,20460,20463,20923,20929,20933,20936,20947,21534,21537,22026,22030,22033,22036,22039,22042,22045,22053,22449,22453,22456,22459,22906,22909,22912,22917,22920,22925,22928,22932,22935,22937,22943,22946,23252,23262,23303,23307,23310,23312,23345,23348,23655,23657,23672,23675,23698,23707,23713,23716,23720,23723,23726,23731,23742,23747,23755,23760,23890,23893,23896,24071,24076,24288,24292,24295,24409,24414,24653,24657,24661,24664,24667,24672,24777,24780,24783,24786,24790,24901,24904,24907,24912,24964,24967,24970,24975,25021,25024,25029,25097,25099,25102],[10,16374,16370],{"id":16375},"_8类和对象",[19,16377,16378,16379],{},"C++面向对象的三大特性为",[2093,16380,16381],{},"封装、继承、多态",[19,16383,16384,16385,16388],{},"C++认为",[2093,16386,16387],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,16390,16391],{},[2093,16392,528],{},[19,16394,16395],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,16397,16398],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,16400,16401],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,16403,16405],{"id":16404},"_81封装","8.1封装",[387,16407,16409],{"id":16408},"_811封装的意义","8.1.1封装的意义",[19,16411,16412],{},"封装是C++面向对象三大特性之一",[19,16414,16415],{},"封装的意义：",[2946,16417,16418,16421],{},[29,16419,16420],{},"将属性和行为作为一个整体，表现生活中的事物",[29,16422,16423],{},"将属性和行为加以权限控制",[19,16425,16426],{},[2093,16427,16428],{},"封装意义一：",[19,16430,16431],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,16433,16434,15555,16436],{},[2093,16435,6952],{},[70,16437,16438],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[26,16440,16441],{},[29,16442,16443],{},"**示例1：**设计一个圆类，求圆的周长",[154,16445,16447],{"className":1942,"code":16446,"language":1944,"meta":160,"style":160},"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",[70,16448,16449,16457,16461,16466,16471,16476,16481,16488,16493,16503,16507,16525,16529,16533,16541,16545,16550,16555,16560,16565,16576,16599],{"__ignoreMap":160},[178,16450,16451,16454],{"class":180,"line":181},[178,16452,16453],{"class":699},"class",[178,16455,16456],{"class":184}," Circle\n",[178,16458,16459],{"class":180,"line":263},[178,16460,3352],{"class":319},[178,16462,16463],{"class":180,"line":274},[178,16464,16465],{"class":2008},"    \u002F\u002F访问权限\n",[178,16467,16468],{"class":180,"line":354},[178,16469,16470],{"class":2008},"    \u002F\u002F公共权限\n",[178,16472,16473],{"class":180,"line":364},[178,16474,16475],{"class":699},"public:\n",[178,16477,16478],{"class":180,"line":740},[178,16479,16480],{"class":2008},"    \u002F\u002F属性\n",[178,16482,16483,16485],{"class":180,"line":746},[178,16484,3769],{"class":699},[178,16486,16487],{"class":319}," m_r;\n",[178,16489,16490],{"class":180,"line":752},[178,16491,16492],{"class":2008},"    \u002F\u002F行为\n",[178,16494,16495,16498,16501],{"class":180,"line":757},[178,16496,16497],{"class":699},"    double",[178,16499,16500],{"class":184}," calculateZC",[178,16502,3760],{"class":319},[178,16504,16505],{"class":180,"line":763},[178,16506,3814],{"class":319},[178,16508,16509,16512,16515,16517,16520,16522],{"class":180,"line":769},[178,16510,16511],{"class":699},"        return",[178,16513,16514],{"class":195}," 2",[178,16516,2395],{"class":699},[178,16518,16519],{"class":319},"PI",[178,16521,2395],{"class":699},[178,16523,16524],{"class":319},"m_r;\n",[178,16526,16527],{"class":180,"line":774},[178,16528,3971],{"class":319},[178,16530,16531],{"class":180,"line":780},[178,16532,5767],{"class":319},[178,16534,16535,16537,16539],{"class":180,"line":786},[178,16536,1956],{"class":699},[178,16538,838],{"class":184},[178,16540,3760],{"class":319},[178,16542,16543],{"class":180,"line":792},[178,16544,3352],{"class":319},[178,16546,16547],{"class":180,"line":798},[178,16548,16549],{"class":2008},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[178,16551,16552],{"class":180,"line":804},[178,16553,16554],{"class":2008},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[178,16556,16557],{"class":180,"line":810},[178,16558,16559],{"class":319},"    Circle c1;\n",[178,16561,16562],{"class":180,"line":816},[178,16563,16564],{"class":2008},"    \u002F\u002F给圆对象 的属性进行赋值\n",[178,16566,16567,16570,16572,16574],{"class":180,"line":822},[178,16568,16569],{"class":319},"    c1.m_r",[178,16571,330],{"class":699},[178,16573,2386],{"class":195},[178,16575,3100],{"class":319},[178,16577,16578,16580,16582,16585,16587,16590,16593,16595,16597],{"class":180,"line":827},[178,16579,3357],{"class":319},[178,16581,2983],{"class":699},[178,16583,16584],{"class":188},"\"圆的周长\"",[178,16586,2983],{"class":699},[178,16588,16589],{"class":319},"c1.",[178,16591,16592],{"class":184},"calculateZC",[178,16594,4210],{"class":319},[178,16596,2983],{"class":699},[178,16598,3005],{"class":319},[178,16600,16601],{"class":180,"line":832},[178,16602,3371],{"class":319},[19,16604,16605],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[154,16607,16609],{"className":1942,"code":16608,"language":1944,"meta":160,"style":160},"#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",[70,16610,16611,16617,16627,16633,16639,16643,16647,16652,16659,16664,16681,16685,16695,16699,16704,16720,16724,16734,16738,16743,16751,16755,16787,16791,16795,16803,16807,16812,16817,16831,16845,16854],{"__ignoreMap":160},[178,16612,16613,16615],{"class":180,"line":181},[178,16614,3735],{"class":699},[178,16616,3738],{"class":188},[178,16618,16619,16621,16623,16625],{"class":180,"line":263},[178,16620,3743],{"class":699},[178,16622,3746],{"class":699},[178,16624,3749],{"class":184},[178,16626,3100],{"class":319},[178,16628,16629,16631],{"class":180,"line":274},[178,16630,3735],{"class":699},[178,16632,9518],{"class":188},[178,16634,16635,16637],{"class":180,"line":354},[178,16636,16453],{"class":699},[178,16638,9531],{"class":184},[178,16640,16641],{"class":180,"line":364},[178,16642,3352],{"class":319},[178,16644,16645],{"class":180,"line":740},[178,16646,16475],{"class":699},[178,16648,16649],{"class":180,"line":746},[178,16650,16651],{"class":319},"    string m_name;\n",[178,16653,16654,16656],{"class":180,"line":752},[178,16655,3769],{"class":699},[178,16657,16658],{"class":319}," m_id;\n",[178,16660,16661],{"class":180,"line":757},[178,16662,16663],{"class":2008},"    \u002F\u002F赋值姓名\n",[178,16665,16666,16669,16672,16674,16677,16679],{"class":180,"line":763},[178,16667,16668],{"class":699},"    void",[178,16670,16671],{"class":184}," setName",[178,16673,944],{"class":319},[178,16675,16676],{"class":184},"string",[178,16678,426],{"class":6985},[178,16680,863],{"class":319},[178,16682,16683],{"class":180,"line":769},[178,16684,3814],{"class":319},[178,16686,16687,16690,16692],{"class":180,"line":774},[178,16688,16689],{"class":319},"        m_name",[178,16691,330],{"class":699},[178,16693,16694],{"class":319},"name;\n",[178,16696,16697],{"class":180,"line":780},[178,16698,3971],{"class":319},[178,16700,16701],{"class":180,"line":786},[178,16702,16703],{"class":2008},"    \u002F\u002F赋值学号\n",[178,16705,16706,16708,16711,16713,16715,16718],{"class":180,"line":792},[178,16707,16668],{"class":699},[178,16709,16710],{"class":184}," setId",[178,16712,944],{"class":319},[178,16714,1956],{"class":699},[178,16716,16717],{"class":6985}," id",[178,16719,863],{"class":319},[178,16721,16722],{"class":180,"line":798},[178,16723,3814],{"class":319},[178,16725,16726,16729,16731],{"class":180,"line":804},[178,16727,16728],{"class":319},"        m_id",[178,16730,330],{"class":699},[178,16732,16733],{"class":319},"id;\n",[178,16735,16736],{"class":180,"line":810},[178,16737,3971],{"class":319},[178,16739,16740],{"class":180,"line":816},[178,16741,16742],{"class":2008},"    \u002F\u002F打印学生信息\n",[178,16744,16745,16747,16749],{"class":180,"line":822},[178,16746,16668],{"class":699},[178,16748,11376],{"class":184},[178,16750,3760],{"class":319},[178,16752,16753],{"class":180,"line":827},[178,16754,3814],{"class":319},[178,16756,16757,16759,16761,16764,16766,16769,16771,16773,16775,16778,16780,16783,16785],{"class":180,"line":832},[178,16758,5224],{"class":319},[178,16760,2983],{"class":699},[178,16762,16763],{"class":188},"\"姓名：\"",[178,16765,2983],{"class":699},[178,16767,16768],{"class":319},"m_name",[178,16770,2983],{"class":699},[178,16772,6130],{"class":188},[178,16774,2983],{"class":699},[178,16776,16777],{"class":188},"\"学号：\"",[178,16779,2983],{"class":699},[178,16781,16782],{"class":319},"m_id",[178,16784,2983],{"class":699},[178,16786,3005],{"class":319},[178,16788,16789],{"class":180,"line":850},[178,16790,3971],{"class":319},[178,16792,16793],{"class":180,"line":866},[178,16794,5767],{"class":319},[178,16796,16797,16799,16801],{"class":180,"line":877},[178,16798,1956],{"class":699},[178,16800,838],{"class":184},[178,16802,3760],{"class":319},[178,16804,16805],{"class":180,"line":882},[178,16806,3352],{"class":319},[178,16808,16809],{"class":180,"line":898},[178,16810,16811],{"class":2008},"    \u002F\u002F实例化\n",[178,16813,16814],{"class":180,"line":914},[178,16815,16816],{"class":319},"    Student s1;\n",[178,16818,16819,16822,16825,16827,16829],{"class":180,"line":919},[178,16820,16821],{"class":319},"    s1.",[178,16823,16824],{"class":184},"setName",[178,16826,944],{"class":319},[178,16828,9685],{"class":188},[178,16830,4495],{"class":319},[178,16832,16833,16835,16838,16840,16843],{"class":180,"line":935},[178,16834,16821],{"class":319},[178,16836,16837],{"class":184},"setId",[178,16839,944],{"class":319},[178,16841,16842],{"class":195},"123456",[178,16844,4495],{"class":319},[178,16846,16847,16849,16852],{"class":180,"line":952},[178,16848,16821],{"class":319},[178,16850,16851],{"class":184},"printInfo",[178,16853,7405],{"class":319},[178,16855,16856],{"class":180,"line":966},[178,16857,3371],{"class":319},[19,16859,16860],{},"类中的属性和行为统称为成员",[19,16862,16863],{},"属性：成员属性(成员变量)",[19,16865,16866],{},"方法：成员函数(成员方法)",[19,16868,16869],{},[2093,16870,16871],{},"封装意义二：",[19,16873,16874],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,16876,16877],{},"访问权限有三种：",[26,16879,16880,16883,16886],{},[29,16881,16882],{},"public        公共权限",[29,16884,16885],{},"protected 保护权限",[29,16887,16888],{},"private      私有权限",[19,16890,16891],{},[2093,16892,16893],{},"示例：",[154,16895,16897],{"className":11702,"code":16896,"language":11704,"meta":160,"style":160},"\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",[70,16898,16899,16904,16909,16914,16919,16923,16930,16934,16939,16943,16948,16952,16957,16962,16967,16971,16976,16981,16988,16992,16996,17004,17008,17019,17031,17043,17047,17051,17055,17063,17067,17072,17084,17092,17100,17104,17114,17118,17126],{"__ignoreMap":160},[178,16900,16901],{"class":180,"line":181},[178,16902,16903],{"class":2008},"\u002F\u002F三种权限\n",[178,16905,16906],{"class":180,"line":263},[178,16907,16908],{"class":2008},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[178,16910,16911],{"class":180,"line":274},[178,16912,16913],{"class":2008},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[178,16915,16916],{"class":180,"line":354},[178,16917,16918],{"class":2008},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[178,16920,16921],{"class":180,"line":364},[178,16922,722],{"emptyLinePlaceholder":721},[178,16924,16925,16927],{"class":180,"line":740},[178,16926,16453],{"class":699},[178,16928,16929],{"class":184}," Person\n",[178,16931,16932],{"class":180,"line":746},[178,16933,3352],{"class":319},[178,16935,16936],{"class":180,"line":752},[178,16937,16938],{"class":2008},"    \u002F\u002F姓名  公共权限\n",[178,16940,16941],{"class":180,"line":757},[178,16942,16475],{"class":699},[178,16944,16945],{"class":180,"line":763},[178,16946,16947],{"class":319},"    string m_Name;\n",[178,16949,16950],{"class":180,"line":769},[178,16951,722],{"emptyLinePlaceholder":721},[178,16953,16954],{"class":180,"line":774},[178,16955,16956],{"class":2008},"    \u002F\u002F汽车  保护权限\n",[178,16958,16959],{"class":180,"line":780},[178,16960,16961],{"class":699},"protected:\n",[178,16963,16964],{"class":180,"line":786},[178,16965,16966],{"class":319},"    string m_Car;\n",[178,16968,16969],{"class":180,"line":792},[178,16970,722],{"emptyLinePlaceholder":721},[178,16972,16973],{"class":180,"line":798},[178,16974,16975],{"class":2008},"    \u002F\u002F银行卡密码  私有权限\n",[178,16977,16978],{"class":180,"line":804},[178,16979,16980],{"class":699},"private:\n",[178,16982,16983,16985],{"class":180,"line":810},[178,16984,3769],{"class":699},[178,16986,16987],{"class":319}," m_Password;\n",[178,16989,16990],{"class":180,"line":816},[178,16991,722],{"emptyLinePlaceholder":721},[178,16993,16994],{"class":180,"line":822},[178,16995,16475],{"class":699},[178,16997,16998,17000,17002],{"class":180,"line":827},[178,16999,16668],{"class":699},[178,17001,13146],{"class":184},[178,17003,3760],{"class":319},[178,17005,17006],{"class":180,"line":832},[178,17007,3814],{"class":319},[178,17009,17010,17013,17015,17017],{"class":180,"line":850},[178,17011,17012],{"class":319},"        m_Name ",[178,17014,330],{"class":699},[178,17016,10699],{"class":188},[178,17018,3100],{"class":319},[178,17020,17021,17024,17026,17029],{"class":180,"line":866},[178,17022,17023],{"class":319},"        m_Car ",[178,17025,330],{"class":699},[178,17027,17028],{"class":188}," \"拖拉机\"",[178,17030,3100],{"class":319},[178,17032,17033,17036,17038,17041],{"class":180,"line":877},[178,17034,17035],{"class":319},"        m_Password ",[178,17037,330],{"class":699},[178,17039,17040],{"class":195}," 123456",[178,17042,3100],{"class":319},[178,17044,17045],{"class":180,"line":882},[178,17046,3971],{"class":319},[178,17048,17049],{"class":180,"line":898},[178,17050,5767],{"class":319},[178,17052,17053],{"class":180,"line":914},[178,17054,722],{"emptyLinePlaceholder":721},[178,17056,17057,17059,17061],{"class":180,"line":919},[178,17058,1956],{"class":699},[178,17060,838],{"class":184},[178,17062,12614],{"class":319},[178,17064,17065],{"class":180,"line":935},[178,17066,722],{"emptyLinePlaceholder":721},[178,17068,17069],{"class":180,"line":952},[178,17070,17071],{"class":319},"    Person p;\n",[178,17073,17074,17077,17079,17082],{"class":180,"line":966},[178,17075,17076],{"class":319},"    p.m_Name ",[178,17078,330],{"class":699},[178,17080,17081],{"class":188}," \"李四\"",[178,17083,3100],{"class":319},[178,17085,17086,17089],{"class":180,"line":980},[178,17087,17088],{"class":2008},"    \u002F\u002Fp.m_Car = \"奔驰\";",[178,17090,17091],{"class":2008},"  \u002F\u002F保护权限类外访问不到\n",[178,17093,17094,17097],{"class":180,"line":985},[178,17095,17096],{"class":2008},"    \u002F\u002Fp.m_Password = 123;",[178,17098,17099],{"class":2008}," \u002F\u002F私有权限类外访问不到\n",[178,17101,17102],{"class":180,"line":1008},[178,17103,722],{"emptyLinePlaceholder":721},[178,17105,17106,17108,17110,17112],{"class":180,"line":1014},[178,17107,4087],{"class":184},[178,17109,944],{"class":319},[178,17111,4092],{"class":188},[178,17113,4495],{"class":319},[178,17115,17116],{"class":180,"line":1019},[178,17117,722],{"emptyLinePlaceholder":721},[178,17119,17120,17122,17124],{"class":180,"line":1033},[178,17121,5862],{"class":699},[178,17123,930],{"class":195},[178,17125,3100],{"class":319},[178,17127,17128],{"class":180,"line":1046},[178,17129,3371],{"class":319},[387,17131,17133],{"id":17132},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,17135,17136,17137,17140,17141],{},"在C++中 struct和class唯一的",[2093,17138,17139],{},"区别","就在于 ",[2093,17142,17143],{},"默认的访问权限不同",[19,17145,17146],{},"区别：",[2946,17148,17149,17152],{},[29,17150,17151],{},"struct 默认权限为公共",[29,17153,17154],{},"class   默认权限为私有",[154,17156,17158],{"className":11702,"code":17157,"language":11704,"meta":160,"style":160},"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",[70,17159,17160,17167,17171,17181,17185,17189,17196,17200,17210,17214,17218,17226,17230,17235,17249,17253,17258,17272,17276,17286,17290,17298],{"__ignoreMap":160},[178,17161,17162,17164],{"class":180,"line":181},[178,17163,16453],{"class":699},[178,17165,17166],{"class":184}," C1\n",[178,17168,17169],{"class":180,"line":263},[178,17170,3352],{"class":319},[178,17172,17173,17175,17178],{"class":180,"line":274},[178,17174,3769],{"class":699},[178,17176,17177],{"class":319},"  m_A;",[178,17179,17180],{"class":2008}," \u002F\u002F默认是私有权限\n",[178,17182,17183],{"class":180,"line":354},[178,17184,5767],{"class":319},[178,17186,17187],{"class":180,"line":364},[178,17188,722],{"emptyLinePlaceholder":721},[178,17190,17191,17193],{"class":180,"line":740},[178,17192,9528],{"class":699},[178,17194,17195],{"class":184}," C2\n",[178,17197,17198],{"class":180,"line":746},[178,17199,3352],{"class":319},[178,17201,17202,17204,17207],{"class":180,"line":752},[178,17203,3769],{"class":699},[178,17205,17206],{"class":319}," m_A;",[178,17208,17209],{"class":2008},"  \u002F\u002F默认是公共权限\n",[178,17211,17212],{"class":180,"line":757},[178,17213,5767],{"class":319},[178,17215,17216],{"class":180,"line":763},[178,17217,722],{"emptyLinePlaceholder":721},[178,17219,17220,17222,17224],{"class":180,"line":769},[178,17221,1956],{"class":699},[178,17223,838],{"class":184},[178,17225,12614],{"class":319},[178,17227,17228],{"class":180,"line":774},[178,17229,722],{"emptyLinePlaceholder":721},[178,17231,17232],{"class":180,"line":780},[178,17233,17234],{"class":319},"    C1 c1;\n",[178,17236,17237,17240,17242,17244,17246],{"class":180,"line":786},[178,17238,17239],{"class":319},"    c1.m_A ",[178,17241,330],{"class":699},[178,17243,3822],{"class":195},[178,17245,2005],{"class":319},[178,17247,17248],{"class":2008}," \u002F\u002F错误，访问权限是私有\n",[178,17250,17251],{"class":180,"line":792},[178,17252,722],{"emptyLinePlaceholder":721},[178,17254,17255],{"class":180,"line":798},[178,17256,17257],{"class":319},"    C2 c2;\n",[178,17259,17260,17263,17265,17267,17269],{"class":180,"line":804},[178,17261,17262],{"class":319},"    c2.m_A ",[178,17264,330],{"class":699},[178,17266,3822],{"class":195},[178,17268,2005],{"class":319},[178,17270,17271],{"class":2008}," \u002F\u002F正确，访问权限是公共\n",[178,17273,17274],{"class":180,"line":810},[178,17275,722],{"emptyLinePlaceholder":721},[178,17277,17278,17280,17282,17284],{"class":180,"line":816},[178,17279,4087],{"class":184},[178,17281,944],{"class":319},[178,17283,4092],{"class":188},[178,17285,4495],{"class":319},[178,17287,17288],{"class":180,"line":822},[178,17289,722],{"emptyLinePlaceholder":721},[178,17291,17292,17294,17296],{"class":180,"line":827},[178,17293,5862],{"class":699},[178,17295,930],{"class":195},[178,17297,3100],{"class":319},[178,17299,17300],{"class":180,"line":832},[178,17301,3371],{"class":319},[387,17303,17305],{"id":17304},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,17307,17308],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,17310,17311],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,17313,17314],{},[2093,17315,16893],{},[154,17317,17319],{"className":11702,"code":17318,"language":11704,"meta":160,"style":160},"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",[70,17320,17321,17331,17335,17339,17344,17358,17367,17371,17381,17385,17392,17396,17400,17404,17409,17418,17425,17429,17434,17450,17473,17486,17493,17497,17506,17510,17514,17519,17535,17545,17549,17553,17557,17565,17569,17579,17583,17591,17595,17599,17607,17611,17615,17620,17633,17656,17660,17665,17678,17700,17704,17709,17723,17731,17735,17745,17749,17757],{"__ignoreMap":160},[178,17322,17323,17325,17328],{"class":180,"line":181},[178,17324,16453],{"class":699},[178,17326,17327],{"class":184}," Person",[178,17329,17330],{"class":319}," {\n",[178,17332,17333],{"class":180,"line":263},[178,17334,16475],{"class":699},[178,17336,17337],{"class":180,"line":274},[178,17338,722],{"emptyLinePlaceholder":721},[178,17340,17341],{"class":180,"line":354},[178,17342,17343],{"class":2008},"    \u002F\u002F姓名设置可读可写\n",[178,17345,17346,17348,17350,17352,17354,17356],{"class":180,"line":364},[178,17347,16668],{"class":699},[178,17349,16671],{"class":184},[178,17351,944],{"class":319},[178,17353,16676],{"class":184},[178,17355,426],{"class":6985},[178,17357,14203],{"class":319},[178,17359,17360,17362,17364],{"class":180,"line":740},[178,17361,17012],{"class":319},[178,17363,330],{"class":699},[178,17365,17366],{"class":319}," name;\n",[178,17368,17369],{"class":180,"line":746},[178,17370,3971],{"class":319},[178,17372,17373,17376,17379],{"class":180,"line":752},[178,17374,17375],{"class":184},"    string",[178,17377,17378],{"class":184}," getName",[178,17380,3760],{"class":319},[178,17382,17383],{"class":180,"line":757},[178,17384,3814],{"class":319},[178,17386,17387,17389],{"class":180,"line":763},[178,17388,16511],{"class":699},[178,17390,17391],{"class":319}," m_Name;\n",[178,17393,17394],{"class":180,"line":769},[178,17395,3971],{"class":319},[178,17397,17398],{"class":180,"line":774},[178,17399,722],{"emptyLinePlaceholder":721},[178,17401,17402],{"class":180,"line":780},[178,17403,722],{"emptyLinePlaceholder":721},[178,17405,17406],{"class":180,"line":786},[178,17407,17408],{"class":2008},"    \u002F\u002F获取年龄 \n",[178,17410,17411,17413,17416],{"class":180,"line":792},[178,17412,3769],{"class":699},[178,17414,17415],{"class":184}," getAge",[178,17417,12614],{"class":319},[178,17419,17420,17422],{"class":180,"line":798},[178,17421,16511],{"class":699},[178,17423,17424],{"class":319}," m_Age;\n",[178,17426,17427],{"class":180,"line":804},[178,17428,3971],{"class":319},[178,17430,17431],{"class":180,"line":810},[178,17432,17433],{"class":2008},"    \u002F\u002F设置年龄\n",[178,17435,17436,17438,17441,17443,17445,17448],{"class":180,"line":816},[178,17437,16668],{"class":699},[178,17439,17440],{"class":184}," setAge",[178,17442,944],{"class":319},[178,17444,1956],{"class":699},[178,17446,17447],{"class":6985}," age",[178,17449,14203],{"class":319},[178,17451,17452,17454,17457,17459,17461,17463,17466,17468,17471],{"class":180,"line":822},[178,17453,4280],{"class":699},[178,17455,17456],{"class":319}," (age ",[178,17458,320],{"class":699},[178,17460,930],{"class":195},[178,17462,5028],{"class":699},[178,17464,17465],{"class":319}," age ",[178,17467,2899],{"class":699},[178,17469,17470],{"class":195}," 150",[178,17472,14203],{"class":319},[178,17474,17475,17477,17479,17482,17484],{"class":180,"line":827},[178,17476,11480],{"class":319},[178,17478,2983],{"class":699},[178,17480,17481],{"class":188}," \"你个老妖精!\"",[178,17483,3251],{"class":699},[178,17485,10601],{"class":319},[178,17487,17488,17491],{"class":180,"line":832},[178,17489,17490],{"class":699},"            return",[178,17492,3100],{"class":319},[178,17494,17495],{"class":180,"line":850},[178,17496,4312],{"class":319},[178,17498,17499,17502,17504],{"class":180,"line":866},[178,17500,17501],{"class":319},"        m_Age ",[178,17503,330],{"class":699},[178,17505,9566],{"class":319},[178,17507,17508],{"class":180,"line":877},[178,17509,3971],{"class":319},[178,17511,17512],{"class":180,"line":882},[178,17513,722],{"emptyLinePlaceholder":721},[178,17515,17516],{"class":180,"line":898},[178,17517,17518],{"class":2008},"    \u002F\u002F情人设置为只写\n",[178,17520,17521,17523,17526,17528,17530,17533],{"class":180,"line":914},[178,17522,16668],{"class":699},[178,17524,17525],{"class":184}," setLover",[178,17527,944],{"class":319},[178,17529,16676],{"class":184},[178,17531,17532],{"class":6985}," lover",[178,17534,14203],{"class":319},[178,17536,17537,17540,17542],{"class":180,"line":919},[178,17538,17539],{"class":319},"        m_Lover ",[178,17541,330],{"class":699},[178,17543,17544],{"class":319}," lover;\n",[178,17546,17547],{"class":180,"line":935},[178,17548,3971],{"class":319},[178,17550,17551],{"class":180,"line":952},[178,17552,722],{"emptyLinePlaceholder":721},[178,17554,17555],{"class":180,"line":966},[178,17556,16980],{"class":699},[178,17558,17559,17562],{"class":180,"line":980},[178,17560,17561],{"class":319},"    string m_Name;",[178,17563,17564],{"class":2008}," \u002F\u002F可读可写  姓名\n",[178,17566,17567],{"class":180,"line":985},[178,17568,14971],{"class":319},[178,17570,17571,17573,17576],{"class":180,"line":1008},[178,17572,3769],{"class":699},[178,17574,17575],{"class":319}," m_Age;",[178,17577,17578],{"class":2008}," \u002F\u002F只读  年龄\n",[178,17580,17581],{"class":180,"line":1014},[178,17582,722],{"emptyLinePlaceholder":721},[178,17584,17585,17588],{"class":180,"line":1019},[178,17586,17587],{"class":319},"    string m_Lover;",[178,17589,17590],{"class":2008}," \u002F\u002F只写  情人\n",[178,17592,17593],{"class":180,"line":1033},[178,17594,5767],{"class":319},[178,17596,17597],{"class":180,"line":1046},[178,17598,722],{"emptyLinePlaceholder":721},[178,17600,17601,17603,17605],{"class":180,"line":1059},[178,17602,1956],{"class":699},[178,17604,838],{"class":184},[178,17606,12614],{"class":319},[178,17608,17609],{"class":180,"line":1072},[178,17610,722],{"emptyLinePlaceholder":721},[178,17612,17613],{"class":180,"line":1077},[178,17614,17071],{"class":319},[178,17616,17617],{"class":180,"line":1082},[178,17618,17619],{"class":2008},"    \u002F\u002F姓名设置\n",[178,17621,17622,17625,17627,17629,17631],{"class":180,"line":1099},[178,17623,17624],{"class":319},"    p.",[178,17626,16824],{"class":184},[178,17628,944],{"class":319},[178,17630,9685],{"class":188},[178,17632,4495],{"class":319},[178,17634,17635,17637,17639,17642,17644,17647,17650,17652,17654],{"class":180,"line":9806},[178,17636,8298],{"class":319},[178,17638,2983],{"class":699},[178,17640,17641],{"class":188}," \"姓名： \"",[178,17643,3251],{"class":699},[178,17645,17646],{"class":319}," p.",[178,17648,17649],{"class":184},"getName",[178,17651,14811],{"class":319},[178,17653,2983],{"class":699},[178,17655,10601],{"class":319},[178,17657,17658],{"class":180,"line":9818},[178,17659,722],{"emptyLinePlaceholder":721},[178,17661,17662],{"class":180,"line":11477},[178,17663,17664],{"class":2008},"    \u002F\u002F年龄设置\n",[178,17666,17667,17669,17672,17674,17676],{"class":180,"line":11502},[178,17668,17624],{"class":319},[178,17670,17671],{"class":184},"setAge",[178,17673,944],{"class":319},[178,17675,2596],{"class":195},[178,17677,4495],{"class":319},[178,17679,17680,17682,17684,17687,17689,17691,17694,17696,17698],{"class":180,"line":11525},[178,17681,8298],{"class":319},[178,17683,2983],{"class":699},[178,17685,17686],{"class":188}," \"年龄： \"",[178,17688,3251],{"class":699},[178,17690,17646],{"class":319},[178,17692,17693],{"class":184},"getAge",[178,17695,14811],{"class":319},[178,17697,2983],{"class":699},[178,17699,10601],{"class":319},[178,17701,17702],{"class":180,"line":11549},[178,17703,722],{"emptyLinePlaceholder":721},[178,17705,17706],{"class":180,"line":11554},[178,17707,17708],{"class":2008},"    \u002F\u002F情人设置\n",[178,17710,17711,17713,17716,17718,17721],{"class":180,"line":11559},[178,17712,17624],{"class":319},[178,17714,17715],{"class":184},"setLover",[178,17717,944],{"class":319},[178,17719,17720],{"class":188},"\"苍井\"",[178,17722,4495],{"class":319},[178,17724,17725,17728],{"class":180,"line":11564},[178,17726,17727],{"class":2008},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[178,17729,17730],{"class":2008},"  \u002F\u002F只写属性，不可以读取\n",[178,17732,17733],{"class":180,"line":11573},[178,17734,722],{"emptyLinePlaceholder":721},[178,17736,17737,17739,17741,17743],{"class":180,"line":11578},[178,17738,4087],{"class":184},[178,17740,944],{"class":319},[178,17742,4092],{"class":188},[178,17744,4495],{"class":319},[178,17746,17747],{"class":180,"line":11584},[178,17748,722],{"emptyLinePlaceholder":721},[178,17750,17751,17753,17755],{"class":180,"line":11605},[178,17752,5862],{"class":699},[178,17754,930],{"class":195},[178,17756,3100],{"class":319},[178,17758,17759],{"class":180,"line":11611},[178,17760,3371],{"class":319},[387,17762,17764],{"id":17763},"_814封装案例","8.1.4封装案例",[26,17766,17767],{},[29,17768,17769,17772],{},[2093,17770,17771],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[2946,17774,17775,17778],{},[29,17776,17777],{},"求出立方体的面积和体积",[29,17779,17780],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[154,17782,17784],{"className":1942,"code":17783,"language":1944,"meta":160,"style":160},"#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",[70,17785,17786,17792,17802,17809,17813,17817,17822,17852,17856,17866,17876,17886,17890,17899,17903,17939,17943,17952,17956,17972,17976,17981,17990,17994,18001,18005,18014,18018,18025,18029,18038,18042,18049,18053,18058,18075,18079,18125,18129,18138,18142,18146,18150,18159,18163,18167,18172,18176,18182,18188,18194,18198,18202,18207,18229,18233,18287,18291,18299,18303,18308,18313,18326,18333,18349,18360,18366,18389,18395,18418,18432,18452,18458,18469,18492,18514,18519,18525,18539,18552,18557,18571,18576,18582,18587,18601,18606,18611,18625,18637,18642,18655,18660,18665,18670,18683,18688],{"__ignoreMap":160},[178,17787,17788,17790],{"class":180,"line":181},[178,17789,3735],{"class":699},[178,17791,3738],{"class":188},[178,17793,17794,17796,17798,17800],{"class":180,"line":263},[178,17795,3743],{"class":699},[178,17797,3746],{"class":699},[178,17799,3749],{"class":184},[178,17801,3100],{"class":319},[178,17803,17804,17806],{"class":180,"line":274},[178,17805,16453],{"class":699},[178,17807,17808],{"class":184}," Cube\n",[178,17810,17811],{"class":180,"line":354},[178,17812,3352],{"class":319},[178,17814,17815],{"class":180,"line":364},[178,17816,16475],{"class":699},[178,17818,17819],{"class":180,"line":740},[178,17820,17821],{"class":2008},"    \u002F\u002F输入长宽高\n",[178,17823,17824,17826,17829,17831,17833,17836,17838,17840,17843,17845,17847,17850],{"class":180,"line":746},[178,17825,16668],{"class":699},[178,17827,17828],{"class":184}," setLwh",[178,17830,944],{"class":319},[178,17832,1956],{"class":699},[178,17834,17835],{"class":6985}," l",[178,17837,2318],{"class":319},[178,17839,1956],{"class":699},[178,17841,17842],{"class":6985}," w",[178,17844,2318],{"class":319},[178,17846,1956],{"class":699},[178,17848,17849],{"class":6985}," h",[178,17851,863],{"class":319},[178,17853,17854],{"class":180,"line":752},[178,17855,3814],{"class":319},[178,17857,17858,17861,17863],{"class":180,"line":757},[178,17859,17860],{"class":319},"        m_L",[178,17862,330],{"class":699},[178,17864,17865],{"class":319},"l;\n",[178,17867,17868,17871,17873],{"class":180,"line":763},[178,17869,17870],{"class":319},"        m_W",[178,17872,330],{"class":699},[178,17874,17875],{"class":319},"w;\n",[178,17877,17878,17881,17883],{"class":180,"line":769},[178,17879,17880],{"class":319},"        m_H",[178,17882,330],{"class":699},[178,17884,17885],{"class":319},"h;\n",[178,17887,17888],{"class":180,"line":774},[178,17889,3971],{"class":319},[178,17891,17892,17894,17897],{"class":180,"line":780},[178,17893,3769],{"class":699},[178,17895,17896],{"class":184}," mianji",[178,17898,3760],{"class":319},[178,17900,17901],{"class":180,"line":786},[178,17902,3814],{"class":319},[178,17904,17905,17907,17909,17911,17914,17916,17919,17921,17924,17926,17929,17931,17934,17936],{"class":180,"line":792},[178,17906,16511],{"class":699},[178,17908,16514],{"class":195},[178,17910,2395],{"class":699},[178,17912,17913],{"class":319},"(m_L",[178,17915,2395],{"class":699},[178,17917,17918],{"class":319},"m_W ",[178,17920,2421],{"class":699},[178,17922,17923],{"class":319}," m_L",[178,17925,2395],{"class":699},[178,17927,17928],{"class":319},"m_H ",[178,17930,2421],{"class":699},[178,17932,17933],{"class":319}," m_W",[178,17935,2395],{"class":699},[178,17937,17938],{"class":319},"m_H);\n",[178,17940,17941],{"class":180,"line":798},[178,17942,3971],{"class":319},[178,17944,17945,17947,17950],{"class":180,"line":804},[178,17946,3769],{"class":699},[178,17948,17949],{"class":184}," tiji",[178,17951,3760],{"class":319},[178,17953,17954],{"class":180,"line":810},[178,17955,3814],{"class":319},[178,17957,17958,17960,17962,17964,17967,17969],{"class":180,"line":816},[178,17959,16511],{"class":699},[178,17961,17923],{"class":319},[178,17963,2395],{"class":699},[178,17965,17966],{"class":319},"m_W",[178,17968,2395],{"class":699},[178,17970,17971],{"class":319},"m_H;\n",[178,17973,17974],{"class":180,"line":822},[178,17975,3971],{"class":319},[178,17977,17978],{"class":180,"line":827},[178,17979,17980],{"class":2008},"    \u002F\u002F获取长宽高\n",[178,17982,17983,17985,17988],{"class":180,"line":832},[178,17984,3769],{"class":699},[178,17986,17987],{"class":184}," getLength",[178,17989,3760],{"class":319},[178,17991,17992],{"class":180,"line":850},[178,17993,3814],{"class":319},[178,17995,17996,17998],{"class":180,"line":866},[178,17997,16511],{"class":699},[178,17999,18000],{"class":319}," m_L;\n",[178,18002,18003],{"class":180,"line":877},[178,18004,3971],{"class":319},[178,18006,18007,18009,18012],{"class":180,"line":882},[178,18008,3769],{"class":699},[178,18010,18011],{"class":184}," getWidth",[178,18013,3760],{"class":319},[178,18015,18016],{"class":180,"line":898},[178,18017,3814],{"class":319},[178,18019,18020,18022],{"class":180,"line":914},[178,18021,16511],{"class":699},[178,18023,18024],{"class":319}," m_W;\n",[178,18026,18027],{"class":180,"line":919},[178,18028,3971],{"class":319},[178,18030,18031,18033,18036],{"class":180,"line":935},[178,18032,3769],{"class":699},[178,18034,18035],{"class":184}," getHeight",[178,18037,3760],{"class":319},[178,18039,18040],{"class":180,"line":952},[178,18041,3814],{"class":319},[178,18043,18044,18046],{"class":180,"line":966},[178,18045,16511],{"class":699},[178,18047,18048],{"class":319}," m_H;\n",[178,18050,18051],{"class":180,"line":980},[178,18052,3971],{"class":319},[178,18054,18055],{"class":180,"line":985},[178,18056,18057],{"class":2008},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[178,18059,18060,18063,18066,18068,18071,18073],{"class":180,"line":1008},[178,18061,18062],{"class":699},"    bool",[178,18064,18065],{"class":184}," isEqual",[178,18067,944],{"class":319},[178,18069,18070],{"class":184},"Cube",[178,18072,4625],{"class":6985},[178,18074,863],{"class":319},[178,18076,18077],{"class":180,"line":1014},[178,18078,3814],{"class":319},[178,18080,18081,18083,18086,18089,18091,18093,18096,18098,18101,18104,18106,18108,18111,18113,18115,18118,18120,18122],{"class":180,"line":1019},[178,18082,4280],{"class":699},[178,18084,18085],{"class":319}," (c.",[178,18087,18088],{"class":184},"getLength",[178,18090,14811],{"class":319},[178,18092,4725],{"class":699},[178,18094,18095],{"class":319}," m_L ",[178,18097,3510],{"class":699},[178,18099,18100],{"class":319}," c.",[178,18102,18103],{"class":184},"getWidth",[178,18105,14811],{"class":319},[178,18107,4725],{"class":699},[178,18109,18110],{"class":319}," m_W ",[178,18112,3510],{"class":699},[178,18114,18100],{"class":319},[178,18116,18117],{"class":184},"getHeight",[178,18119,14811],{"class":319},[178,18121,4725],{"class":699},[178,18123,18124],{"class":319}," m_H)\n",[178,18126,18127],{"class":180,"line":1033},[178,18128,4293],{"class":319},[178,18130,18131,18133,18136],{"class":180,"line":1046},[178,18132,17490],{"class":699},[178,18134,18135],{"class":195}," true",[178,18137,3100],{"class":319},[178,18139,18140],{"class":180,"line":1059},[178,18141,4312],{"class":319},[178,18143,18144],{"class":180,"line":1072},[178,18145,4353],{"class":699},[178,18147,18148],{"class":180,"line":1077},[178,18149,4293],{"class":319},[178,18151,18152,18154,18157],{"class":180,"line":1082},[178,18153,17490],{"class":699},[178,18155,18156],{"class":195}," false",[178,18158,3100],{"class":319},[178,18160,18161],{"class":180,"line":1099},[178,18162,4312],{"class":319},[178,18164,18165],{"class":180,"line":9806},[178,18166,3971],{"class":319},[178,18168,18169],{"class":180,"line":9818},[178,18170,18171],{"class":2008},"    \u002F\u002F私有属性\n",[178,18173,18174],{"class":180,"line":11477},[178,18175,16980],{"class":699},[178,18177,18178,18180],{"class":180,"line":11502},[178,18179,3769],{"class":699},[178,18181,18000],{"class":319},[178,18183,18184,18186],{"class":180,"line":11525},[178,18185,3769],{"class":699},[178,18187,18024],{"class":319},[178,18189,18190,18192],{"class":180,"line":11549},[178,18191,3769],{"class":699},[178,18193,18048],{"class":319},[178,18195,18196],{"class":180,"line":11554},[178,18197,722],{"emptyLinePlaceholder":721},[178,18199,18200],{"class":180,"line":11559},[178,18201,5767],{"class":319},[178,18203,18204],{"class":180,"line":11564},[178,18205,18206],{"class":2008},"\u002F\u002F全局函数判断两个立方体是否相等\n",[178,18208,18209,18211,18213,18215,18217,18220,18222,18224,18227],{"class":180,"line":11573},[178,18210,3161],{"class":699},[178,18212,18065],{"class":184},[178,18214,944],{"class":319},[178,18216,18070],{"class":184},[178,18218,18219],{"class":6985}," c1",[178,18221,2318],{"class":319},[178,18223,18070],{"class":184},[178,18225,18226],{"class":6985}," c2",[178,18228,863],{"class":319},[178,18230,18231],{"class":180,"line":11578},[178,18232,3352],{"class":319},[178,18234,18235,18237,18240,18242,18244,18246,18249,18251,18254,18256,18258,18260,18262,18264,18266,18268,18270,18272,18274,18276,18278,18280,18282,18284],{"class":180,"line":11584},[178,18236,5862],{"class":699},[178,18238,18239],{"class":319}," (c1.",[178,18241,18088],{"class":184},[178,18243,14811],{"class":319},[178,18245,4725],{"class":699},[178,18247,18248],{"class":319}," c2.",[178,18250,18088],{"class":184},[178,18252,18253],{"class":319},"()) ",[178,18255,3510],{"class":699},[178,18257,18239],{"class":319},[178,18259,18103],{"class":184},[178,18261,14811],{"class":319},[178,18263,4725],{"class":699},[178,18265,18248],{"class":319},[178,18267,18103],{"class":184},[178,18269,18253],{"class":319},[178,18271,3510],{"class":699},[178,18273,18239],{"class":319},[178,18275,18117],{"class":184},[178,18277,14811],{"class":319},[178,18279,4725],{"class":699},[178,18281,18248],{"class":319},[178,18283,18117],{"class":184},[178,18285,18286],{"class":319},"());\n",[178,18288,18289],{"class":180,"line":11605},[178,18290,3371],{"class":319},[178,18292,18293,18295,18297],{"class":180,"line":11611},[178,18294,1956],{"class":699},[178,18296,838],{"class":184},[178,18298,3760],{"class":319},[178,18300,18301],{"class":180,"line":11625},[178,18302,3352],{"class":319},[178,18304,18305],{"class":180,"line":11631},[178,18306,18307],{"class":319},"    Cube c1;\n",[178,18309,18310],{"class":180,"line":11658},[178,18311,18312],{"class":2008},"    \u002F\u002F输入立方体的长宽高\n",[178,18314,18315,18317,18319,18322,18324],{"class":180,"line":11667},[178,18316,3357],{"class":319},[178,18318,2983],{"class":699},[178,18320,18321],{"class":188},"\"请输入第一个立方体的长、宽、高：\"",[178,18323,2983],{"class":699},[178,18325,3005],{"class":319},[178,18327,18328,18330],{"class":180,"line":11673},[178,18329,3769],{"class":699},[178,18331,18332],{"class":319}," l,w,h,l1,w1,h1;\n",[178,18334,18335,18337,18339,18341,18343,18345,18347],{"class":180,"line":11681},[178,18336,3796],{"class":319},[178,18338,3236],{"class":699},[178,18340,2458],{"class":319},[178,18342,3236],{"class":699},[178,18344,2735],{"class":319},[178,18346,3236],{"class":699},[178,18348,17885],{"class":319},[178,18350,18351,18354,18357],{"class":180,"line":11686},[178,18352,18353],{"class":319},"    c1.",[178,18355,18356],{"class":184},"setLwh",[178,18358,18359],{"class":319},"(l,w,h);\n",[178,18361,18363],{"class":180,"line":18362},66,[178,18364,18365],{"class":2008},"    \u002F\u002F面积\n",[178,18367,18369,18371,18373,18376,18378,18380,18383,18385,18387],{"class":180,"line":18368},67,[178,18370,3357],{"class":319},[178,18372,2983],{"class":699},[178,18374,18375],{"class":188},"\"立方体的表面积为：\"",[178,18377,2983],{"class":699},[178,18379,16589],{"class":319},[178,18381,18382],{"class":184},"mianji",[178,18384,4210],{"class":319},[178,18386,2983],{"class":699},[178,18388,3005],{"class":319},[178,18390,18392],{"class":180,"line":18391},68,[178,18393,18394],{"class":2008},"    \u002F\u002F体积\n",[178,18396,18398,18400,18402,18405,18407,18409,18412,18414,18416],{"class":180,"line":18397},69,[178,18399,3357],{"class":319},[178,18401,2983],{"class":699},[178,18403,18404],{"class":188},"\"立方体的体积为：\"",[178,18406,2983],{"class":699},[178,18408,16589],{"class":319},[178,18410,18411],{"class":184},"tiji",[178,18413,4210],{"class":319},[178,18415,2983],{"class":699},[178,18417,3005],{"class":319},[178,18419,18421,18423,18425,18428,18430],{"class":180,"line":18420},70,[178,18422,3357],{"class":319},[178,18424,2983],{"class":699},[178,18426,18427],{"class":188},"\"请输入第二个立方体的长、宽、高：\"",[178,18429,2983],{"class":699},[178,18431,3005],{"class":319},[178,18433,18435,18437,18439,18442,18444,18447,18449],{"class":180,"line":18434},71,[178,18436,3796],{"class":319},[178,18438,3236],{"class":699},[178,18440,18441],{"class":319},"l1",[178,18443,3236],{"class":699},[178,18445,18446],{"class":319},"w1",[178,18448,3236],{"class":699},[178,18450,18451],{"class":319},"h1;\n",[178,18453,18455],{"class":180,"line":18454},72,[178,18456,18457],{"class":319},"    Cube c2;\n",[178,18459,18461,18464,18466],{"class":180,"line":18460},73,[178,18462,18463],{"class":319},"    c2.",[178,18465,18356],{"class":184},[178,18467,18468],{"class":319},"(l1,w1,h1);\n",[178,18470,18472,18474,18476,18479,18481,18484,18486,18488,18490],{"class":180,"line":18471},74,[178,18473,3357],{"class":319},[178,18475,2983],{"class":699},[178,18477,18478],{"class":188},"\"第二个立方体的表面积为：\"",[178,18480,2983],{"class":699},[178,18482,18483],{"class":319},"c2.",[178,18485,18382],{"class":184},[178,18487,4210],{"class":319},[178,18489,2983],{"class":699},[178,18491,3005],{"class":319},[178,18493,18495,18497,18499,18502,18504,18506,18508,18510,18512],{"class":180,"line":18494},75,[178,18496,3357],{"class":319},[178,18498,2983],{"class":699},[178,18500,18501],{"class":188},"\"第二个立方体的体积为：\"",[178,18503,2983],{"class":699},[178,18505,18483],{"class":319},[178,18507,18411],{"class":184},[178,18509,4210],{"class":319},[178,18511,2983],{"class":699},[178,18513,3005],{"class":319},[178,18515,18517],{"class":180,"line":18516},76,[178,18518,722],{"emptyLinePlaceholder":721},[178,18520,18522],{"class":180,"line":18521},77,[178,18523,18524],{"class":2008},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[178,18526,18528,18530,18532,18535,18537],{"class":180,"line":18527},78,[178,18529,3357],{"class":319},[178,18531,2983],{"class":699},[178,18533,18534],{"class":188},"\"内部函数判断结果：\"",[178,18536,2983],{"class":699},[178,18538,3005],{"class":319},[178,18540,18542,18544,18546,18549],{"class":180,"line":18541},79,[178,18543,922],{"class":699},[178,18545,18239],{"class":319},[178,18547,18548],{"class":184},"isEqual",[178,18550,18551],{"class":319},"(c2))\n",[178,18553,18555],{"class":180,"line":18554},80,[178,18556,3814],{"class":319},[178,18558,18560,18562,18564,18567,18569],{"class":180,"line":18559},81,[178,18561,5224],{"class":319},[178,18563,2983],{"class":699},[178,18565,18566],{"class":188},"\"两个立方体相等\"",[178,18568,2983],{"class":699},[178,18570,3005],{"class":319},[178,18572,18574],{"class":180,"line":18573},82,[178,18575,3971],{"class":319},[178,18577,18579],{"class":180,"line":18578},83,[178,18580,18581],{"class":699},"    else\n",[178,18583,18585],{"class":180,"line":18584},84,[178,18586,3814],{"class":319},[178,18588,18590,18592,18594,18597,18599],{"class":180,"line":18589},85,[178,18591,5224],{"class":319},[178,18593,2983],{"class":699},[178,18595,18596],{"class":188},"\"两个立方体不相等\"",[178,18598,2983],{"class":699},[178,18600,3005],{"class":319},[178,18602,18604],{"class":180,"line":18603},86,[178,18605,3971],{"class":319},[178,18607,18609],{"class":180,"line":18608},87,[178,18610,722],{"emptyLinePlaceholder":721},[178,18612,18614,18616,18618,18621,18623],{"class":180,"line":18613},88,[178,18615,3357],{"class":319},[178,18617,2983],{"class":699},[178,18619,18620],{"class":188},"\"全局函数判断结果：\"",[178,18622,2983],{"class":699},[178,18624,3005],{"class":319},[178,18626,18628,18630,18632,18634],{"class":180,"line":18627},89,[178,18629,922],{"class":699},[178,18631,3457],{"class":319},[178,18633,18548],{"class":184},[178,18635,18636],{"class":319},"(c1, c2))\n",[178,18638,18640],{"class":180,"line":18639},90,[178,18641,3814],{"class":319},[178,18643,18645,18647,18649,18651,18653],{"class":180,"line":18644},91,[178,18646,5224],{"class":319},[178,18648,2983],{"class":699},[178,18650,18566],{"class":188},[178,18652,2983],{"class":699},[178,18654,3005],{"class":319},[178,18656,18658],{"class":180,"line":18657},92,[178,18659,3971],{"class":319},[178,18661,18663],{"class":180,"line":18662},93,[178,18664,18581],{"class":699},[178,18666,18668],{"class":180,"line":18667},94,[178,18669,3814],{"class":319},[178,18671,18673,18675,18677,18679,18681],{"class":180,"line":18672},95,[178,18674,5224],{"class":319},[178,18676,2983],{"class":699},[178,18678,18596],{"class":188},[178,18680,2983],{"class":699},[178,18682,3005],{"class":319},[178,18684,18686],{"class":180,"line":18685},96,[178,18687,3971],{"class":319},[178,18689,18691],{"class":180,"line":18690},97,[178,18692,3371],{"class":319},[26,18694,18695],{"start":263},[29,18696,18697],{},[2093,18698,18699],{},"练习案例2：点和圆的关系",[2946,18701,18702],{},[29,18703,18704],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[154,18706,18708],{"className":1942,"code":18707,"language":1944,"meta":160,"style":160},"#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",[70,18709,18710,18716,18726,18733,18740,18744,18748,18753,18787,18792,18808,18822,18826,18830,18837,18844,18848,18854,18858,18862,18866,18888,18911,18916,18930,18945,18949,18953,18959,18964,18969,18973,18999,19003,19033,19061,19089,19106,19110,19123,19127,19131,19135,19148,19152,19156,19164,19168,19172,19176,19181,19185,19196,19203,19212,19222,19233,19240,19253,19264,19274,19285,19292,19306,19311,19321,19329],{"__ignoreMap":160},[178,18711,18712,18714],{"class":180,"line":181},[178,18713,3735],{"class":699},[178,18715,3738],{"class":188},[178,18717,18718,18720,18722,18724],{"class":180,"line":263},[178,18719,3743],{"class":699},[178,18721,3746],{"class":699},[178,18723,3749],{"class":184},[178,18725,3100],{"class":319},[178,18727,18728,18730],{"class":180,"line":274},[178,18729,3735],{"class":699},[178,18731,18732],{"class":188},"\u003Ccmath>\n",[178,18734,18735,18737],{"class":180,"line":354},[178,18736,16453],{"class":699},[178,18738,18739],{"class":184}," Point\n",[178,18741,18742],{"class":180,"line":364},[178,18743,3352],{"class":319},[178,18745,18746],{"class":180,"line":740},[178,18747,16475],{"class":699},[178,18749,18750],{"class":180,"line":746},[178,18751,18752],{"class":2008},"    \u002F\u002F赋值\n",[178,18754,18755,18757,18760,18762,18764,18767,18769,18771,18774,18777,18779,18782,18784],{"class":180,"line":752},[178,18756,16668],{"class":699},[178,18758,18759],{"class":184}," setPoint",[178,18761,944],{"class":319},[178,18763,15797],{"class":699},[178,18765,18766],{"class":6985}," x",[178,18768,14196],{"class":319},[178,18770,15797],{"class":699},[178,18772,18773],{"class":6985}," y",[178,18775,18776],{"class":319},") { m_x ",[178,18778,330],{"class":699},[178,18780,18781],{"class":319}," x; m_y ",[178,18783,330],{"class":699},[178,18785,18786],{"class":319}," y; }\n",[178,18788,18789],{"class":180,"line":757},[178,18790,18791],{"class":2008},"    \u002F\u002F获取坐标\n",[178,18793,18794,18796,18799,18802,18805],{"class":180,"line":763},[178,18795,16497],{"class":699},[178,18797,18798],{"class":184}," getX",[178,18800,18801],{"class":319},"() { ",[178,18803,18804],{"class":699},"return",[178,18806,18807],{"class":319}," m_x; }\n",[178,18809,18810,18812,18815,18817,18819],{"class":180,"line":769},[178,18811,16497],{"class":699},[178,18813,18814],{"class":184}," getY",[178,18816,18801],{"class":319},[178,18818,18804],{"class":699},[178,18820,18821],{"class":319}," m_y; }\n",[178,18823,18824],{"class":180,"line":774},[178,18825,722],{"emptyLinePlaceholder":721},[178,18827,18828],{"class":180,"line":780},[178,18829,16980],{"class":699},[178,18831,18832,18834],{"class":180,"line":786},[178,18833,16497],{"class":699},[178,18835,18836],{"class":319}," m_x;\n",[178,18838,18839,18841],{"class":180,"line":792},[178,18840,16497],{"class":699},[178,18842,18843],{"class":319}," m_y;\n",[178,18845,18846],{"class":180,"line":798},[178,18847,5767],{"class":319},[178,18849,18850,18852],{"class":180,"line":804},[178,18851,16453],{"class":699},[178,18853,16456],{"class":184},[178,18855,18856],{"class":180,"line":810},[178,18857,3352],{"class":319},[178,18859,18860],{"class":180,"line":816},[178,18861,16475],{"class":699},[178,18863,18864],{"class":180,"line":822},[178,18865,18752],{"class":2008},[178,18867,18868,18870,18873,18875,18877,18880,18883,18885],{"class":180,"line":827},[178,18869,16668],{"class":699},[178,18871,18872],{"class":184}," setRadius",[178,18874,944],{"class":319},[178,18876,15797],{"class":699},[178,18878,18879],{"class":6985}," r",[178,18881,18882],{"class":319},") { m_r ",[178,18884,330],{"class":699},[178,18886,18887],{"class":319}," r; }\n",[178,18889,18890,18892,18895,18897,18900,18903,18906,18908],{"class":180,"line":832},[178,18891,16668],{"class":699},[178,18893,18894],{"class":184}," setCenter",[178,18896,944],{"class":319},[178,18898,18899],{"class":184},"Point",[178,18901,18902],{"class":6985}," center",[178,18904,18905],{"class":319},") { m_center ",[178,18907,330],{"class":699},[178,18909,18910],{"class":319}," center; }\n",[178,18912,18913],{"class":180,"line":850},[178,18914,18915],{"class":2008},"    \u002F\u002F获取属性\n",[178,18917,18918,18920,18923,18925,18927],{"class":180,"line":866},[178,18919,16497],{"class":699},[178,18921,18922],{"class":184}," getRadius",[178,18924,18801],{"class":319},[178,18926,18804],{"class":699},[178,18928,18929],{"class":319}," m_r; }\n",[178,18931,18932,18935,18938,18940,18942],{"class":180,"line":877},[178,18933,18934],{"class":184},"    Point",[178,18936,18937],{"class":184}," getCenter",[178,18939,18801],{"class":319},[178,18941,18804],{"class":699},[178,18943,18944],{"class":319}," m_center; }\n",[178,18946,18947],{"class":180,"line":882},[178,18948,722],{"emptyLinePlaceholder":721},[178,18950,18951],{"class":180,"line":898},[178,18952,16980],{"class":699},[178,18954,18955,18957],{"class":180,"line":914},[178,18956,16497],{"class":699},[178,18958,16487],{"class":319},[178,18960,18961],{"class":180,"line":919},[178,18962,18963],{"class":2008},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[178,18965,18966],{"class":180,"line":935},[178,18967,18968],{"class":319},"    Point m_center;\n",[178,18970,18971],{"class":180,"line":952},[178,18972,5767],{"class":319},[178,18974,18975,18977,18980,18982,18985,18987,18989,18991,18993,18995,18997],{"class":180,"line":966},[178,18976,7133],{"class":699},[178,18978,18979],{"class":184}," isInCircle",[178,18981,944],{"class":319},[178,18983,18984],{"class":184},"Circle",[178,18986,12345],{"class":699},[178,18988,2228],{"class":6985},[178,18990,2318],{"class":319},[178,18992,18899],{"class":184},[178,18994,12345],{"class":699},[178,18996,19],{"class":6985},[178,18998,863],{"class":319},[178,19000,19001],{"class":180,"line":980},[178,19002,3352],{"class":319},[178,19004,19005,19007,19010,19012,19014,19017,19020,19023,19025,19027,19029,19031],{"class":180,"line":985},[178,19006,16497],{"class":699},[178,19008,19009],{"class":319}," dx ",[178,19011,330],{"class":699},[178,19013,18100],{"class":319},[178,19015,19016],{"class":184},"getCenter",[178,19018,19019],{"class":319},"().",[178,19021,19022],{"class":184},"getX",[178,19024,14811],{"class":319},[178,19026,2472],{"class":699},[178,19028,17646],{"class":319},[178,19030,19022],{"class":184},[178,19032,7405],{"class":319},[178,19034,19035,19037,19040,19042,19044,19046,19048,19051,19053,19055,19057,19059],{"class":180,"line":1008},[178,19036,16497],{"class":699},[178,19038,19039],{"class":319}," dy ",[178,19041,330],{"class":699},[178,19043,18100],{"class":319},[178,19045,19016],{"class":184},[178,19047,19019],{"class":319},[178,19049,19050],{"class":184},"getY",[178,19052,14811],{"class":319},[178,19054,2472],{"class":699},[178,19056,17646],{"class":319},[178,19058,19050],{"class":184},[178,19060,7405],{"class":319},[178,19062,19063,19065,19068,19070,19073,19076,19078,19080,19082,19084,19086],{"class":180,"line":1014},[178,19064,16497],{"class":699},[178,19066,19067],{"class":319}," distance ",[178,19069,330],{"class":699},[178,19071,19072],{"class":184}," sqrt",[178,19074,19075],{"class":319},"(dx ",[178,19077,2395],{"class":699},[178,19079,19009],{"class":319},[178,19081,2421],{"class":699},[178,19083,19039],{"class":319},[178,19085,2395],{"class":699},[178,19087,19088],{"class":319}," dy);\n",[178,19090,19091,19093,19096,19098,19100,19103],{"class":180,"line":1019},[178,19092,922],{"class":699},[178,19094,19095],{"class":319}," (distance ",[178,19097,320],{"class":699},[178,19099,18100],{"class":319},[178,19101,19102],{"class":184},"getRadius",[178,19104,19105],{"class":319},"())\n",[178,19107,19108],{"class":180,"line":1033},[178,19109,3814],{"class":319},[178,19111,19112,19114,19116,19119,19121],{"class":180,"line":1046},[178,19113,11430],{"class":319},[178,19115,2983],{"class":699},[178,19117,19118],{"class":188}," \"点在圆内\"",[178,19120,3251],{"class":699},[178,19122,10601],{"class":319},[178,19124,19125],{"class":180,"line":1059},[178,19126,3971],{"class":319},[178,19128,19129],{"class":180,"line":1072},[178,19130,18581],{"class":699},[178,19132,19133],{"class":180,"line":1077},[178,19134,3814],{"class":319},[178,19136,19137,19139,19141,19144,19146],{"class":180,"line":1082},[178,19138,11430],{"class":319},[178,19140,2983],{"class":699},[178,19142,19143],{"class":188}," \"点在圆外\"",[178,19145,3251],{"class":699},[178,19147,10601],{"class":319},[178,19149,19150],{"class":180,"line":1099},[178,19151,3971],{"class":319},[178,19153,19154],{"class":180,"line":9806},[178,19155,3371],{"class":319},[178,19157,19158,19160,19162],{"class":180,"line":9818},[178,19159,1956],{"class":699},[178,19161,838],{"class":184},[178,19163,3760],{"class":319},[178,19165,19166],{"class":180,"line":11477},[178,19167,3352],{"class":319},[178,19169,19170],{"class":180,"line":11502},[178,19171,16811],{"class":2008},[178,19173,19174],{"class":180,"line":11525},[178,19175,16559],{"class":319},[178,19177,19178],{"class":180,"line":11549},[178,19179,19180],{"class":319},"    Point p1;\n",[178,19182,19183],{"class":180,"line":11554},[178,19184,18752],{"class":2008},[178,19186,19187,19189,19191,19194],{"class":180,"line":11559},[178,19188,3357],{"class":319},[178,19190,2983],{"class":699},[178,19192,19193],{"class":188},"\"请输入圆的半径：\"",[178,19195,3100],{"class":319},[178,19197,19198,19200],{"class":180,"line":11564},[178,19199,16497],{"class":699},[178,19201,19202],{"class":319}," r;\n",[178,19204,19205,19207,19209],{"class":180,"line":11573},[178,19206,3796],{"class":319},[178,19208,3236],{"class":699},[178,19210,19211],{"class":319},"r;\n",[178,19213,19214,19216,19219],{"class":180,"line":11578},[178,19215,18353],{"class":319},[178,19217,19218],{"class":184},"setRadius",[178,19220,19221],{"class":319},"(r);\n",[178,19223,19224,19226,19228,19231],{"class":180,"line":11584},[178,19225,3357],{"class":319},[178,19227,2983],{"class":699},[178,19229,19230],{"class":188},"\"请输入圆心坐标：\"",[178,19232,3100],{"class":319},[178,19234,19235,19237],{"class":180,"line":11605},[178,19236,16497],{"class":699},[178,19238,19239],{"class":319}," x, y;\n",[178,19241,19242,19244,19246,19248,19250],{"class":180,"line":11611},[178,19243,3796],{"class":319},[178,19245,3236],{"class":699},[178,19247,2760],{"class":319},[178,19249,3236],{"class":699},[178,19251,19252],{"class":319},"y;\n",[178,19254,19255,19258,19261],{"class":180,"line":11625},[178,19256,19257],{"class":319},"    p1.",[178,19259,19260],{"class":184},"setPoint",[178,19262,19263],{"class":319},"(x, y);\n",[178,19265,19266,19268,19271],{"class":180,"line":11631},[178,19267,18353],{"class":319},[178,19269,19270],{"class":184},"setCenter",[178,19272,19273],{"class":319},"(p1);\n",[178,19275,19276,19278,19280,19283],{"class":180,"line":11658},[178,19277,3357],{"class":319},[178,19279,2983],{"class":699},[178,19281,19282],{"class":188},"\"请输入测试点坐标：\"",[178,19284,3100],{"class":319},[178,19286,19287,19289],{"class":180,"line":11667},[178,19288,16497],{"class":699},[178,19290,19291],{"class":319}," x1, y1;\n",[178,19293,19294,19296,19298,19301,19303],{"class":180,"line":11673},[178,19295,3796],{"class":319},[178,19297,3236],{"class":699},[178,19299,19300],{"class":319},"x1",[178,19302,3236],{"class":699},[178,19304,19305],{"class":319},"y1;\n",[178,19307,19308],{"class":180,"line":11681},[178,19309,19310],{"class":319},"    Point p2;\n",[178,19312,19313,19316,19318],{"class":180,"line":11686},[178,19314,19315],{"class":319},"    p2.",[178,19317,19260],{"class":184},[178,19319,19320],{"class":319},"(x1, y1);\n",[178,19322,19323,19326],{"class":180,"line":18362},[178,19324,19325],{"class":184},"    isInCircle",[178,19327,19328],{"class":319},"(c1, p2);\n",[178,19330,19331],{"class":180,"line":18368},[178,19332,3371],{"class":319},[19,19334,19335],{},"在类中可以让另一个类作为本来的成员",[19,19337,19338],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,19340,19341],{},"创建point.h",[154,19343,19345],{"className":1942,"code":19344,"language":1944,"meta":160,"style":160},"#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",[70,19346,19347,19358,19364,19374,19380,19384,19389,19393,19397,19417,19421,19429,19437,19441,19445,19451,19457],{"__ignoreMap":160},[178,19348,19349,19352,19355],{"class":180,"line":181},[178,19350,19351],{"class":699},"#pragma",[178,19353,19354],{"class":184}," once",[178,19356,19357],{"class":2008}," \u002F\u002F防止头文件重复包含\n",[178,19359,19360,19362],{"class":180,"line":263},[178,19361,3735],{"class":699},[178,19363,3738],{"class":188},[178,19365,19366,19368,19370,19372],{"class":180,"line":274},[178,19367,3743],{"class":699},[178,19369,3746],{"class":699},[178,19371,3749],{"class":184},[178,19373,3100],{"class":319},[178,19375,19376,19378],{"class":180,"line":354},[178,19377,16453],{"class":699},[178,19379,18739],{"class":184},[178,19381,19382],{"class":180,"line":364},[178,19383,3352],{"class":319},[178,19385,19386],{"class":180,"line":740},[178,19387,19388],{"class":2008},"\u002F\u002F做好声明与变量定义就可以\n",[178,19390,19391],{"class":180,"line":746},[178,19392,16475],{"class":699},[178,19394,19395],{"class":180,"line":752},[178,19396,18752],{"class":2008},[178,19398,19399,19401,19403,19405,19407,19409,19411,19413,19415],{"class":180,"line":757},[178,19400,16668],{"class":699},[178,19402,18759],{"class":184},[178,19404,944],{"class":319},[178,19406,15797],{"class":699},[178,19408,18766],{"class":6985},[178,19410,14196],{"class":319},[178,19412,15797],{"class":699},[178,19414,18773],{"class":6985},[178,19416,4495],{"class":319},[178,19418,19419],{"class":180,"line":763},[178,19420,18791],{"class":2008},[178,19422,19423,19425,19427],{"class":180,"line":769},[178,19424,16497],{"class":699},[178,19426,18798],{"class":184},[178,19428,7405],{"class":319},[178,19430,19431,19433,19435],{"class":180,"line":774},[178,19432,16497],{"class":699},[178,19434,18814],{"class":184},[178,19436,7405],{"class":319},[178,19438,19439],{"class":180,"line":780},[178,19440,722],{"emptyLinePlaceholder":721},[178,19442,19443],{"class":180,"line":786},[178,19444,16980],{"class":699},[178,19446,19447,19449],{"class":180,"line":792},[178,19448,16497],{"class":699},[178,19450,18836],{"class":319},[178,19452,19453,19455],{"class":180,"line":798},[178,19454,16497],{"class":699},[178,19456,18843],{"class":319},[178,19458,19459],{"class":180,"line":804},[178,19460,5767],{"class":319},[19,19462,19463],{},"创建point.cpp",[154,19465,19467],{"className":1942,"code":19466,"language":1944,"meta":160,"style":160},"#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",[70,19468,19469,19476,19481,19515,19519,19535],{"__ignoreMap":160},[178,19470,19471,19473],{"class":180,"line":181},[178,19472,3735],{"class":699},[178,19474,19475],{"class":188},"\u003Cpoint.h>\n",[178,19477,19478],{"class":180,"line":263},[178,19479,19480],{"class":2008},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[178,19482,19483,19485,19488,19491,19493,19495,19497,19499,19501,19503,19505,19507,19509,19511,19513],{"class":180,"line":274},[178,19484,16668],{"class":699},[178,19486,19487],{"class":184}," Point",[178,19489,19490],{"class":319},"::",[178,19492,19260],{"class":184},[178,19494,944],{"class":319},[178,19496,15797],{"class":699},[178,19498,18766],{"class":6985},[178,19500,14196],{"class":319},[178,19502,15797],{"class":699},[178,19504,18773],{"class":6985},[178,19506,18776],{"class":319},[178,19508,330],{"class":699},[178,19510,18781],{"class":319},[178,19512,330],{"class":699},[178,19514,18786],{"class":319},[178,19516,19517],{"class":180,"line":354},[178,19518,18791],{"class":2008},[178,19520,19521,19523,19525,19527,19529,19531,19533],{"class":180,"line":364},[178,19522,16497],{"class":699},[178,19524,19487],{"class":184},[178,19526,19490],{"class":319},[178,19528,19022],{"class":184},[178,19530,18801],{"class":319},[178,19532,18804],{"class":699},[178,19534,18807],{"class":319},[178,19536,19537,19539,19541,19543,19545,19547,19549],{"class":180,"line":740},[178,19538,16497],{"class":699},[178,19540,19487],{"class":184},[178,19542,19490],{"class":319},[178,19544,19050],{"class":184},[178,19546,18801],{"class":319},[178,19548,18804],{"class":699},[178,19550,18821],{"class":319},[19,19552,19553],{},"创建circle.h",[154,19555,19557],{"className":1942,"code":19556,"language":1944,"meta":160,"style":160},"#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",[70,19558,19559,19566,19572,19582,19588,19594,19598,19602,19606,19620,19634,19638,19646,19654,19658,19662,19668,19672,19676],{"__ignoreMap":160},[178,19560,19561,19563],{"class":180,"line":181},[178,19562,19351],{"class":699},[178,19564,19565],{"class":184}," once\n",[178,19567,19568,19570],{"class":180,"line":263},[178,19569,3735],{"class":699},[178,19571,3738],{"class":188},[178,19573,19574,19576,19578,19580],{"class":180,"line":274},[178,19575,3743],{"class":699},[178,19577,3746],{"class":699},[178,19579,3749],{"class":184},[178,19581,3100],{"class":319},[178,19583,19584,19586],{"class":180,"line":354},[178,19585,3735],{"class":699},[178,19587,19475],{"class":188},[178,19589,19590,19592],{"class":180,"line":364},[178,19591,16453],{"class":699},[178,19593,16456],{"class":184},[178,19595,19596],{"class":180,"line":740},[178,19597,3352],{"class":319},[178,19599,19600],{"class":180,"line":746},[178,19601,16475],{"class":699},[178,19603,19604],{"class":180,"line":752},[178,19605,18752],{"class":2008},[178,19607,19608,19610,19612,19614,19616,19618],{"class":180,"line":757},[178,19609,16668],{"class":699},[178,19611,18872],{"class":184},[178,19613,944],{"class":319},[178,19615,15797],{"class":699},[178,19617,18879],{"class":6985},[178,19619,4495],{"class":319},[178,19621,19622,19624,19626,19628,19630,19632],{"class":180,"line":763},[178,19623,16668],{"class":699},[178,19625,18894],{"class":184},[178,19627,944],{"class":319},[178,19629,18899],{"class":184},[178,19631,18902],{"class":6985},[178,19633,4495],{"class":319},[178,19635,19636],{"class":180,"line":769},[178,19637,18915],{"class":2008},[178,19639,19640,19642,19644],{"class":180,"line":774},[178,19641,16497],{"class":699},[178,19643,18922],{"class":184},[178,19645,7405],{"class":319},[178,19647,19648,19650,19652],{"class":180,"line":780},[178,19649,18934],{"class":184},[178,19651,18937],{"class":184},[178,19653,7405],{"class":319},[178,19655,19656],{"class":180,"line":786},[178,19657,722],{"emptyLinePlaceholder":721},[178,19659,19660],{"class":180,"line":792},[178,19661,16980],{"class":699},[178,19663,19664,19666],{"class":180,"line":798},[178,19665,16497],{"class":699},[178,19667,16487],{"class":319},[178,19669,19670],{"class":180,"line":804},[178,19671,18963],{"class":2008},[178,19673,19674],{"class":180,"line":810},[178,19675,18968],{"class":319},[178,19677,19678],{"class":180,"line":816},[178,19679,5767],{"class":319},[19,19681,19682],{},"创建circle.cpp",[154,19684,19686],{"className":1942,"code":19685,"language":1944,"meta":160,"style":160},"#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",[70,19687,19688,19695,19718,19740,19745,19761],{"__ignoreMap":160},[178,19689,19690,19692],{"class":180,"line":181},[178,19691,3735],{"class":699},[178,19693,19694],{"class":188},"\u003Ccircle.h>\n",[178,19696,19697,19699,19702,19704,19706,19708,19710,19712,19714,19716],{"class":180,"line":263},[178,19698,7133],{"class":699},[178,19700,19701],{"class":184}," Circle",[178,19703,19490],{"class":319},[178,19705,19218],{"class":184},[178,19707,944],{"class":319},[178,19709,15797],{"class":699},[178,19711,18879],{"class":6985},[178,19713,18882],{"class":319},[178,19715,330],{"class":699},[178,19717,18887],{"class":319},[178,19719,19720,19722,19724,19726,19728,19730,19732,19734,19736,19738],{"class":180,"line":274},[178,19721,7133],{"class":699},[178,19723,19701],{"class":184},[178,19725,19490],{"class":319},[178,19727,19270],{"class":184},[178,19729,944],{"class":319},[178,19731,18899],{"class":184},[178,19733,18902],{"class":6985},[178,19735,18905],{"class":319},[178,19737,330],{"class":699},[178,19739,18910],{"class":319},[178,19741,19742],{"class":180,"line":354},[178,19743,19744],{"class":2008},"\u002F\u002F获取属性\n",[178,19746,19747,19749,19751,19753,19755,19757,19759],{"class":180,"line":364},[178,19748,15797],{"class":699},[178,19750,19701],{"class":184},[178,19752,19490],{"class":319},[178,19754,19102],{"class":184},[178,19756,18801],{"class":319},[178,19758,18804],{"class":699},[178,19760,18929],{"class":319},[178,19762,19763,19765,19767,19769,19771,19773,19775],{"class":180,"line":740},[178,19764,18899],{"class":184},[178,19766,19701],{"class":184},[178,19768,19490],{"class":319},[178,19770,19016],{"class":184},[178,19772,18801],{"class":319},[178,19774,18804],{"class":699},[178,19776,18944],{"class":319},[19,19778,19779],{},"使用封装的类",[154,19781,19783],{"className":1942,"code":19782,"language":1944,"meta":160,"style":160},"#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",[70,19784,19785,19791,19801,19807,19813,19837,19841,19867,19893,19917,19931,19935,19947,19951,19955,19959,19971,19975,19979,19987,19991,19995,19999,20003,20007,20017,20023,20031,20039,20049,20055,20067,20075,20083,20093,20099,20111,20115,20123,20129],{"__ignoreMap":160},[178,19786,19787,19789],{"class":180,"line":181},[178,19788,3735],{"class":699},[178,19790,3738],{"class":188},[178,19792,19793,19795,19797,19799],{"class":180,"line":263},[178,19794,3743],{"class":699},[178,19796,3746],{"class":699},[178,19798,3749],{"class":184},[178,19800,3100],{"class":319},[178,19802,19803,19805],{"class":180,"line":274},[178,19804,3735],{"class":699},[178,19806,19694],{"class":188},[178,19808,19809,19811],{"class":180,"line":354},[178,19810,3735],{"class":699},[178,19812,19475],{"class":188},[178,19814,19815,19817,19819,19821,19823,19825,19827,19829,19831,19833,19835],{"class":180,"line":364},[178,19816,7133],{"class":699},[178,19818,18979],{"class":184},[178,19820,944],{"class":319},[178,19822,18984],{"class":184},[178,19824,12345],{"class":699},[178,19826,2228],{"class":6985},[178,19828,2318],{"class":319},[178,19830,18899],{"class":184},[178,19832,12345],{"class":699},[178,19834,19],{"class":6985},[178,19836,863],{"class":319},[178,19838,19839],{"class":180,"line":740},[178,19840,3352],{"class":319},[178,19842,19843,19845,19847,19849,19851,19853,19855,19857,19859,19861,19863,19865],{"class":180,"line":746},[178,19844,16497],{"class":699},[178,19846,19009],{"class":319},[178,19848,330],{"class":699},[178,19850,18100],{"class":319},[178,19852,19016],{"class":184},[178,19854,19019],{"class":319},[178,19856,19022],{"class":184},[178,19858,14811],{"class":319},[178,19860,2472],{"class":699},[178,19862,17646],{"class":319},[178,19864,19022],{"class":184},[178,19866,7405],{"class":319},[178,19868,19869,19871,19873,19875,19877,19879,19881,19883,19885,19887,19889,19891],{"class":180,"line":752},[178,19870,16497],{"class":699},[178,19872,19039],{"class":319},[178,19874,330],{"class":699},[178,19876,18100],{"class":319},[178,19878,19016],{"class":184},[178,19880,19019],{"class":319},[178,19882,19050],{"class":184},[178,19884,14811],{"class":319},[178,19886,2472],{"class":699},[178,19888,17646],{"class":319},[178,19890,19050],{"class":184},[178,19892,7405],{"class":319},[178,19894,19895,19897,19899,19901,19903,19905,19907,19909,19911,19913,19915],{"class":180,"line":757},[178,19896,16497],{"class":699},[178,19898,19067],{"class":319},[178,19900,330],{"class":699},[178,19902,19072],{"class":184},[178,19904,19075],{"class":319},[178,19906,2395],{"class":699},[178,19908,19009],{"class":319},[178,19910,2421],{"class":699},[178,19912,19039],{"class":319},[178,19914,2395],{"class":699},[178,19916,19088],{"class":319},[178,19918,19919,19921,19923,19925,19927,19929],{"class":180,"line":763},[178,19920,922],{"class":699},[178,19922,19095],{"class":319},[178,19924,320],{"class":699},[178,19926,18100],{"class":319},[178,19928,19102],{"class":184},[178,19930,19105],{"class":319},[178,19932,19933],{"class":180,"line":769},[178,19934,3814],{"class":319},[178,19936,19937,19939,19941,19943,19945],{"class":180,"line":774},[178,19938,11430],{"class":319},[178,19940,2983],{"class":699},[178,19942,19118],{"class":188},[178,19944,3251],{"class":699},[178,19946,10601],{"class":319},[178,19948,19949],{"class":180,"line":780},[178,19950,3971],{"class":319},[178,19952,19953],{"class":180,"line":786},[178,19954,18581],{"class":699},[178,19956,19957],{"class":180,"line":792},[178,19958,3814],{"class":319},[178,19960,19961,19963,19965,19967,19969],{"class":180,"line":798},[178,19962,11430],{"class":319},[178,19964,2983],{"class":699},[178,19966,19143],{"class":188},[178,19968,3251],{"class":699},[178,19970,10601],{"class":319},[178,19972,19973],{"class":180,"line":804},[178,19974,3971],{"class":319},[178,19976,19977],{"class":180,"line":810},[178,19978,3371],{"class":319},[178,19980,19981,19983,19985],{"class":180,"line":816},[178,19982,1956],{"class":699},[178,19984,838],{"class":184},[178,19986,3760],{"class":319},[178,19988,19989],{"class":180,"line":822},[178,19990,3352],{"class":319},[178,19992,19993],{"class":180,"line":827},[178,19994,16811],{"class":2008},[178,19996,19997],{"class":180,"line":832},[178,19998,16559],{"class":319},[178,20000,20001],{"class":180,"line":850},[178,20002,19180],{"class":319},[178,20004,20005],{"class":180,"line":866},[178,20006,18752],{"class":2008},[178,20008,20009,20011,20013,20015],{"class":180,"line":877},[178,20010,3357],{"class":319},[178,20012,2983],{"class":699},[178,20014,19193],{"class":188},[178,20016,3100],{"class":319},[178,20018,20019,20021],{"class":180,"line":882},[178,20020,16497],{"class":699},[178,20022,19202],{"class":319},[178,20024,20025,20027,20029],{"class":180,"line":898},[178,20026,3796],{"class":319},[178,20028,3236],{"class":699},[178,20030,19211],{"class":319},[178,20032,20033,20035,20037],{"class":180,"line":914},[178,20034,18353],{"class":319},[178,20036,19218],{"class":184},[178,20038,19221],{"class":319},[178,20040,20041,20043,20045,20047],{"class":180,"line":919},[178,20042,3357],{"class":319},[178,20044,2983],{"class":699},[178,20046,19230],{"class":188},[178,20048,3100],{"class":319},[178,20050,20051,20053],{"class":180,"line":935},[178,20052,16497],{"class":699},[178,20054,19239],{"class":319},[178,20056,20057,20059,20061,20063,20065],{"class":180,"line":952},[178,20058,3796],{"class":319},[178,20060,3236],{"class":699},[178,20062,2760],{"class":319},[178,20064,3236],{"class":699},[178,20066,19252],{"class":319},[178,20068,20069,20071,20073],{"class":180,"line":966},[178,20070,19257],{"class":319},[178,20072,19260],{"class":184},[178,20074,19263],{"class":319},[178,20076,20077,20079,20081],{"class":180,"line":980},[178,20078,18353],{"class":319},[178,20080,19270],{"class":184},[178,20082,19273],{"class":319},[178,20084,20085,20087,20089,20091],{"class":180,"line":985},[178,20086,3357],{"class":319},[178,20088,2983],{"class":699},[178,20090,19282],{"class":188},[178,20092,3100],{"class":319},[178,20094,20095,20097],{"class":180,"line":1008},[178,20096,16497],{"class":699},[178,20098,19291],{"class":319},[178,20100,20101,20103,20105,20107,20109],{"class":180,"line":1014},[178,20102,3796],{"class":319},[178,20104,3236],{"class":699},[178,20106,19300],{"class":319},[178,20108,3236],{"class":699},[178,20110,19305],{"class":319},[178,20112,20113],{"class":180,"line":1019},[178,20114,19310],{"class":319},[178,20116,20117,20119,20121],{"class":180,"line":1033},[178,20118,19315],{"class":319},[178,20120,19260],{"class":184},[178,20122,19320],{"class":319},[178,20124,20125,20127],{"class":180,"line":1046},[178,20126,19325],{"class":184},[178,20128,19328],{"class":319},[178,20130,20131],{"class":180,"line":1059},[178,20132,3371],{"class":319},[14,20134,20136],{"id":20135},"_82对象的初始化清理","8.2对象的初始化清理",[2946,20138,20139,20142],{},[29,20140,20141],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[29,20143,20144],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[387,20146,20148],{"id":20147},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,20150,20151,20152,20155],{},"对象的",[2093,20153,20154],{},"初始化和清理","也是两个非常重要的安全问题",[19,20157,20158],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,20160,20161],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,20163,20164,20165,20168,20169,20172],{},"c++利用了",[2093,20166,20167],{},"构造函数","和",[2093,20170,20171],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,20174,20175,20176],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[2093,20177,20178],{},"我们不提供构造和析构，编译器会提供",[19,20180,20181],{},[2093,20182,20183],{},"编译器提供的构造函数和析构函数是空实现。",[2946,20185,20186,20189],{},[29,20187,20188],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[29,20190,20191,20192,20195],{},"析构函数：主要作用在于对象",[2093,20193,20194],{},"销毁前","系统自动调用，执行一些清理工作。",[19,20197,20198,20201],{},[2093,20199,20200],{},"构造函数语法：",[70,20202,20203],{},"类名(){}",[26,20205,20206,20209,20212,20215,20218],{},[29,20207,20208],{},"构造函数，没有返回值也不写void",[29,20210,20211],{},"函数名称与类名相同",[29,20213,20214],{},"构造函数可以有参数，因此可以发生重载",[29,20216,20217],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[29,20219,20220,20221,2369],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[70,20222,20223],{},"Person(){}",[19,20225,20226,15555,20229],{},[2093,20227,20228],{},"析构函数语法：",[70,20230,20231],{},"~类名(){}",[26,20233,20234,20237,20240,20246],{},[29,20235,20236],{},"析构函数，没有返回值也不写void",[29,20238,20239],{},"函数名称与类名相同,在名称前加上符号  ~",[29,20241,20242,20243],{},"析构函数不可以有参数，因此",[2093,20244,20245],{},"不可以发生重载",[29,20247,20248],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[154,20250,20252],{"className":1942,"code":20251,"language":1944,"meta":160,"style":160},"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",[70,20253,20254,20260,20264,20268,20273,20280,20284,20297,20301,20306,20313,20317,20330,20334,20338,20342,20346,20354,20358,20366,20370,20374,20382,20386,20391,20395,20402,20406,20419,20423,20431],{"__ignoreMap":160},[178,20255,20256,20258],{"class":180,"line":181},[178,20257,16453],{"class":699},[178,20259,16929],{"class":184},[178,20261,20262],{"class":180,"line":263},[178,20263,3352],{"class":319},[178,20265,20266],{"class":180,"line":274},[178,20267,16475],{"class":699},[178,20269,20270],{"class":180,"line":354},[178,20271,20272],{"class":2008},"    \u002F\u002F构造函数\n",[178,20274,20275,20278],{"class":180,"line":364},[178,20276,20277],{"class":184},"    Person",[178,20279,3760],{"class":319},[178,20281,20282],{"class":180,"line":740},[178,20283,3814],{"class":319},[178,20285,20286,20288,20290,20293,20295],{"class":180,"line":746},[178,20287,11430],{"class":319},[178,20289,2983],{"class":699},[178,20291,20292],{"class":188}," \"Person的构造函数调用\"",[178,20294,3251],{"class":699},[178,20296,10601],{"class":319},[178,20298,20299],{"class":180,"line":752},[178,20300,3971],{"class":319},[178,20302,20303],{"class":180,"line":757},[178,20304,20305],{"class":2008},"    \u002F\u002F析构函数\n",[178,20307,20308,20311],{"class":180,"line":763},[178,20309,20310],{"class":184},"    ~Person",[178,20312,3760],{"class":319},[178,20314,20315],{"class":180,"line":769},[178,20316,3814],{"class":319},[178,20318,20319,20321,20323,20326,20328],{"class":180,"line":774},[178,20320,11430],{"class":319},[178,20322,2983],{"class":699},[178,20324,20325],{"class":188}," \"Person的析构函数调用\"",[178,20327,3251],{"class":699},[178,20329,10601],{"class":319},[178,20331,20332],{"class":180,"line":780},[178,20333,3971],{"class":319},[178,20335,20336],{"class":180,"line":786},[178,20337,722],{"emptyLinePlaceholder":721},[178,20339,20340],{"class":180,"line":792},[178,20341,5767],{"class":319},[178,20343,20344],{"class":180,"line":798},[178,20345,722],{"emptyLinePlaceholder":721},[178,20347,20348,20350,20352],{"class":180,"line":804},[178,20349,7133],{"class":699},[178,20351,7357],{"class":184},[178,20353,3760],{"class":319},[178,20355,20356],{"class":180,"line":810},[178,20357,3352],{"class":319},[178,20359,20360,20363],{"class":180,"line":816},[178,20361,20362],{"class":319},"    Person p;",[178,20364,20365],{"class":2008},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[178,20367,20368],{"class":180,"line":822},[178,20369,3371],{"class":319},[178,20371,20372],{"class":180,"line":827},[178,20373,722],{"emptyLinePlaceholder":721},[178,20375,20376,20378,20380],{"class":180,"line":832},[178,20377,1956],{"class":699},[178,20379,838],{"class":184},[178,20381,12614],{"class":319},[178,20383,20384],{"class":180,"line":850},[178,20385,14971],{"class":319},[178,20387,20388],{"class":180,"line":866},[178,20389,20390],{"class":2008},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[178,20392,20393],{"class":180,"line":877},[178,20394,722],{"emptyLinePlaceholder":721},[178,20396,20397,20399],{"class":180,"line":882},[178,20398,20362],{"class":319},[178,20400,20401],{"class":2008},"\u002F\u002F只有构造函数\n",[178,20403,20404],{"class":180,"line":898},[178,20405,722],{"emptyLinePlaceholder":721},[178,20407,20408,20410,20412,20414,20416],{"class":180,"line":914},[178,20409,4087],{"class":184},[178,20411,944],{"class":319},[178,20413,4092],{"class":188},[178,20415,7735],{"class":319},[178,20417,20418],{"class":2008},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[178,20420,20421],{"class":180,"line":919},[178,20422,722],{"emptyLinePlaceholder":721},[178,20424,20425,20427,20429],{"class":180,"line":935},[178,20426,5862],{"class":699},[178,20428,930],{"class":195},[178,20430,3100],{"class":319},[178,20432,20433],{"class":180,"line":952},[178,20434,3371],{"class":319},[19,20436,20437],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[387,20439,20441],{"id":20440},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,20443,20444],{},"两种分类方式：",[19,20446,20447],{},"​\t按参数分为： 有参构造和无参构造",[19,20449,20450],{},"​\t按类型分为： 普通构造和拷贝构造",[19,20452,20453],{},"三种调用方式：",[19,20455,20456],{},"​\t括号法",[19,20458,20459],{},"​\t显示法",[19,20461,20462],{},"​\t隐式转换法",[154,20464,20466],{"className":1942,"code":20465,"language":1944,"meta":160,"style":160},"#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",[70,20467,20468,20474,20484,20489,20494,20499,20504,20508,20516,20520,20524,20528,20534,20538,20551,20555,20567,20571,20580,20593,20597,20601,20607,20611,20624,20628,20633,20649,20653,20658,20667,20680,20684,20690,20694,20699,20707,20711,20716,20720,20728,20732,20737,20742,20747,20752,20757,20761,20766,20771,20776,20781,20785,20790,20795,20811,20823,20828,20832,20837,20842,20847,20851,20856,20870,20883,20887,20895,20899,20905,20911,20919],{"__ignoreMap":160},[178,20469,20470,20472],{"class":180,"line":181},[178,20471,3735],{"class":699},[178,20473,3738],{"class":188},[178,20475,20476,20478,20480,20482],{"class":180,"line":263},[178,20477,3743],{"class":699},[178,20479,3746],{"class":699},[178,20481,3749],{"class":184},[178,20483,3100],{"class":319},[178,20485,20486],{"class":180,"line":274},[178,20487,20488],{"class":2008},"\u002F\u002F1.构造函数的分类及调用\n",[178,20490,20491],{"class":180,"line":354},[178,20492,20493],{"class":2008},"\u002F\u002F分类\n",[178,20495,20496],{"class":180,"line":364},[178,20497,20498],{"class":2008},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[178,20500,20501],{"class":180,"line":740},[178,20502,20503],{"class":2008},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[178,20505,20506],{"class":180,"line":746},[178,20507,722],{"emptyLinePlaceholder":721},[178,20509,20510,20512,20514],{"class":180,"line":752},[178,20511,16453],{"class":699},[178,20513,17327],{"class":184},[178,20515,4450],{"class":319},[178,20517,20518],{"class":180,"line":757},[178,20519,3352],{"class":319},[178,20521,20522],{"class":180,"line":763},[178,20523,16475],{"class":699},[178,20525,20526],{"class":180,"line":769},[178,20527,20272],{"class":2008},[178,20529,20530,20532],{"class":180,"line":774},[178,20531,20277],{"class":184},[178,20533,3760],{"class":319},[178,20535,20536],{"class":180,"line":780},[178,20537,3814],{"class":319},[178,20539,20540,20542,20544,20547,20549],{"class":180,"line":786},[178,20541,5224],{"class":319},[178,20543,2983],{"class":699},[178,20545,20546],{"class":188},"\"Person构造函数无参构造\"",[178,20548,2983],{"class":699},[178,20550,3005],{"class":319},[178,20552,20553],{"class":180,"line":792},[178,20554,3971],{"class":319},[178,20556,20557,20559,20561,20563,20565],{"class":180,"line":798},[178,20558,20277],{"class":184},[178,20560,944],{"class":319},[178,20562,1956],{"class":699},[178,20564,3205],{"class":6985},[178,20566,863],{"class":319},[178,20568,20569],{"class":180,"line":804},[178,20570,3814],{"class":319},[178,20572,20573,20576,20578],{"class":180,"line":810},[178,20574,20575],{"class":319},"        age",[178,20577,330],{"class":699},[178,20579,7966],{"class":319},[178,20581,20582,20584,20586,20589,20591],{"class":180,"line":816},[178,20583,5224],{"class":319},[178,20585,2983],{"class":699},[178,20587,20588],{"class":188},"\"Person构造函数有参构造\"",[178,20590,2983],{"class":699},[178,20592,3005],{"class":319},[178,20594,20595],{"class":180,"line":822},[178,20596,3971],{"class":319},[178,20598,20599],{"class":180,"line":827},[178,20600,20305],{"class":2008},[178,20602,20603,20605],{"class":180,"line":832},[178,20604,20310],{"class":184},[178,20606,3760],{"class":319},[178,20608,20609],{"class":180,"line":850},[178,20610,3814],{"class":319},[178,20612,20613,20615,20617,20620,20622],{"class":180,"line":866},[178,20614,5224],{"class":319},[178,20616,2983],{"class":699},[178,20618,20619],{"class":188},"\"Person析构函数被调用\"",[178,20621,2983],{"class":699},[178,20623,3005],{"class":319},[178,20625,20626],{"class":180,"line":877},[178,20627,3971],{"class":319},[178,20629,20630],{"class":180,"line":882},[178,20631,20632],{"class":2008},"    \u002F\u002F拷贝构造函数\n",[178,20634,20635,20637,20639,20641,20643,20645,20647],{"class":180,"line":898},[178,20636,20277],{"class":184},[178,20638,944],{"class":319},[178,20640,8561],{"class":699},[178,20642,17327],{"class":184},[178,20644,12345],{"class":699},[178,20646,19],{"class":6985},[178,20648,863],{"class":319},[178,20650,20651],{"class":180,"line":914},[178,20652,3814],{"class":319},[178,20654,20655],{"class":180,"line":919},[178,20656,20657],{"class":2008},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[178,20659,20660,20662,20664],{"class":180,"line":935},[178,20661,20575],{"class":319},[178,20663,330],{"class":699},[178,20665,20666],{"class":319},"p.age;\n",[178,20668,20669,20671,20673,20676,20678],{"class":180,"line":952},[178,20670,5224],{"class":319},[178,20672,2983],{"class":699},[178,20674,20675],{"class":188},"\"Person拷贝构造函数被调用\"",[178,20677,2983],{"class":699},[178,20679,3005],{"class":319},[178,20681,20682],{"class":180,"line":966},[178,20683,3971],{"class":319},[178,20685,20686,20688],{"class":180,"line":980},[178,20687,3769],{"class":699},[178,20689,9566],{"class":319},[178,20691,20692],{"class":180,"line":985},[178,20693,5767],{"class":319},[178,20695,20696],{"class":180,"line":1008},[178,20697,20698],{"class":2008},"\u002F\u002F调用\n",[178,20700,20701,20703,20705],{"class":180,"line":1014},[178,20702,7133],{"class":699},[178,20704,7357],{"class":184},[178,20706,3760],{"class":319},[178,20708,20709],{"class":180,"line":1019},[178,20710,3352],{"class":319},[178,20712,20713],{"class":180,"line":1033},[178,20714,20715],{"class":2008},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[178,20717,20718],{"class":180,"line":1046},[178,20719,3371],{"class":319},[178,20721,20722,20724,20726],{"class":180,"line":1059},[178,20723,7133],{"class":699},[178,20725,7426],{"class":184},[178,20727,3760],{"class":319},[178,20729,20730],{"class":180,"line":1072},[178,20731,3352],{"class":319},[178,20733,20734],{"class":180,"line":1077},[178,20735,20736],{"class":2008},"    \u002F\u002F1.括号法\n",[178,20738,20739],{"class":180,"line":1082},[178,20740,20741],{"class":2008},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[178,20743,20744],{"class":180,"line":1099},[178,20745,20746],{"class":2008},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[178,20748,20749],{"class":180,"line":9806},[178,20750,20751],{"class":2008},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[178,20753,20754],{"class":180,"line":9818},[178,20755,20756],{"class":2008},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[178,20758,20759],{"class":180,"line":11477},[178,20760,722],{"emptyLinePlaceholder":721},[178,20762,20763],{"class":180,"line":11502},[178,20764,20765],{"class":2008},"    \u002F\u002F注意事项\n",[178,20767,20768],{"class":180,"line":11525},[178,20769,20770],{"class":2008},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[178,20772,20773],{"class":180,"line":11549},[178,20774,20775],{"class":2008},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[178,20777,20778],{"class":180,"line":11554},[178,20779,20780],{"class":2008},"    \u002F\u002F Person p4();\n",[178,20782,20783],{"class":180,"line":11559},[178,20784,722],{"emptyLinePlaceholder":721},[178,20786,20787],{"class":180,"line":11564},[178,20788,20789],{"class":2008},"    \u002F\u002F2.显示法\n",[178,20791,20792],{"class":180,"line":11573},[178,20793,20794],{"class":319},"    Person p1;\n",[178,20796,20797,20800,20802,20805,20807,20809],{"class":180,"line":11578},[178,20798,20799],{"class":319},"    Person p2",[178,20801,330],{"class":699},[178,20803,20804],{"class":184},"Person",[178,20806,944],{"class":319},[178,20808,2386],{"class":195},[178,20810,4495],{"class":319},[178,20812,20813,20816,20818,20820],{"class":180,"line":11584},[178,20814,20815],{"class":319},"    Person p3",[178,20817,330],{"class":699},[178,20819,20804],{"class":184},[178,20821,20822],{"class":319},"(p2);\n",[178,20824,20825],{"class":180,"line":11605},[178,20826,20827],{"class":2008},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[178,20829,20830],{"class":180,"line":11611},[178,20831,722],{"emptyLinePlaceholder":721},[178,20833,20834],{"class":180,"line":11625},[178,20835,20836],{"class":2008},"    \u002F\u002F 注意事项2\n",[178,20838,20839],{"class":180,"line":11631},[178,20840,20841],{"class":2008},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[178,20843,20844],{"class":180,"line":11658},[178,20845,20846],{"class":2008},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[178,20848,20849],{"class":180,"line":11667},[178,20850,722],{"emptyLinePlaceholder":721},[178,20852,20853],{"class":180,"line":11673},[178,20854,20855],{"class":2008},"    \u002F\u002F3.隐士转换法\n",[178,20857,20858,20861,20863,20865,20867],{"class":180,"line":11681},[178,20859,20860],{"class":319},"    Person p4",[178,20862,330],{"class":699},[178,20864,2386],{"class":195},[178,20866,2005],{"class":319},[178,20868,20869],{"class":2008},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[178,20871,20872,20875,20877,20880],{"class":180,"line":11686},[178,20873,20874],{"class":319},"    Person p5",[178,20876,330],{"class":699},[178,20878,20879],{"class":319},"p4;",[178,20881,20882],{"class":2008}," \u002F\u002F 这里会调用拷贝构造函数\n",[178,20884,20885],{"class":180,"line":18362},[178,20886,3371],{"class":319},[178,20888,20889,20891,20893],{"class":180,"line":18368},[178,20890,1956],{"class":699},[178,20892,838],{"class":184},[178,20894,3760],{"class":319},[178,20896,20897],{"class":180,"line":18391},[178,20898,3352],{"class":319},[178,20900,20901,20903],{"class":180,"line":18397},[178,20902,7402],{"class":184},[178,20904,7405],{"class":319},[178,20906,20907,20909],{"class":180,"line":18420},[178,20908,7471],{"class":184},[178,20910,7405],{"class":319},[178,20912,20913,20915,20917],{"class":180,"line":18434},[178,20914,5862],{"class":699},[178,20916,930],{"class":195},[178,20918,3100],{"class":319},[178,20920,20921],{"class":180,"line":18454},[178,20922,3371],{"class":319},[19,20924,20925,20928],{},[2093,20926,20927],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[387,20930,20932],{"id":20931},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,20934,20935],{},"C++中拷贝构造函数调用时机通常有三种情况",[2946,20937,20938,20941,20944],{},[29,20939,20940],{},"使用一个已经创建完毕的对象来初始化一个新对象",[29,20942,20943],{},"值传递的方式给函数参数传值",[29,20945,20946],{},"以值方式返回局部对象",[154,20948,20950],{"className":1942,"code":20949,"language":1944,"meta":160,"style":160},"#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",[70,20951,20952,20958,20968,20972,20977,20981,20986,20991,20996,21002,21006,21010,21016,21020,21033,21037,21042,21054,21058,21066,21079,21083,21087,21103,21107,21116,21129,21133,21139,21143,21155,21159,21165,21169,21173,21181,21185,21198,21206,21224,21228,21233,21238,21253,21257,21270,21274,21282,21286,21290,21298,21302,21307,21316,21320,21324,21349,21359,21363,21371,21375,21386,21411,21415,21419,21423,21431,21435,21440,21445,21452,21457,21462,21467,21472,21476,21481,21485,21490,21494,21499,21504,21508,21512,21517,21522,21530],{"__ignoreMap":160},[178,20953,20954,20956],{"class":180,"line":181},[178,20955,3735],{"class":699},[178,20957,3738],{"class":188},[178,20959,20960,20962,20964,20966],{"class":180,"line":263},[178,20961,3743],{"class":699},[178,20963,3746],{"class":699},[178,20965,3749],{"class":184},[178,20967,3100],{"class":319},[178,20969,20970],{"class":180,"line":274},[178,20971,722],{"emptyLinePlaceholder":721},[178,20973,20974],{"class":180,"line":354},[178,20975,20976],{"class":2008},"\u002F\u002F拷贝构造函数调用时机\n",[178,20978,20979],{"class":180,"line":364},[178,20980,722],{"emptyLinePlaceholder":721},[178,20982,20983],{"class":180,"line":740},[178,20984,20985],{"class":2008},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[178,20987,20988],{"class":180,"line":746},[178,20989,20990],{"class":2008},"\u002F\u002F2.值传递的方式给函数参数传值\n",[178,20992,20993],{"class":180,"line":752},[178,20994,20995],{"class":2008},"\u002F\u002F3.以值方式返回局部对象\n",[178,20997,20998,21000],{"class":180,"line":757},[178,20999,16453],{"class":699},[178,21001,16929],{"class":184},[178,21003,21004],{"class":180,"line":763},[178,21005,3352],{"class":319},[178,21007,21008],{"class":180,"line":769},[178,21009,16475],{"class":699},[178,21011,21012,21014],{"class":180,"line":774},[178,21013,20277],{"class":184},[178,21015,3760],{"class":319},[178,21017,21018],{"class":180,"line":780},[178,21019,3814],{"class":319},[178,21021,21022,21024,21026,21029,21031],{"class":180,"line":786},[178,21023,11430],{"class":319},[178,21025,2983],{"class":699},[178,21027,21028],{"class":188}," \"Person的默认构造函数调用\"",[178,21030,3251],{"class":699},[178,21032,10601],{"class":319},[178,21034,21035],{"class":180,"line":792},[178,21036,3971],{"class":319},[178,21038,21039],{"class":180,"line":798},[178,21040,21041],{"class":2008},"    \u002F\u002F有参构造\n",[178,21043,21044,21046,21048,21050,21052],{"class":180,"line":804},[178,21045,20277],{"class":184},[178,21047,944],{"class":319},[178,21049,1956],{"class":699},[178,21051,17447],{"class":6985},[178,21053,863],{"class":319},[178,21055,21056],{"class":180,"line":810},[178,21057,3814],{"class":319},[178,21059,21060,21062,21064],{"class":180,"line":816},[178,21061,17501],{"class":319},[178,21063,330],{"class":699},[178,21065,9566],{"class":319},[178,21067,21068,21070,21072,21075,21077],{"class":180,"line":822},[178,21069,11430],{"class":319},[178,21071,2983],{"class":699},[178,21073,21074],{"class":188}," \"Person的有参构造函数调用\"",[178,21076,3251],{"class":699},[178,21078,10601],{"class":319},[178,21080,21081],{"class":180,"line":827},[178,21082,3971],{"class":319},[178,21084,21085],{"class":180,"line":832},[178,21086,20632],{"class":2008},[178,21088,21089,21091,21093,21095,21097,21099,21101],{"class":180,"line":850},[178,21090,20277],{"class":184},[178,21092,944],{"class":319},[178,21094,8561],{"class":699},[178,21096,17327],{"class":184},[178,21098,12345],{"class":699},[178,21100,19],{"class":6985},[178,21102,863],{"class":319},[178,21104,21105],{"class":180,"line":866},[178,21106,3814],{"class":319},[178,21108,21109,21111,21113],{"class":180,"line":877},[178,21110,17501],{"class":319},[178,21112,330],{"class":699},[178,21114,21115],{"class":319}," p.m_Age;\n",[178,21117,21118,21120,21122,21125,21127],{"class":180,"line":882},[178,21119,11430],{"class":319},[178,21121,2983],{"class":699},[178,21123,21124],{"class":188}," \"Person的拷贝构造函数调用\"",[178,21126,3251],{"class":699},[178,21128,10601],{"class":319},[178,21130,21131],{"class":180,"line":898},[178,21132,3971],{"class":319},[178,21134,21135,21137],{"class":180,"line":914},[178,21136,20310],{"class":184},[178,21138,3760],{"class":319},[178,21140,21141],{"class":180,"line":919},[178,21142,3814],{"class":319},[178,21144,21145,21147,21149,21151,21153],{"class":180,"line":935},[178,21146,11430],{"class":319},[178,21148,2983],{"class":699},[178,21150,20325],{"class":188},[178,21152,3251],{"class":699},[178,21154,10601],{"class":319},[178,21156,21157],{"class":180,"line":952},[178,21158,3971],{"class":319},[178,21160,21161,21163],{"class":180,"line":966},[178,21162,3769],{"class":699},[178,21164,17424],{"class":319},[178,21166,21167],{"class":180,"line":980},[178,21168,5767],{"class":319},[178,21170,21171],{"class":180,"line":985},[178,21172,20985],{"class":2008},[178,21174,21175,21177,21179],{"class":180,"line":1008},[178,21176,7133],{"class":699},[178,21178,7357],{"class":184},[178,21180,3760],{"class":319},[178,21182,21183],{"class":180,"line":1014},[178,21184,3352],{"class":319},[178,21186,21187,21190,21192,21194,21196],{"class":180,"line":1019},[178,21188,21189],{"class":319},"    Person ",[178,21191,8899],{"class":184},[178,21193,944],{"class":319},[178,21195,2640],{"class":195},[178,21197,4495],{"class":319},[178,21199,21200,21202,21204],{"class":180,"line":1033},[178,21201,21189],{"class":319},[178,21203,8802],{"class":184},[178,21205,19273],{"class":319},[178,21207,21208,21210,21212,21215,21217,21220,21222],{"class":180,"line":1046},[178,21209,3357],{"class":319},[178,21211,2983],{"class":699},[178,21213,21214],{"class":188},"\"P2的年龄为：\"",[178,21216,2983],{"class":699},[178,21218,21219],{"class":319},"p2.m_Age",[178,21221,2983],{"class":699},[178,21223,3005],{"class":319},[178,21225,21226],{"class":180,"line":1059},[178,21227,3371],{"class":319},[178,21229,21230],{"class":180,"line":1072},[178,21231,21232],{"class":2008},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[178,21234,21235],{"class":180,"line":1077},[178,21236,21237],{"class":2008},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[178,21239,21240,21242,21245,21247,21249,21251],{"class":180,"line":1082},[178,21241,7133],{"class":699},[178,21243,21244],{"class":184}," doWork",[178,21246,944],{"class":319},[178,21248,20804],{"class":184},[178,21250,8594],{"class":6985},[178,21252,863],{"class":319},[178,21254,21255],{"class":180,"line":1099},[178,21256,3352],{"class":319},[178,21258,21259,21261,21263,21266,21268],{"class":180,"line":9806},[178,21260,8298],{"class":319},[178,21262,2983],{"class":699},[178,21264,21265],{"class":188}," \"doWork函数调用\"",[178,21267,3251],{"class":699},[178,21269,10601],{"class":319},[178,21271,21272],{"class":180,"line":9818},[178,21273,3371],{"class":319},[178,21275,21276,21278,21280],{"class":180,"line":11477},[178,21277,7133],{"class":699},[178,21279,7426],{"class":184},[178,21281,3760],{"class":319},[178,21283,21284],{"class":180,"line":11502},[178,21285,3352],{"class":319},[178,21287,21288],{"class":180,"line":11525},[178,21289,17071],{"class":319},[178,21291,21292,21295],{"class":180,"line":11549},[178,21293,21294],{"class":184},"    doWork",[178,21296,21297],{"class":319},"(p);\n",[178,21299,21300],{"class":180,"line":11554},[178,21301,3371],{"class":319},[178,21303,21304],{"class":180,"line":11559},[178,21305,21306],{"class":2008},"\u002F\u002F 3.以值方式返回局部对象\n",[178,21308,21309,21311,21314],{"class":180,"line":11564},[178,21310,20804],{"class":184},[178,21312,21313],{"class":184}," doWork2",[178,21315,3760],{"class":319},[178,21317,21318],{"class":180,"line":11573},[178,21319,3352],{"class":319},[178,21321,21322],{"class":180,"line":11578},[178,21323,20794],{"class":319},[178,21325,21326,21328,21330,21332,21334,21336,21338,21340,21342,21344,21346],{"class":180,"line":11584},[178,21327,3357],{"class":319},[178,21329,2983],{"class":699},[178,21331,944],{"class":319},[178,21333,1956],{"class":699},[178,21335,8287],{"class":699},[178,21337,2369],{"class":319},[178,21339,2293],{"class":699},[178,21341,8899],{"class":319},[178,21343,2983],{"class":699},[178,21345,3048],{"class":319},[178,21347,21348],{"class":2008},"\u002F\u002F打印p1的地址\n",[178,21350,21351,21353,21356],{"class":180,"line":11605},[178,21352,5862],{"class":699},[178,21354,21355],{"class":319}," p1;",[178,21357,21358],{"class":2008},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[178,21360,21361],{"class":180,"line":11611},[178,21362,3371],{"class":319},[178,21364,21365,21367,21369],{"class":180,"line":11625},[178,21366,7133],{"class":699},[178,21368,7498],{"class":184},[178,21370,3760],{"class":319},[178,21372,21373],{"class":180,"line":11631},[178,21374,3352],{"class":319},[178,21376,21377,21380,21382,21384],{"class":180,"line":11658},[178,21378,21379],{"class":319},"    Person p ",[178,21381,330],{"class":699},[178,21383,21313],{"class":184},[178,21385,7405],{"class":319},[178,21387,21388,21390,21392,21394,21396,21398,21400,21402,21404,21406,21408],{"class":180,"line":11667},[178,21389,3357],{"class":319},[178,21391,2983],{"class":699},[178,21393,944],{"class":319},[178,21395,1956],{"class":699},[178,21397,8287],{"class":699},[178,21399,2369],{"class":319},[178,21401,2293],{"class":699},[178,21403,19],{"class":319},[178,21405,2983],{"class":699},[178,21407,3048],{"class":319},[178,21409,21410],{"class":2008},"\u002F\u002F打印p的地址\n",[178,21412,21413],{"class":180,"line":11673},[178,21414,3371],{"class":319},[178,21416,21417],{"class":180,"line":11681},[178,21418,722],{"emptyLinePlaceholder":721},[178,21420,21421],{"class":180,"line":11686},[178,21422,722],{"emptyLinePlaceholder":721},[178,21424,21425,21427,21429],{"class":180,"line":18362},[178,21426,1956],{"class":699},[178,21428,838],{"class":184},[178,21430,3760],{"class":319},[178,21432,21433],{"class":180,"line":18368},[178,21434,3352],{"class":319},[178,21436,21437],{"class":180,"line":18391},[178,21438,21439],{"class":2008},"    \u002F\u002F test01();\n",[178,21441,21442],{"class":180,"line":18397},[178,21443,21444],{"class":2008},"    \u002F\u002F test02();\n",[178,21446,21447,21450],{"class":180,"line":18420},[178,21448,21449],{"class":184},"    test03",[178,21451,7405],{"class":319},[178,21453,21454],{"class":180,"line":18434},[178,21455,21456],{"class":2008},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[178,21458,21459],{"class":180,"line":18454},[178,21460,21461],{"class":2008},"\u002F\u002F 输出结果如下：\n",[178,21463,21464],{"class":180,"line":18460},[178,21465,21466],{"class":2008},"\u002F\u002F Person的默认构造函数调用\n",[178,21468,21469],{"class":180,"line":18471},[178,21470,21471],{"class":2008},"\u002F\u002F 0x7fffffffceec\n",[178,21473,21474],{"class":180,"line":18494},[178,21475,21471],{"class":2008},[178,21477,21478],{"class":180,"line":18516},[178,21479,21480],{"class":2008},"\u002F\u002F Person的析构函数调用\n",[178,21482,21483],{"class":180,"line":18521},[178,21484,722],{"emptyLinePlaceholder":721},[178,21486,21487],{"class":180,"line":18527},[178,21488,21489],{"class":2008},"\u002F\u002F 之前的输出结果如下：\n",[178,21491,21492],{"class":180,"line":18541},[178,21493,21466],{"class":2008},[178,21495,21496],{"class":180,"line":18554},[178,21497,21498],{"class":2008},"\u002F\u002F 地址\n",[178,21500,21501],{"class":180,"line":18559},[178,21502,21503],{"class":2008},"\u002F\u002F Person的拷贝构造函数调用\n",[178,21505,21506],{"class":180,"line":18573},[178,21507,21480],{"class":2008},[178,21509,21510],{"class":180,"line":18578},[178,21511,21498],{"class":2008},[178,21513,21514],{"class":180,"line":18584},[178,21515,21516],{"class":2008},"\u002F\u002F (这两次输出的地址也是不同的) \n",[178,21518,21519],{"class":180,"line":18589},[178,21520,21521],{"class":2008},"\u002F\u002F Person的析构函数调用     \n",[178,21523,21524,21526,21528],{"class":180,"line":18603},[178,21525,5862],{"class":699},[178,21527,930],{"class":195},[178,21529,3100],{"class":319},[178,21531,21532],{"class":180,"line":18608},[178,21533,3371],{"class":319},[19,21535,21536],{},"简化版理解",[154,21538,21540],{"className":1942,"code":21539,"language":1944,"meta":160,"style":160},"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",[70,21541,21542,21550,21554,21560,21573,21584,21588,21600,21613,21621,21625,21641,21654,21663,21667,21672,21678,21691,21695,21699,21706,21710,21714,21719,21727,21731,21747,21760,21773,21777,21782,21790,21794,21798,21803,21808,21824,21832,21839,21845,21849,21853,21858,21866,21870,21874,21897,21904,21908,21912,21920,21924,21934,21956,21960,21964,21968,21976,21980,21985,21990,21996,22000,22010,22014,22022],{"__ignoreMap":160},[178,21543,21544,21546,21548],{"class":180,"line":181},[178,21545,16453],{"class":699},[178,21547,17327],{"class":184},[178,21549,17330],{"class":319},[178,21551,21552],{"class":180,"line":263},[178,21553,16475],{"class":699},[178,21555,21556,21558],{"class":180,"line":274},[178,21557,20277],{"class":184},[178,21559,12614],{"class":319},[178,21561,21562,21564,21566,21569,21571],{"class":180,"line":354},[178,21563,11430],{"class":319},[178,21565,2983],{"class":699},[178,21567,21568],{"class":188}," \"无参构造函数!\"",[178,21570,3251],{"class":699},[178,21572,10601],{"class":319},[178,21574,21575,21578,21580,21582],{"class":180,"line":364},[178,21576,21577],{"class":319},"        mAge ",[178,21579,330],{"class":699},[178,21581,930],{"class":195},[178,21583,3100],{"class":319},[178,21585,21586],{"class":180,"line":740},[178,21587,3971],{"class":319},[178,21589,21590,21592,21594,21596,21598],{"class":180,"line":746},[178,21591,20277],{"class":184},[178,21593,944],{"class":319},[178,21595,1956],{"class":699},[178,21597,17447],{"class":6985},[178,21599,14203],{"class":319},[178,21601,21602,21604,21606,21609,21611],{"class":180,"line":752},[178,21603,11430],{"class":319},[178,21605,2983],{"class":699},[178,21607,21608],{"class":188}," \"有参构造函数!\"",[178,21610,3251],{"class":699},[178,21612,10601],{"class":319},[178,21614,21615,21617,21619],{"class":180,"line":757},[178,21616,21577],{"class":319},[178,21618,330],{"class":699},[178,21620,9566],{"class":319},[178,21622,21623],{"class":180,"line":763},[178,21624,3971],{"class":319},[178,21626,21627,21629,21631,21633,21635,21637,21639],{"class":180,"line":769},[178,21628,20277],{"class":184},[178,21630,944],{"class":319},[178,21632,8561],{"class":699},[178,21634,17327],{"class":184},[178,21636,2293],{"class":699},[178,21638,8594],{"class":6985},[178,21640,14203],{"class":319},[178,21642,21643,21645,21647,21650,21652],{"class":180,"line":774},[178,21644,11430],{"class":319},[178,21646,2983],{"class":699},[178,21648,21649],{"class":188}," \"拷贝构造函数!\"",[178,21651,3251],{"class":699},[178,21653,10601],{"class":319},[178,21655,21656,21658,21660],{"class":180,"line":780},[178,21657,21577],{"class":319},[178,21659,330],{"class":699},[178,21661,21662],{"class":319}," p.mAge;\n",[178,21664,21665],{"class":180,"line":786},[178,21666,3971],{"class":319},[178,21668,21669],{"class":180,"line":792},[178,21670,21671],{"class":2008},"    \u002F\u002F析构函数在释放内存之前调用\n",[178,21673,21674,21676],{"class":180,"line":798},[178,21675,20310],{"class":184},[178,21677,12614],{"class":319},[178,21679,21680,21682,21684,21687,21689],{"class":180,"line":804},[178,21681,11430],{"class":319},[178,21683,2983],{"class":699},[178,21685,21686],{"class":188}," \"析构函数!\"",[178,21688,3251],{"class":699},[178,21690,10601],{"class":319},[178,21692,21693],{"class":180,"line":810},[178,21694,3971],{"class":319},[178,21696,21697],{"class":180,"line":816},[178,21698,16475],{"class":699},[178,21700,21701,21703],{"class":180,"line":822},[178,21702,3769],{"class":699},[178,21704,21705],{"class":319}," mAge;\n",[178,21707,21708],{"class":180,"line":827},[178,21709,5767],{"class":319},[178,21711,21712],{"class":180,"line":832},[178,21713,722],{"emptyLinePlaceholder":721},[178,21715,21716],{"class":180,"line":850},[178,21717,21718],{"class":2008},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[178,21720,21721,21723,21725],{"class":180,"line":866},[178,21722,7133],{"class":699},[178,21724,7357],{"class":184},[178,21726,12614],{"class":319},[178,21728,21729],{"class":180,"line":877},[178,21730,722],{"emptyLinePlaceholder":721},[178,21732,21733,21735,21738,21740,21742,21744],{"class":180,"line":882},[178,21734,21189],{"class":319},[178,21736,21737],{"class":184},"man",[178,21739,944],{"class":319},[178,21741,2251],{"class":195},[178,21743,7735],{"class":319},[178,21745,21746],{"class":2008}," \u002F\u002Fp对象已经创建完毕\n",[178,21748,21749,21751,21754,21757],{"class":180,"line":898},[178,21750,21189],{"class":319},[178,21752,21753],{"class":184},"newman",[178,21755,21756],{"class":319},"(man);",[178,21758,21759],{"class":2008}," \u002F\u002F调用拷贝构造函数\n",[178,21761,21762,21765,21767,21770],{"class":180,"line":914},[178,21763,21764],{"class":319},"    Person newman2 ",[178,21766,330],{"class":699},[178,21768,21769],{"class":319}," man;",[178,21771,21772],{"class":2008}," \u002F\u002F拷贝构造\n",[178,21774,21775],{"class":180,"line":919},[178,21776,722],{"emptyLinePlaceholder":721},[178,21778,21779],{"class":180,"line":935},[178,21780,21781],{"class":2008},"    \u002F\u002FPerson newman3;\n",[178,21783,21784,21787],{"class":180,"line":952},[178,21785,21786],{"class":2008},"    \u002F\u002Fnewman3 = man;",[178,21788,21789],{"class":2008}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[178,21791,21792],{"class":180,"line":966},[178,21793,3371],{"class":319},[178,21795,21796],{"class":180,"line":980},[178,21797,722],{"emptyLinePlaceholder":721},[178,21799,21800],{"class":180,"line":985},[178,21801,21802],{"class":2008},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[178,21804,21805],{"class":180,"line":1008},[178,21806,21807],{"class":2008},"\u002F\u002F相当于Person p1 = p;\n",[178,21809,21810,21812,21814,21816,21818,21821],{"class":180,"line":1014},[178,21811,7133],{"class":699},[178,21813,21244],{"class":184},[178,21815,944],{"class":319},[178,21817,20804],{"class":184},[178,21819,21820],{"class":6985}," p1",[178,21822,21823],{"class":319},") {}\n",[178,21825,21826,21828,21830],{"class":180,"line":1019},[178,21827,7133],{"class":699},[178,21829,7426],{"class":184},[178,21831,12614],{"class":319},[178,21833,21834,21836],{"class":180,"line":1033},[178,21835,20362],{"class":319},[178,21837,21838],{"class":2008}," \u002F\u002F无参构造函数\n",[178,21840,21841,21843],{"class":180,"line":1046},[178,21842,21294],{"class":184},[178,21844,21297],{"class":319},[178,21846,21847],{"class":180,"line":1059},[178,21848,3371],{"class":319},[178,21850,21851],{"class":180,"line":1072},[178,21852,722],{"emptyLinePlaceholder":721},[178,21854,21855],{"class":180,"line":1077},[178,21856,21857],{"class":2008},"\u002F\u002F3. 以值方式返回局部对象\n",[178,21859,21860,21862,21864],{"class":180,"line":1082},[178,21861,20804],{"class":184},[178,21863,21313],{"class":184},[178,21865,3760],{"class":319},[178,21867,21868],{"class":180,"line":1099},[178,21869,3352],{"class":319},[178,21871,21872],{"class":180,"line":9806},[178,21873,20794],{"class":319},[178,21875,21876,21878,21880,21882,21884,21886,21888,21890,21893,21895],{"class":180,"line":9818},[178,21877,8298],{"class":319},[178,21879,2983],{"class":699},[178,21881,3457],{"class":319},[178,21883,1956],{"class":699},[178,21885,8287],{"class":699},[178,21887,2369],{"class":319},[178,21889,2293],{"class":699},[178,21891,21892],{"class":319},"p1 ",[178,21894,2983],{"class":699},[178,21896,10601],{"class":319},[178,21898,21899,21901],{"class":180,"line":11477},[178,21900,5862],{"class":699},[178,21902,21903],{"class":319}," p1;\n",[178,21905,21906],{"class":180,"line":11502},[178,21907,3371],{"class":319},[178,21909,21910],{"class":180,"line":11525},[178,21911,722],{"emptyLinePlaceholder":721},[178,21913,21914,21916,21918],{"class":180,"line":11549},[178,21915,7133],{"class":699},[178,21917,7498],{"class":184},[178,21919,3760],{"class":319},[178,21921,21922],{"class":180,"line":11554},[178,21923,3352],{"class":319},[178,21925,21926,21928,21930,21932],{"class":180,"line":11559},[178,21927,21379],{"class":319},[178,21929,330],{"class":699},[178,21931,21313],{"class":184},[178,21933,7405],{"class":319},[178,21935,21936,21938,21940,21942,21944,21946,21948,21950,21952,21954],{"class":180,"line":11564},[178,21937,8298],{"class":319},[178,21939,2983],{"class":699},[178,21941,3457],{"class":319},[178,21943,1956],{"class":699},[178,21945,8287],{"class":699},[178,21947,2369],{"class":319},[178,21949,2293],{"class":699},[178,21951,13209],{"class":319},[178,21953,2983],{"class":699},[178,21955,10601],{"class":319},[178,21957,21958],{"class":180,"line":11573},[178,21959,3371],{"class":319},[178,21961,21962],{"class":180,"line":11578},[178,21963,722],{"emptyLinePlaceholder":721},[178,21965,21966],{"class":180,"line":11584},[178,21967,722],{"emptyLinePlaceholder":721},[178,21969,21970,21972,21974],{"class":180,"line":11605},[178,21971,1956],{"class":699},[178,21973,838],{"class":184},[178,21975,12614],{"class":319},[178,21977,21978],{"class":180,"line":11611},[178,21979,722],{"emptyLinePlaceholder":721},[178,21981,21982],{"class":180,"line":11625},[178,21983,21984],{"class":2008},"    \u002F\u002Ftest01();\n",[178,21986,21987],{"class":180,"line":11631},[178,21988,21989],{"class":2008},"    \u002F\u002Ftest02();\n",[178,21991,21992,21994],{"class":180,"line":11658},[178,21993,21449],{"class":184},[178,21995,7405],{"class":319},[178,21997,21998],{"class":180,"line":11667},[178,21999,722],{"emptyLinePlaceholder":721},[178,22001,22002,22004,22006,22008],{"class":180,"line":11673},[178,22003,4087],{"class":184},[178,22005,944],{"class":319},[178,22007,4092],{"class":188},[178,22009,4495],{"class":319},[178,22011,22012],{"class":180,"line":11681},[178,22013,722],{"emptyLinePlaceholder":721},[178,22015,22016,22018,22020],{"class":180,"line":11686},[178,22017,5862],{"class":699},[178,22019,930],{"class":195},[178,22021,3100],{"class":319},[178,22023,22024],{"class":180,"line":18362},[178,22025,3371],{"class":319},[387,22027,22029],{"id":22028},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,22031,22032],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,22034,22035],{},"1．默认构造函数(无参，函数体为空)",[19,22037,22038],{},"2．默认析构函数(无参，函数体为空)",[19,22040,22041],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,22043,22044],{},"构造函数调用规则如下：",[2946,22046,22047,22050],{},[29,22048,22049],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[29,22051,22052],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[154,22054,22056],{"className":1942,"code":22055,"language":1944,"meta":160,"style":160},"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",[70,22057,22058,22066,22070,22075,22081,22093,22097,22102,22114,22123,22135,22139,22143,22159,22168,22180,22184,22188,22194,22206,22210,22214,22220,22224,22228,22236,22240,22252,22257,22265,22269,22287,22291,22295,22303,22307,22312,22320,22335,22348,22352,22357,22364,22380,22393,22397,22401,22409,22413,22419,22423,22433,22437,22445],{"__ignoreMap":160},[178,22059,22060,22062,22064],{"class":180,"line":181},[178,22061,16453],{"class":699},[178,22063,17327],{"class":184},[178,22065,17330],{"class":319},[178,22067,22068],{"class":180,"line":263},[178,22069,16475],{"class":699},[178,22071,22072],{"class":180,"line":274},[178,22073,22074],{"class":2008},"    \u002F\u002F无参（默认）构造函数\n",[178,22076,22077,22079],{"class":180,"line":354},[178,22078,20277],{"class":184},[178,22080,12614],{"class":319},[178,22082,22083,22085,22087,22089,22091],{"class":180,"line":364},[178,22084,11430],{"class":319},[178,22086,2983],{"class":699},[178,22088,21568],{"class":188},[178,22090,3251],{"class":699},[178,22092,10601],{"class":319},[178,22094,22095],{"class":180,"line":740},[178,22096,3971],{"class":319},[178,22098,22099],{"class":180,"line":746},[178,22100,22101],{"class":2008},"    \u002F\u002F有参构造函数\n",[178,22103,22104,22106,22108,22110,22112],{"class":180,"line":752},[178,22105,20277],{"class":184},[178,22107,944],{"class":319},[178,22109,1956],{"class":699},[178,22111,3205],{"class":6985},[178,22113,14203],{"class":319},[178,22115,22116,22119,22121],{"class":180,"line":757},[178,22117,22118],{"class":319},"        age ",[178,22120,330],{"class":699},[178,22122,3239],{"class":319},[178,22124,22125,22127,22129,22131,22133],{"class":180,"line":763},[178,22126,11430],{"class":319},[178,22128,2983],{"class":699},[178,22130,21608],{"class":188},[178,22132,3251],{"class":699},[178,22134,10601],{"class":319},[178,22136,22137],{"class":180,"line":769},[178,22138,3971],{"class":319},[178,22140,22141],{"class":180,"line":774},[178,22142,20632],{"class":2008},[178,22144,22145,22147,22149,22151,22153,22155,22157],{"class":180,"line":780},[178,22146,20277],{"class":184},[178,22148,944],{"class":319},[178,22150,8561],{"class":699},[178,22152,17327],{"class":184},[178,22154,2293],{"class":699},[178,22156,8594],{"class":6985},[178,22158,14203],{"class":319},[178,22160,22161,22163,22165],{"class":180,"line":786},[178,22162,22118],{"class":319},[178,22164,330],{"class":699},[178,22166,22167],{"class":319}," p.age;\n",[178,22169,22170,22172,22174,22176,22178],{"class":180,"line":792},[178,22171,11430],{"class":319},[178,22173,2983],{"class":699},[178,22175,21649],{"class":188},[178,22177,3251],{"class":699},[178,22179,10601],{"class":319},[178,22181,22182],{"class":180,"line":798},[178,22183,3971],{"class":319},[178,22185,22186],{"class":180,"line":804},[178,22187,20305],{"class":2008},[178,22189,22190,22192],{"class":180,"line":810},[178,22191,20310],{"class":184},[178,22193,12614],{"class":319},[178,22195,22196,22198,22200,22202,22204],{"class":180,"line":816},[178,22197,11430],{"class":319},[178,22199,2983],{"class":699},[178,22201,21686],{"class":188},[178,22203,3251],{"class":699},[178,22205,10601],{"class":319},[178,22207,22208],{"class":180,"line":822},[178,22209,3971],{"class":319},[178,22211,22212],{"class":180,"line":827},[178,22213,16475],{"class":699},[178,22215,22216,22218],{"class":180,"line":832},[178,22217,3769],{"class":699},[178,22219,9566],{"class":319},[178,22221,22222],{"class":180,"line":850},[178,22223,5767],{"class":319},[178,22225,22226],{"class":180,"line":866},[178,22227,722],{"emptyLinePlaceholder":721},[178,22229,22230,22232,22234],{"class":180,"line":877},[178,22231,7133],{"class":699},[178,22233,7357],{"class":184},[178,22235,3760],{"class":319},[178,22237,22238],{"class":180,"line":882},[178,22239,3352],{"class":319},[178,22241,22242,22244,22246,22248,22250],{"class":180,"line":898},[178,22243,21189],{"class":319},[178,22245,8899],{"class":184},[178,22247,944],{"class":319},[178,22249,2590],{"class":195},[178,22251,4495],{"class":319},[178,22253,22254],{"class":180,"line":914},[178,22255,22256],{"class":2008},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[178,22258,22259,22261,22263],{"class":180,"line":919},[178,22260,21189],{"class":319},[178,22262,8802],{"class":184},[178,22264,19273],{"class":319},[178,22266,22267],{"class":180,"line":935},[178,22268,722],{"emptyLinePlaceholder":721},[178,22270,22271,22273,22275,22278,22280,22283,22285],{"class":180,"line":952},[178,22272,8298],{"class":319},[178,22274,2983],{"class":699},[178,22276,22277],{"class":188}," \"p2的年龄为： \"",[178,22279,3251],{"class":699},[178,22281,22282],{"class":319}," p2.age ",[178,22284,2983],{"class":699},[178,22286,10601],{"class":319},[178,22288,22289],{"class":180,"line":966},[178,22290,3371],{"class":319},[178,22292,22293],{"class":180,"line":980},[178,22294,722],{"emptyLinePlaceholder":721},[178,22296,22297,22299,22301],{"class":180,"line":985},[178,22298,7133],{"class":699},[178,22300,7426],{"class":184},[178,22302,3760],{"class":319},[178,22304,22305],{"class":180,"line":1008},[178,22306,3352],{"class":319},[178,22308,22309],{"class":180,"line":1014},[178,22310,22311],{"class":2008},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[178,22313,22314,22317],{"class":180,"line":1019},[178,22315,22316],{"class":319},"    Person p1;",[178,22318,22319],{"class":2008}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[178,22321,22322,22324,22326,22328,22330,22332],{"class":180,"line":1033},[178,22323,21189],{"class":319},[178,22325,8802],{"class":184},[178,22327,944],{"class":319},[178,22329,2386],{"class":195},[178,22331,7735],{"class":319},[178,22333,22334],{"class":2008}," \u002F\u002F用户提供的有参\n",[178,22336,22337,22339,22342,22345],{"class":180,"line":1046},[178,22338,21189],{"class":319},[178,22340,22341],{"class":184},"p3",[178,22343,22344],{"class":319},"(p2);",[178,22346,22347],{"class":2008}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[178,22349,22350],{"class":180,"line":1059},[178,22351,722],{"emptyLinePlaceholder":721},[178,22353,22354],{"class":180,"line":1072},[178,22355,22356],{"class":2008},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[178,22358,22359,22362],{"class":180,"line":1077},[178,22360,22361],{"class":319},"    Person p4;",[178,22363,22319],{"class":2008},[178,22365,22366,22368,22371,22373,22375,22377],{"class":180,"line":1082},[178,22367,21189],{"class":319},[178,22369,22370],{"class":184},"p5",[178,22372,944],{"class":319},[178,22374,2386],{"class":195},[178,22376,7735],{"class":319},[178,22378,22379],{"class":2008}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[178,22381,22382,22384,22387,22390],{"class":180,"line":1099},[178,22383,21189],{"class":319},[178,22385,22386],{"class":184},"p6",[178,22388,22389],{"class":319},"(p5);",[178,22391,22392],{"class":2008}," \u002F\u002F用户自己提供拷贝构造\n",[178,22394,22395],{"class":180,"line":9806},[178,22396,3371],{"class":319},[178,22398,22399],{"class":180,"line":9818},[178,22400,722],{"emptyLinePlaceholder":721},[178,22402,22403,22405,22407],{"class":180,"line":11477},[178,22404,1956],{"class":699},[178,22406,838],{"class":184},[178,22408,12614],{"class":319},[178,22410,22411],{"class":180,"line":11502},[178,22412,722],{"emptyLinePlaceholder":721},[178,22414,22415,22417],{"class":180,"line":11525},[178,22416,7402],{"class":184},[178,22418,7405],{"class":319},[178,22420,22421],{"class":180,"line":11549},[178,22422,722],{"emptyLinePlaceholder":721},[178,22424,22425,22427,22429,22431],{"class":180,"line":11554},[178,22426,4087],{"class":184},[178,22428,944],{"class":319},[178,22430,4092],{"class":188},[178,22432,4495],{"class":319},[178,22434,22435],{"class":180,"line":11559},[178,22436,722],{"emptyLinePlaceholder":721},[178,22438,22439,22441,22443],{"class":180,"line":11564},[178,22440,5862],{"class":699},[178,22442,930],{"class":195},[178,22444,3100],{"class":319},[178,22446,22447],{"class":180,"line":11573},[178,22448,3371],{"class":319},[387,22450,22452],{"id":22451},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,22454,22455],{},"浅拷贝：简单的赋值拷贝操作",[19,22457,22458],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[154,22460,22462],{"className":1942,"code":22461,"language":1944,"meta":160,"style":160},"#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",[70,22463,22464,22470,22480,22486,22490,22494,22499,22505,22509,22522,22526,22530,22537,22541,22551,22566,22579,22583,22588,22593,22609,22613,22626,22631,22636,22641,22650,22655,22670,22674,22678,22682,22688,22692,22697,22712,22716,22727,22741,22745,22754,22758,22764,22776,22780,22788,22792,22809,22840,22848,22876,22880,22884,22892,22896,22902],{"__ignoreMap":160},[178,22465,22466,22468],{"class":180,"line":181},[178,22467,3735],{"class":699},[178,22469,3738],{"class":188},[178,22471,22472,22474,22476,22478],{"class":180,"line":263},[178,22473,3743],{"class":699},[178,22475,3746],{"class":699},[178,22477,3749],{"class":184},[178,22479,3100],{"class":319},[178,22481,22482,22484],{"class":180,"line":274},[178,22483,16453],{"class":699},[178,22485,16929],{"class":184},[178,22487,22488],{"class":180,"line":354},[178,22489,3352],{"class":319},[178,22491,22492],{"class":180,"line":364},[178,22493,16475],{"class":699},[178,22495,22496],{"class":180,"line":740},[178,22497,22498],{"class":2008},"    \u002F\u002F默认构造函数\n",[178,22500,22501,22503],{"class":180,"line":746},[178,22502,20277],{"class":184},[178,22504,3760],{"class":319},[178,22506,22507],{"class":180,"line":752},[178,22508,3814],{"class":319},[178,22510,22511,22513,22515,22518,22520],{"class":180,"line":757},[178,22512,5224],{"class":319},[178,22514,2983],{"class":699},[178,22516,22517],{"class":188},"\"默认构造函数\"",[178,22519,2983],{"class":699},[178,22521,3005],{"class":319},[178,22523,22524],{"class":180,"line":763},[178,22525,3971],{"class":319},[178,22527,22528],{"class":180,"line":769},[178,22529,22101],{"class":2008},[178,22531,22532,22534],{"class":180,"line":774},[178,22533,20310],{"class":184},[178,22535,22536],{"class":319},"(int age,int height)\n",[178,22538,22539],{"class":180,"line":780},[178,22540,3814],{"class":319},[178,22542,22543,22546,22548],{"class":180,"line":786},[178,22544,22545],{"class":319},"        m_Age",[178,22547,330],{"class":699},[178,22549,22550],{"class":319},"age;\n",[178,22552,22553,22556,22558,22560,22563],{"class":180,"line":792},[178,22554,22555],{"class":319},"        m_Height",[178,22557,13478],{"class":699},[178,22559,4166],{"class":699},[178,22561,22562],{"class":319},"(height);",[178,22564,22565],{"class":2008},"\u002F\u002F放到堆区\n",[178,22567,22568,22570,22572,22575,22577],{"class":180,"line":798},[178,22569,5224],{"class":319},[178,22571,2983],{"class":699},[178,22573,22574],{"class":188},"\"有参构造函数\"",[178,22576,2983],{"class":699},[178,22578,3005],{"class":319},[178,22580,22581],{"class":180,"line":804},[178,22582,3971],{"class":319},[178,22584,22585],{"class":180,"line":810},[178,22586,22587],{"class":2008},"    \u002F\u002F深拷贝解决上述问题\n",[178,22589,22590],{"class":180,"line":816},[178,22591,22592],{"class":2008},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[178,22594,22595,22597,22599,22601,22603,22605,22607],{"class":180,"line":822},[178,22596,20277],{"class":184},[178,22598,944],{"class":319},[178,22600,8561],{"class":699},[178,22602,17327],{"class":184},[178,22604,12345],{"class":699},[178,22606,19],{"class":6985},[178,22608,863],{"class":319},[178,22610,22611],{"class":180,"line":827},[178,22612,3814],{"class":319},[178,22614,22615,22617,22619,22622,22624],{"class":180,"line":832},[178,22616,5224],{"class":319},[178,22618,2983],{"class":699},[178,22620,22621],{"class":188},"\"拷贝构造函数\"",[178,22623,2983],{"class":699},[178,22625,3005],{"class":319},[178,22627,22628],{"class":180,"line":850},[178,22629,22630],{"class":2008},"        \u002F\u002F编译器默认的写如下注释部分\n",[178,22632,22633],{"class":180,"line":866},[178,22634,22635],{"class":2008},"        \u002F\u002Fm_Age=p.m_Age;\n",[178,22637,22638],{"class":180,"line":877},[178,22639,22640],{"class":2008},"        \u002F\u002Fm_Height=p.m_Height;\n",[178,22642,22643,22645,22647],{"class":180,"line":882},[178,22644,22545],{"class":319},[178,22646,330],{"class":699},[178,22648,22649],{"class":319},"p.m_Age;\n",[178,22651,22652],{"class":180,"line":898},[178,22653,22654],{"class":2008},"        \u002F\u002F深拷贝操作\n",[178,22656,22657,22659,22661,22663,22665,22667],{"class":180,"line":914},[178,22658,22555],{"class":319},[178,22660,13478],{"class":699},[178,22662,4166],{"class":699},[178,22664,944],{"class":319},[178,22666,2395],{"class":699},[178,22668,22669],{"class":319},"p.m_Height);\n",[178,22671,22672],{"class":180,"line":919},[178,22673,3971],{"class":319},[178,22675,22676],{"class":180,"line":935},[178,22677,722],{"emptyLinePlaceholder":721},[178,22679,22680],{"class":180,"line":952},[178,22681,20305],{"class":2008},[178,22683,22684,22686],{"class":180,"line":966},[178,22685,20310],{"class":184},[178,22687,3760],{"class":319},[178,22689,22690],{"class":180,"line":980},[178,22691,3814],{"class":319},[178,22693,22694],{"class":180,"line":985},[178,22695,22696],{"class":2008},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[178,22698,22699,22701,22704,22707,22710],{"class":180,"line":1008},[178,22700,4280],{"class":699},[178,22702,22703],{"class":319},"(m_Height ",[178,22705,22706],{"class":699},"!=",[178,22708,22709],{"class":195}," NULL",[178,22711,863],{"class":319},[178,22713,22714],{"class":180,"line":1014},[178,22715,4293],{"class":319},[178,22717,22718,22721,22724],{"class":180,"line":1019},[178,22719,22720],{"class":699},"            delete",[178,22722,22723],{"class":319}," m_Height;",[178,22725,22726],{"class":2008}," \u002F\u002F释放堆区内存\n",[178,22728,22729,22732,22734,22736,22738],{"class":180,"line":1033},[178,22730,22731],{"class":319},"            m_Height",[178,22733,330],{"class":699},[178,22735,4176],{"class":195},[178,22737,2005],{"class":319},[178,22739,22740],{"class":2008}," \u002F\u002F防止野指针\n",[178,22742,22743],{"class":180,"line":1046},[178,22744,4312],{"class":319},[178,22746,22747,22749,22751],{"class":180,"line":1059},[178,22748,5224],{"class":319},[178,22750,2983],{"class":699},[178,22752,22753],{"class":188},"\"Person的析构函数调用\"\n",[178,22755,22756],{"class":180,"line":1072},[178,22757,3971],{"class":319},[178,22759,22760,22762],{"class":180,"line":1077},[178,22761,3769],{"class":699},[178,22763,17424],{"class":319},[178,22765,22766,22768,22770,22773],{"class":180,"line":1082},[178,22767,3769],{"class":699},[178,22769,8287],{"class":699},[178,22771,22772],{"class":319},"m_Height;",[178,22774,22775],{"class":2008}," \u002F\u002F定义一个指针，指向身高\n",[178,22777,22778],{"class":180,"line":1099},[178,22779,5767],{"class":319},[178,22781,22782,22784,22786],{"class":180,"line":9806},[178,22783,7133],{"class":699},[178,22785,7357],{"class":184},[178,22787,3760],{"class":319},[178,22789,22790],{"class":180,"line":9818},[178,22791,3352],{"class":319},[178,22793,22794,22796,22798,22800,22802,22804,22807],{"class":180,"line":11477},[178,22795,21189],{"class":319},[178,22797,8899],{"class":184},[178,22799,944],{"class":319},[178,22801,2590],{"class":195},[178,22803,2318],{"class":319},[178,22805,22806],{"class":195},"160",[178,22808,4495],{"class":319},[178,22810,22811,22813,22815,22818,22820,22823,22825,22828,22830,22833,22835,22837],{"class":180,"line":11502},[178,22812,3357],{"class":319},[178,22814,2983],{"class":699},[178,22816,22817],{"class":188},"\"p1的年龄为:\"",[178,22819,2983],{"class":699},[178,22821,22822],{"class":319},"p1.m_Age",[178,22824,2983],{"class":699},[178,22826,22827],{"class":188},"\"身高为：\"",[178,22829,8188],{"class":699},[178,22831,22832],{"class":319},"p1.m_Height",[178,22834,2983],{"class":699},[178,22836,3048],{"class":319},[178,22838,22839],{"class":2008},"  \u002F\u002F18\n",[178,22841,22842,22844,22846],{"class":180,"line":11525},[178,22843,21189],{"class":319},[178,22845,8802],{"class":184},[178,22847,19273],{"class":319},[178,22849,22850,22852,22854,22857,22859,22861,22863,22865,22867,22870,22872,22874],{"class":180,"line":11549},[178,22851,3357],{"class":319},[178,22853,2983],{"class":699},[178,22855,22856],{"class":188},"\"p2的年龄为：\"",[178,22858,2983],{"class":699},[178,22860,21219],{"class":319},[178,22862,2983],{"class":699},[178,22864,22827],{"class":188},[178,22866,8188],{"class":699},[178,22868,22869],{"class":319},"p2.m_Height",[178,22871,2983],{"class":699},[178,22873,3048],{"class":319},[178,22875,22839],{"class":2008},[178,22877,22878],{"class":180,"line":11554},[178,22879,14971],{"class":319},[178,22881,22882],{"class":180,"line":11559},[178,22883,3371],{"class":319},[178,22885,22886,22888,22890],{"class":180,"line":11564},[178,22887,1956],{"class":699},[178,22889,838],{"class":184},[178,22891,3760],{"class":319},[178,22893,22894],{"class":180,"line":11573},[178,22895,3352],{"class":319},[178,22897,22898,22900],{"class":180,"line":11578},[178,22899,7402],{"class":184},[178,22901,7405],{"class":319},[178,22903,22904],{"class":180,"line":11584},[178,22905,3371],{"class":319},[19,22907,22908],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,22910,22911],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,22913,22914],{},[3269,22915],{"alt":160,"src":22916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,22918,22919],{},"浅拷贝问题要使用深拷贝来解决",[19,22921,22922],{},[3269,22923],{"alt":160,"src":22924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,22926,22927],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[387,22929,22931],{"id":22930},"_826初始化列表","8.2.6初始化列表",[19,22933,22934],{},"作用：初始化属性",[19,22936,6952],{},[154,22938,22941],{"className":22939,"code":22940,"language":159},[157],"构造函数():属性1(值1),属性2(值2).....{}\n",[70,22942,22940],{"__ignoreMap":160},[19,22944,22945],{},"例子",[154,22947,22949],{"className":1942,"code":22948,"language":1944,"meta":160,"style":160},"#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",[70,22950,22951,22957,22967,22973,22977,22982,22986,22991,22996,23001,23006,23011,23016,23020,23025,23030,23073,23082,23100,23118,23136,23140,23144,23151,23158,23165,23169,23173,23181,23185,23189,23209,23218,23222,23226,23236,23240,23248],{"__ignoreMap":160},[178,22952,22953,22955],{"class":180,"line":181},[178,22954,3735],{"class":699},[178,22956,3738],{"class":188},[178,22958,22959,22961,22963,22965],{"class":180,"line":263},[178,22960,3743],{"class":699},[178,22962,3746],{"class":699},[178,22964,3749],{"class":184},[178,22966,3100],{"class":319},[178,22968,22969,22971],{"class":180,"line":274},[178,22970,16453],{"class":699},[178,22972,16929],{"class":184},[178,22974,22975],{"class":180,"line":354},[178,22976,3352],{"class":319},[178,22978,22979],{"class":180,"line":364},[178,22980,22981],{"class":699},"    public:\n",[178,22983,22984],{"class":180,"line":740},[178,22985,722],{"emptyLinePlaceholder":721},[178,22987,22988],{"class":180,"line":746},[178,22989,22990],{"class":2008},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[178,22992,22993],{"class":180,"line":752},[178,22994,22995],{"class":2008},"    \u002F\u002FPerson(int a, int b, int c) {\n",[178,22997,22998],{"class":180,"line":757},[178,22999,23000],{"class":2008},"    \u002F\u002F  m_A = a;\n",[178,23002,23003],{"class":180,"line":763},[178,23004,23005],{"class":2008},"    \u002F\u002F  m_B = b;\n",[178,23007,23008],{"class":180,"line":769},[178,23009,23010],{"class":2008},"    \u002F\u002F  m_C = c;\n",[178,23012,23013],{"class":180,"line":774},[178,23014,23015],{"class":2008},"    \u002F\u002F}\n",[178,23017,23018],{"class":180,"line":780},[178,23019,722],{"emptyLinePlaceholder":721},[178,23021,23022],{"class":180,"line":786},[178,23023,23024],{"class":2008},"    \u002F\u002F初始化列表方式初始化\n",[178,23026,23027],{"class":180,"line":792},[178,23028,23029],{"class":2008},"    \u002F\u002F使用有参构造函数\n",[178,23031,23032,23034,23036,23038,23040,23042,23044,23046,23048,23050,23052,23055,23058,23061,23064,23067,23070],{"class":180,"line":798},[178,23033,20277],{"class":184},[178,23035,944],{"class":319},[178,23037,1956],{"class":699},[178,23039,3205],{"class":6985},[178,23041,14196],{"class":319},[178,23043,1956],{"class":699},[178,23045,4609],{"class":6985},[178,23047,14196],{"class":319},[178,23049,1956],{"class":699},[178,23051,4625],{"class":6985},[178,23053,23054],{"class":319},") :",[178,23056,23057],{"class":184},"m_A",[178,23059,23060],{"class":319},"(a), ",[178,23062,23063],{"class":184},"m_B",[178,23065,23066],{"class":319},"(b), ",[178,23068,23069],{"class":184},"m_C",[178,23071,23072],{"class":319},"(c) {}\n",[178,23074,23075,23077,23080],{"class":180,"line":804},[178,23076,16668],{"class":699},[178,23078,23079],{"class":184}," PrintPerson",[178,23081,12614],{"class":319},[178,23083,23084,23086,23088,23091,23093,23096,23098],{"class":180,"line":810},[178,23085,11430],{"class":319},[178,23087,2983],{"class":699},[178,23089,23090],{"class":188}," \"mA:\"",[178,23092,3251],{"class":699},[178,23094,23095],{"class":319}," m_A ",[178,23097,2983],{"class":699},[178,23099,10601],{"class":319},[178,23101,23102,23104,23106,23109,23111,23114,23116],{"class":180,"line":816},[178,23103,11430],{"class":319},[178,23105,2983],{"class":699},[178,23107,23108],{"class":188}," \"mB:\"",[178,23110,3251],{"class":699},[178,23112,23113],{"class":319}," m_B ",[178,23115,2983],{"class":699},[178,23117,10601],{"class":319},[178,23119,23120,23122,23124,23127,23129,23132,23134],{"class":180,"line":822},[178,23121,11430],{"class":319},[178,23123,2983],{"class":699},[178,23125,23126],{"class":188}," \"mC:\"",[178,23128,3251],{"class":699},[178,23130,23131],{"class":319}," m_C ",[178,23133,2983],{"class":699},[178,23135,10601],{"class":319},[178,23137,23138],{"class":180,"line":827},[178,23139,3971],{"class":319},[178,23141,23142],{"class":180,"line":832},[178,23143,16980],{"class":699},[178,23145,23146,23148],{"class":180,"line":850},[178,23147,3769],{"class":699},[178,23149,23150],{"class":319}," m_A;\n",[178,23152,23153,23155],{"class":180,"line":866},[178,23154,3769],{"class":699},[178,23156,23157],{"class":319}," m_B;\n",[178,23159,23160,23162],{"class":180,"line":877},[178,23161,3769],{"class":699},[178,23163,23164],{"class":319}," m_C;\n",[178,23166,23167],{"class":180,"line":882},[178,23168,5767],{"class":319},[178,23170,23171],{"class":180,"line":898},[178,23172,722],{"emptyLinePlaceholder":721},[178,23174,23175,23177,23179],{"class":180,"line":914},[178,23176,1956],{"class":699},[178,23178,838],{"class":184},[178,23180,7747],{"class":319},[178,23182,23183],{"class":180,"line":919},[178,23184,3352],{"class":319},[178,23186,23187],{"class":180,"line":935},[178,23188,722],{"emptyLinePlaceholder":721},[178,23190,23191,23193,23195,23197,23199,23201,23203,23205,23207],{"class":180,"line":952},[178,23192,21189],{"class":319},[178,23194,19],{"class":184},[178,23196,944],{"class":319},[178,23198,1665],{"class":195},[178,23200,14196],{"class":319},[178,23202,1669],{"class":195},[178,23204,14196],{"class":319},[178,23206,2021],{"class":195},[178,23208,4495],{"class":319},[178,23210,23211,23213,23216],{"class":180,"line":966},[178,23212,17624],{"class":319},[178,23214,23215],{"class":184},"PrintPerson",[178,23217,7405],{"class":319},[178,23219,23220],{"class":180,"line":980},[178,23221,722],{"emptyLinePlaceholder":721},[178,23223,23224],{"class":180,"line":985},[178,23225,722],{"emptyLinePlaceholder":721},[178,23227,23228,23230,23232,23234],{"class":180,"line":1008},[178,23229,4087],{"class":184},[178,23231,944],{"class":319},[178,23233,4092],{"class":188},[178,23235,4495],{"class":319},[178,23237,23238],{"class":180,"line":1014},[178,23239,722],{"emptyLinePlaceholder":721},[178,23241,23242,23244,23246],{"class":180,"line":1019},[178,23243,5862],{"class":699},[178,23245,930],{"class":195},[178,23247,3100],{"class":319},[178,23249,23250],{"class":180,"line":1033},[178,23251,3371],{"class":319},[19,23253,23254,23255,23258,23259],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[2093,23256,23257],{},"参数名就是定义的对象属性","，",[2093,23260,23261],{},"属性后面的值为有参构造函数的形参",[154,23263,23265],{"className":1942,"code":23264,"language":1944,"meta":160,"style":160},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[70,23266,23267],{"__ignoreMap":160},[178,23268,23269,23271,23273,23275,23278,23280,23283,23285,23288,23290,23293,23295,23298,23300],{"class":180,"line":181},[178,23270,20804],{"class":184},[178,23272,944],{"class":319},[178,23274,1956],{"class":699},[178,23276,23277],{"class":319}," a.",[178,23279,1956],{"class":699},[178,23281,23282],{"class":319}," b,",[178,23284,1956],{"class":699},[178,23286,23287],{"class":319}," b):",[178,23289,23057],{"class":184},[178,23291,23292],{"class":319},"(a),",[178,23294,23063],{"class":184},[178,23296,23297],{"class":319},"(c),",[178,23299,23069],{"class":184},[178,23301,23302],{"class":319},"(b) {}\n",[387,23304,23306],{"id":23305},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,23308,23309],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,23311,528],{},[154,23313,23315],{"className":1942,"code":23314,"language":1944,"meta":160,"style":160},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[70,23316,23317,23322,23327,23331,23336,23340],{"__ignoreMap":160},[178,23318,23319],{"class":180,"line":181},[178,23320,23321],{"class":319},"A{};\n",[178,23323,23324],{"class":180,"line":263},[178,23325,23326],{"class":319},"B\n",[178,23328,23329],{"class":180,"line":274},[178,23330,3352],{"class":319},[178,23332,23333],{"class":180,"line":354},[178,23334,23335],{"class":319},"    A a;\n",[178,23337,23338],{"class":180,"line":364},[178,23339,3371],{"class":319},[178,23341,23342],{"class":180,"line":740},[178,23343,23344],{"class":2008},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,23346,23347],{},"案例",[154,23349,23351],{"className":1942,"code":23350,"language":1944,"meta":160,"style":160},"\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",[70,23352,23353,23358,23365,23369,23374,23379,23393,23397,23407,23418,23422,23429,23433,23446,23450,23455,23460,23464,23470,23474,23478,23482,23513,23517,23528,23532,23538,23542,23555,23559,23563,23567,23572,23577,23581,23589,23593,23610,23629,23633,23641,23645,23651],{"__ignoreMap":160},[178,23354,23355],{"class":180,"line":181},[178,23356,23357],{"class":2008},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[178,23359,23360,23362],{"class":180,"line":263},[178,23361,16453],{"class":699},[178,23363,23364],{"class":184}," Phone\n",[178,23366,23367],{"class":180,"line":274},[178,23368,3352],{"class":319},[178,23370,23371],{"class":180,"line":354},[178,23372,23373],{"class":319},"public：\n",[178,23375,23376],{"class":180,"line":364},[178,23377,23378],{"class":2008},"    \u002F\u002F 赋值(构造函数)\n",[178,23380,23381,23384,23386,23388,23391],{"class":180,"line":740},[178,23382,23383],{"class":184},"    Phone",[178,23385,944],{"class":319},[178,23387,16676],{"class":184},[178,23389,23390],{"class":6985}," pName",[178,23392,863],{"class":319},[178,23394,23395],{"class":180,"line":746},[178,23396,3814],{"class":319},[178,23398,23399,23402,23404],{"class":180,"line":752},[178,23400,23401],{"class":319},"        m_pName",[178,23403,330],{"class":699},[178,23405,23406],{"class":319},"pName;\n",[178,23408,23409,23411,23413,23416],{"class":180,"line":757},[178,23410,5224],{"class":319},[178,23412,2983],{"class":699},[178,23414,23415],{"class":188},"\"Phone的构造函数调用\"",[178,23417,3100],{"class":319},[178,23419,23420],{"class":180,"line":763},[178,23421,3971],{"class":319},[178,23423,23424,23427],{"class":180,"line":769},[178,23425,23426],{"class":184},"    ~Phone",[178,23428,3760],{"class":319},[178,23430,23431],{"class":180,"line":774},[178,23432,3814],{"class":319},[178,23434,23435,23437,23439,23442,23444],{"class":180,"line":780},[178,23436,5224],{"class":319},[178,23438,2983],{"class":699},[178,23440,23441],{"class":188},"\"Phone析构函数调用\"",[178,23443,2983],{"class":699},[178,23445,3005],{"class":319},[178,23447,23448],{"class":180,"line":786},[178,23449,3971],{"class":319},[178,23451,23452],{"class":180,"line":792},[178,23453,23454],{"class":2008},"    \u002F\u002F\n",[178,23456,23457],{"class":180,"line":798},[178,23458,23459],{"class":319},"    string m_PName;\n",[178,23461,23462],{"class":180,"line":804},[178,23463,5767],{"class":319},[178,23465,23466,23468],{"class":180,"line":810},[178,23467,16453],{"class":699},[178,23469,16929],{"class":184},[178,23471,23472],{"class":180,"line":816},[178,23473,3352],{"class":319},[178,23475,23476],{"class":180,"line":822},[178,23477,16475],{"class":699},[178,23479,23480],{"class":180,"line":827},[178,23481,18752],{"class":2008},[178,23483,23484,23486,23488,23490,23492,23494,23496,23499,23502,23504,23507,23510],{"class":180,"line":832},[178,23485,20277],{"class":184},[178,23487,944],{"class":319},[178,23489,16676],{"class":184},[178,23491,426],{"class":6985},[178,23493,2318],{"class":319},[178,23495,16676],{"class":184},[178,23497,23498],{"class":6985}," pname",[178,23500,23501],{"class":319},"):",[178,23503,16768],{"class":184},[178,23505,23506],{"class":319},"(name),m_phone.",[178,23508,23509],{"class":184},"m_PName",[178,23511,23512],{"class":319},"(pname) \n",[178,23514,23515],{"class":180,"line":850},[178,23516,3814],{"class":319},[178,23518,23519,23521,23523,23526],{"class":180,"line":866},[178,23520,5224],{"class":319},[178,23522,2983],{"class":699},[178,23524,23525],{"class":188},"\"Person的构造函数调用\"",[178,23527,3100],{"class":319},[178,23529,23530],{"class":180,"line":877},[178,23531,3971],{"class":319},[178,23533,23534,23536],{"class":180,"line":882},[178,23535,20310],{"class":184},[178,23537,3760],{"class":319},[178,23539,23540],{"class":180,"line":898},[178,23541,3814],{"class":319},[178,23543,23544,23546,23548,23551,23553],{"class":180,"line":914},[178,23545,5224],{"class":319},[178,23547,2983],{"class":699},[178,23549,23550],{"class":188},"\"Person析构函数调用\"",[178,23552,2983],{"class":699},[178,23554,3005],{"class":319},[178,23556,23557],{"class":180,"line":919},[178,23558,3971],{"class":319},[178,23560,23561],{"class":180,"line":935},[178,23562,9549],{"class":2008},[178,23564,23565],{"class":180,"line":952},[178,23566,16651],{"class":319},[178,23568,23569],{"class":180,"line":966},[178,23570,23571],{"class":2008},"    \u002F\u002F手机\n",[178,23573,23574],{"class":180,"line":980},[178,23575,23576],{"class":319},"    Phone m_Phone;\n",[178,23578,23579],{"class":180,"line":985},[178,23580,5767],{"class":319},[178,23582,23583,23585,23587],{"class":180,"line":1008},[178,23584,7133],{"class":699},[178,23586,7357],{"class":184},[178,23588,3760],{"class":319},[178,23590,23591],{"class":180,"line":1014},[178,23592,3352],{"class":319},[178,23594,23595,23597,23599,23601,23603,23605,23608],{"class":180,"line":1019},[178,23596,21189],{"class":319},[178,23598,19],{"class":184},[178,23600,944],{"class":319},[178,23602,9685],{"class":188},[178,23604,2318],{"class":319},[178,23606,23607],{"class":188},"\"安卓\"",[178,23609,4495],{"class":319},[178,23611,23612,23614,23616,23619,23621,23624,23626],{"class":180,"line":1033},[178,23613,3357],{"class":319},[178,23615,2983],{"class":699},[178,23617,23618],{"class":319},"p.Name",[178,23620,2983],{"class":699},[178,23622,23623],{"class":188},"\"拿着：\"",[178,23625,2983],{"class":699},[178,23627,23628],{"class":319},"p.m_phone.m_PName;\n",[178,23630,23631],{"class":180,"line":1046},[178,23632,3371],{"class":319},[178,23634,23635,23637,23639],{"class":180,"line":1059},[178,23636,1956],{"class":699},[178,23638,838],{"class":184},[178,23640,3760],{"class":319},[178,23642,23643],{"class":180,"line":1072},[178,23644,3352],{"class":319},[178,23646,23647,23649],{"class":180,"line":1077},[178,23648,7402],{"class":184},[178,23650,7405],{"class":319},[178,23652,23653],{"class":180,"line":1082},[178,23654,3371],{"class":319},[19,23656,10786],{},[154,23658,23660],{"className":1942,"code":23659,"language":1944,"meta":160,"style":160},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[70,23661,23662,23667],{"__ignoreMap":160},[178,23663,23664],{"class":180,"line":181},[178,23665,23666],{"class":2008},"    \u002F\u002F不需要写这个：\n",[178,23668,23669],{"class":180,"line":263},[178,23670,23671],{"class":2008},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,23673,23674],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[154,23676,23678],{"className":1942,"code":23677,"language":1944,"meta":160,"style":160},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[70,23679,23680],{"__ignoreMap":160},[178,23681,23682,23684,23687,23689,23692,23695],{"class":180,"line":181},[178,23683,20804],{"class":184},[178,23685,23686],{"class":319},"(string name.string pname):",[178,23688,16768],{"class":184},[178,23690,23691],{"class":319},"(name),",[178,23693,23694],{"class":184},"m_phone",[178,23696,23697],{"class":319},"(pname) {}\n",[19,23699,23700,23701,330,23704],{},"采用的是隐式转换法，实际为如下：\n",[70,23702,23703],{},"m_phone(pname)",[70,23705,23706],{},"Phone m_phone=pname",[19,23708,23709,23712],{},[2093,23710,23711],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,23714,23715],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[387,23717,23719],{"id":23718},"_828静态对象","8.2.8静态对象",[19,23721,23722],{},"静态对象在成员对象前static，称为静态对象",[19,23724,23725],{},"静态对象分为两类：",[26,23727,23728],{},[29,23729,23730],{},"静态成员变量",[2946,23732,23733,23736,23739],{},[29,23734,23735],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[29,23737,23738],{},"②在编译阶段分配内存",[29,23740,23741],{},"③类内声明，类外初始化",[26,23743,23744],{"start":263},[29,23745,23746],{},"静态成员函数",[2946,23748,23749,23752],{},[29,23750,23751],{},"①所有对象共享同一个函数",[29,23753,23754],{},"②静态成员函数只能访问静态成员变量",[23756,23757,23759],"h4",{"id":23758},"_8281静态成员变量","8.2.8.1静态成员变量",[154,23761,23763],{"className":1942,"code":23762,"language":1944,"meta":160,"style":160},"#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",[70,23764,23765,23771,23781,23787,23791,23795,23800,23805,23810,23818,23822,23826,23830,23838,23842,23846,23851,23864,23868,23876,23880,23886],{"__ignoreMap":160},[178,23766,23767,23769],{"class":180,"line":181},[178,23768,3735],{"class":699},[178,23770,3738],{"class":188},[178,23772,23773,23775,23777,23779],{"class":180,"line":263},[178,23774,3743],{"class":699},[178,23776,3746],{"class":699},[178,23778,3749],{"class":184},[178,23780,3100],{"class":319},[178,23782,23783,23785],{"class":180,"line":274},[178,23784,16453],{"class":699},[178,23786,16929],{"class":184},[178,23788,23789],{"class":180,"line":354},[178,23790,3352],{"class":319},[178,23792,23793],{"class":180,"line":364},[178,23794,16475],{"class":699},[178,23796,23797],{"class":180,"line":740},[178,23798,23799],{"class":2008},"    \u002F\u002F非静态成员变量\n",[178,23801,23802],{"class":180,"line":746},[178,23803,23804],{"class":2008},"    \u002F\u002F int m_A;\n",[178,23806,23807],{"class":180,"line":752},[178,23808,23809],{"class":2008},"    \u002F\u002F定义静态成员变量\n",[178,23811,23812,23814,23816],{"class":180,"line":757},[178,23813,12781],{"class":699},[178,23815,4166],{"class":699},[178,23817,23150],{"class":319},[178,23819,23820],{"class":180,"line":763},[178,23821,722],{"emptyLinePlaceholder":721},[178,23823,23824],{"class":180,"line":769},[178,23825,722],{"emptyLinePlaceholder":721},[178,23827,23828],{"class":180,"line":774},[178,23829,5767],{"class":319},[178,23831,23832,23834,23836],{"class":180,"line":780},[178,23833,7133],{"class":699},[178,23835,7357],{"class":184},[178,23837,3760],{"class":319},[178,23839,23840],{"class":180,"line":786},[178,23841,3352],{"class":319},[178,23843,23844],{"class":180,"line":792},[178,23845,17071],{"class":319},[178,23847,23848],{"class":180,"line":798},[178,23849,23850],{"class":2008},"    \u002F\u002F输出类成员变量这块内存\n",[178,23852,23853,23855,23857,23860,23862],{"class":180,"line":804},[178,23854,3357],{"class":319},[178,23856,2983],{"class":699},[178,23858,23859],{"class":319},"p.m_A",[178,23861,2983],{"class":699},[178,23863,3005],{"class":319},[178,23865,23866],{"class":180,"line":810},[178,23867,3371],{"class":319},[178,23869,23870,23872,23874],{"class":180,"line":816},[178,23871,1956],{"class":699},[178,23873,838],{"class":184},[178,23875,3760],{"class":319},[178,23877,23878],{"class":180,"line":822},[178,23879,3352],{"class":319},[178,23881,23882,23884],{"class":180,"line":827},[178,23883,7402],{"class":184},[178,23885,3760],{"class":319},[178,23887,23888],{"class":180,"line":832},[178,23889,3371],{"class":319},[19,23891,23892],{},"此时输出是报错的：无法解析外部命令",[19,23894,23895],{},"解决这一问题：必须用到类内声明，类外初始化操作",[154,23897,23899],{"className":1942,"code":23898,"language":1944,"meta":160,"style":160},"#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",[70,23900,23901,23907,23917,23923,23927,23931,23936,23944,23948,23953,23968,23976,23980,23984,23989,23994,24006,24011,24022,24027,24032,24045,24049,24057,24061,24067],{"__ignoreMap":160},[178,23902,23903,23905],{"class":180,"line":181},[178,23904,3735],{"class":699},[178,23906,3738],{"class":188},[178,23908,23909,23911,23913,23915],{"class":180,"line":263},[178,23910,3743],{"class":699},[178,23912,3746],{"class":699},[178,23914,3749],{"class":184},[178,23916,3100],{"class":319},[178,23918,23919,23921],{"class":180,"line":274},[178,23920,16453],{"class":699},[178,23922,16929],{"class":184},[178,23924,23925],{"class":180,"line":354},[178,23926,3352],{"class":319},[178,23928,23929],{"class":180,"line":364},[178,23930,16475],{"class":699},[178,23932,23933],{"class":180,"line":740},[178,23934,23935],{"class":2008},"    \u002F\u002F类内声明\n",[178,23937,23938,23940,23942],{"class":180,"line":746},[178,23939,12781],{"class":699},[178,23941,4166],{"class":699},[178,23943,23150],{"class":319},[178,23945,23946],{"class":180,"line":752},[178,23947,5767],{"class":319},[178,23949,23950],{"class":180,"line":757},[178,23951,23952],{"class":2008},"\u002F\u002F类外初始化\n",[178,23954,23955,23957,23959,23962,23964,23966],{"class":180,"line":763},[178,23956,1956],{"class":699},[178,23958,17327],{"class":184},[178,23960,23961],{"class":319},"::m_A",[178,23963,330],{"class":699},[178,23965,2386],{"class":195},[178,23967,3100],{"class":319},[178,23969,23970,23972,23974],{"class":180,"line":769},[178,23971,7133],{"class":699},[178,23973,7357],{"class":184},[178,23975,3760],{"class":319},[178,23977,23978],{"class":180,"line":774},[178,23979,3352],{"class":319},[178,23981,23982],{"class":180,"line":780},[178,23983,17071],{"class":319},[178,23985,23986],{"class":180,"line":786},[178,23987,23988],{"class":2008},"    \u002F\u002F访问变量的原内存空间\n",[178,23990,23991],{"class":180,"line":792},[178,23992,23993],{"class":2008},"    \u002F\u002F100\n",[178,23995,23996,23998,24000,24002,24004],{"class":180,"line":798},[178,23997,3357],{"class":319},[178,23999,2983],{"class":699},[178,24001,23859],{"class":319},[178,24003,2983],{"class":699},[178,24005,3005],{"class":319},[178,24007,24008],{"class":180,"line":804},[178,24009,24010],{"class":319},"    Person p2;\n",[178,24012,24013,24016,24018,24020],{"class":180,"line":810},[178,24014,24015],{"class":319},"    p2.m_A",[178,24017,330],{"class":699},[178,24019,1002],{"class":195},[178,24021,3100],{"class":319},[178,24023,24024],{"class":180,"line":816},[178,24025,24026],{"class":2008},"    \u002F\u002F继续访问这片空间\n",[178,24028,24029],{"class":180,"line":822},[178,24030,24031],{"class":2008},"    \u002F\u002F200\n",[178,24033,24034,24036,24038,24041,24043],{"class":180,"line":827},[178,24035,3357],{"class":319},[178,24037,2983],{"class":699},[178,24039,24040],{"class":319},"p2.m_A",[178,24042,2983],{"class":699},[178,24044,3005],{"class":319},[178,24046,24047],{"class":180,"line":832},[178,24048,3371],{"class":319},[178,24050,24051,24053,24055],{"class":180,"line":850},[178,24052,1956],{"class":699},[178,24054,838],{"class":184},[178,24056,3760],{"class":319},[178,24058,24059],{"class":180,"line":866},[178,24060,3352],{"class":319},[178,24062,24063,24065],{"class":180,"line":877},[178,24064,7402],{"class":184},[178,24066,7405],{"class":319},[178,24068,24069],{"class":180,"line":882},[178,24070,3371],{"class":319},[19,24072,24073],{},[2093,24074,24075],{},"静态变量的访问",[154,24077,24079],{"className":1942,"code":24078,"language":1944,"meta":160,"style":160},"#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",[70,24080,24081,24087,24097,24103,24107,24111,24115,24123,24127,24132,24140,24144,24148,24162,24177,24185,24189,24194,24199,24204,24209,24221,24226,24231,24245,24262,24266,24274,24278,24284],{"__ignoreMap":160},[178,24082,24083,24085],{"class":180,"line":181},[178,24084,3735],{"class":699},[178,24086,3738],{"class":188},[178,24088,24089,24091,24093,24095],{"class":180,"line":263},[178,24090,3743],{"class":699},[178,24092,3746],{"class":699},[178,24094,3749],{"class":184},[178,24096,3100],{"class":319},[178,24098,24099,24101],{"class":180,"line":274},[178,24100,16453],{"class":699},[178,24102,16929],{"class":184},[178,24104,24105],{"class":180,"line":354},[178,24106,3352],{"class":319},[178,24108,24109],{"class":180,"line":364},[178,24110,16475],{"class":699},[178,24112,24113],{"class":180,"line":740},[178,24114,23935],{"class":2008},[178,24116,24117,24119,24121],{"class":180,"line":746},[178,24118,12781],{"class":699},[178,24120,4166],{"class":699},[178,24122,23150],{"class":319},[178,24124,24125],{"class":180,"line":752},[178,24126,16980],{"class":699},[178,24128,24129],{"class":180,"line":757},[178,24130,24131],{"class":2008},"    \u002F\u002F静态成员变量也是有访问权限的\n",[178,24133,24134,24136,24138],{"class":180,"line":763},[178,24135,12781],{"class":699},[178,24137,4166],{"class":699},[178,24139,23157],{"class":319},[178,24141,24142],{"class":180,"line":769},[178,24143,5767],{"class":319},[178,24145,24146],{"class":180,"line":774},[178,24147,23952],{"class":2008},[178,24149,24150,24152,24154,24156,24158,24160],{"class":180,"line":780},[178,24151,1956],{"class":699},[178,24153,17327],{"class":184},[178,24155,23961],{"class":319},[178,24157,330],{"class":699},[178,24159,2386],{"class":195},[178,24161,3100],{"class":319},[178,24163,24164,24166,24168,24171,24173,24175],{"class":180,"line":786},[178,24165,1956],{"class":699},[178,24167,17327],{"class":184},[178,24169,24170],{"class":319},"::m_B",[178,24172,330],{"class":699},[178,24174,2640],{"class":195},[178,24176,3100],{"class":319},[178,24178,24179,24181,24183],{"class":180,"line":792},[178,24180,7133],{"class":699},[178,24182,7426],{"class":184},[178,24184,3760],{"class":319},[178,24186,24187],{"class":180,"line":798},[178,24188,3352],{"class":319},[178,24190,24191],{"class":180,"line":804},[178,24192,24193],{"class":2008},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[178,24195,24196],{"class":180,"line":810},[178,24197,24198],{"class":2008},"    \u002F\u002F静态成员变量有两种访问方式：\n",[178,24200,24201],{"class":180,"line":816},[178,24202,24203],{"class":2008},"    \u002F\u002F1.通过对象进行访问\n",[178,24205,24206],{"class":180,"line":822},[178,24207,24208],{"class":319},"    Person p;  \n",[178,24210,24211,24213,24215,24217,24219],{"class":180,"line":827},[178,24212,3357],{"class":319},[178,24214,2983],{"class":699},[178,24216,23859],{"class":319},[178,24218,2983],{"class":699},[178,24220,3005],{"class":319},[178,24222,24223],{"class":180,"line":832},[178,24224,24225],{"class":2008},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[178,24227,24228],{"class":180,"line":850},[178,24229,24230],{"class":2008},"    \u002F\u002F2.通过类名进行访问\n",[178,24232,24233,24235,24237,24239,24241,24243],{"class":180,"line":866},[178,24234,3357],{"class":319},[178,24236,2983],{"class":699},[178,24238,20804],{"class":184},[178,24240,23961],{"class":319},[178,24242,2983],{"class":699},[178,24244,3005],{"class":319},[178,24246,24247,24249,24251,24253,24255,24257,24259],{"class":180,"line":877},[178,24248,3357],{"class":319},[178,24250,2983],{"class":699},[178,24252,20804],{"class":184},[178,24254,24170],{"class":319},[178,24256,2983],{"class":699},[178,24258,3048],{"class":319},[178,24260,24261],{"class":2008}," \u002F\u002F没有访问权限，报错\n",[178,24263,24264],{"class":180,"line":882},[178,24265,3371],{"class":319},[178,24267,24268,24270,24272],{"class":180,"line":898},[178,24269,1956],{"class":699},[178,24271,838],{"class":184},[178,24273,3760],{"class":319},[178,24275,24276],{"class":180,"line":914},[178,24277,3352],{"class":319},[178,24279,24280,24282],{"class":180,"line":919},[178,24281,7471],{"class":184},[178,24283,7405],{"class":319},[178,24285,24286],{"class":180,"line":935},[178,24287,3371],{"class":319},[23756,24289,24291],{"id":24290},"_8282静态成员函数","8.2.8.2静态成员函数",[19,24293,24294],{},"1.静态成员函数定义与访问",[154,24296,24298],{"className":1942,"code":24297,"language":1944,"meta":160,"style":160},"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",[70,24299,24300,24306,24310,24314,24319,24330,24334,24348,24352,24356,24364,24368,24373,24378,24382,24390,24395,24405],{"__ignoreMap":160},[178,24301,24302,24304],{"class":180,"line":181},[178,24303,16453],{"class":699},[178,24305,16929],{"class":184},[178,24307,24308],{"class":180,"line":263},[178,24309,3352],{"class":319},[178,24311,24312],{"class":180,"line":274},[178,24313,16475],{"class":699},[178,24315,24316],{"class":180,"line":354},[178,24317,24318],{"class":2008},"    \u002F\u002F在公共权限下定义静态成员函数\n",[178,24320,24321,24323,24326,24328],{"class":180,"line":364},[178,24322,12781],{"class":699},[178,24324,24325],{"class":699}," void",[178,24327,13146],{"class":184},[178,24329,3760],{"class":319},[178,24331,24332],{"class":180,"line":740},[178,24333,3814],{"class":319},[178,24335,24336,24339,24341,24344,24346],{"class":180,"line":746},[178,24337,24338],{"class":319},"        coout",[178,24340,2983],{"class":699},[178,24342,24343],{"class":188},"\"静态成员函数的调用\"",[178,24345,2983],{"class":699},[178,24347,3005],{"class":319},[178,24349,24350],{"class":180,"line":752},[178,24351,3971],{"class":319},[178,24353,24354],{"class":180,"line":757},[178,24355,5767],{"class":319},[178,24357,24358,24360,24362],{"class":180,"line":763},[178,24359,7133],{"class":699},[178,24361,7357],{"class":184},[178,24363,3760],{"class":319},[178,24365,24366],{"class":180,"line":769},[178,24367,3352],{"class":319},[178,24369,24370],{"class":180,"line":774},[178,24371,24372],{"class":2008},"    \u002F\u002F静态成员函数的调用方式:\n",[178,24374,24375],{"class":180,"line":780},[178,24376,24377],{"class":2008},"    \u002F\u002F1.通过对象访问\n",[178,24379,24380],{"class":180,"line":786},[178,24381,17071],{"class":319},[178,24383,24384,24386,24388],{"class":180,"line":792},[178,24385,17624],{"class":319},[178,24387,13312],{"class":184},[178,24389,7405],{"class":319},[178,24391,24392],{"class":180,"line":798},[178,24393,24394],{"class":2008},"    \u002F\u002F2.通过类名访问\n",[178,24396,24397,24399,24401,24403],{"class":180,"line":804},[178,24398,20277],{"class":184},[178,24400,19490],{"class":319},[178,24402,13312],{"class":184},[178,24404,7405],{"class":319},[178,24406,24407],{"class":180,"line":810},[178,24408,3371],{"class":319},[26,24410,24411],{"start":263},[29,24412,24413],{},"静态成员函数只能访问静态成员变量",[154,24415,24417],{"className":1942,"code":24416,"language":1944,"meta":160,"style":160},"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",[70,24418,24419,24425,24429,24433,24437,24447,24451,24465,24470,24482,24486,24497,24507,24511,24515,24519,24529,24533,24546,24550,24554,24558,24562,24576,24584,24588,24592,24596,24600,24608,24612,24622,24627,24631,24639,24643,24649],{"__ignoreMap":160},[178,24420,24421,24423],{"class":180,"line":181},[178,24422,16453],{"class":699},[178,24424,16929],{"class":184},[178,24426,24427],{"class":180,"line":263},[178,24428,3352],{"class":319},[178,24430,24431],{"class":180,"line":274},[178,24432,16475],{"class":699},[178,24434,24435],{"class":180,"line":354},[178,24436,24318],{"class":2008},[178,24438,24439,24441,24443,24445],{"class":180,"line":364},[178,24440,12781],{"class":699},[178,24442,24325],{"class":699},[178,24444,13146],{"class":184},[178,24446,3760],{"class":319},[178,24448,24449],{"class":180,"line":740},[178,24450,3814],{"class":319},[178,24452,24453,24456,24458,24460,24462],{"class":180,"line":746},[178,24454,24455],{"class":319},"        m_A",[178,24457,330],{"class":699},[178,24459,2251],{"class":195},[178,24461,2005],{"class":319},[178,24463,24464],{"class":2008}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[178,24466,24467],{"class":180,"line":752},[178,24468,24469],{"class":2008},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[178,24471,24472,24474,24476,24478,24480],{"class":180,"line":757},[178,24473,24338],{"class":319},[178,24475,2983],{"class":699},[178,24477,24343],{"class":188},[178,24479,2983],{"class":699},[178,24481,3005],{"class":319},[178,24483,24484],{"class":180,"line":763},[178,24485,3971],{"class":319},[178,24487,24488,24490,24492,24494],{"class":180,"line":769},[178,24489,12781],{"class":699},[178,24491,4166],{"class":699},[178,24493,17206],{"class":319},[178,24495,24496],{"class":2008}," \u002F\u002F静态成员变量\n",[178,24498,24499,24501,24504],{"class":180,"line":774},[178,24500,3769],{"class":699},[178,24502,24503],{"class":319}," m_B;",[178,24505,24506],{"class":2008}," \u002F\u002F非静态成员变量\n",[178,24508,24509],{"class":180,"line":780},[178,24510,722],{"emptyLinePlaceholder":721},[178,24512,24513],{"class":180,"line":786},[178,24514,16980],{"class":699},[178,24516,24517],{"class":180,"line":792},[178,24518,24131],{"class":2008},[178,24520,24521,24523,24525,24527],{"class":180,"line":798},[178,24522,12781],{"class":699},[178,24524,24325],{"class":699},[178,24526,15378],{"class":184},[178,24528,3760],{"class":319},[178,24530,24531],{"class":180,"line":804},[178,24532,3814],{"class":319},[178,24534,24535,24537,24539,24542,24544],{"class":180,"line":810},[178,24536,5224],{"class":319},[178,24538,2983],{"class":699},[178,24540,24541],{"class":188},"\"这是私有权限下的静态函数调用\"",[178,24543,2983],{"class":699},[178,24545,3005],{"class":319},[178,24547,24548],{"class":180,"line":816},[178,24549,3971],{"class":319},[178,24551,24552],{"class":180,"line":822},[178,24553,722],{"emptyLinePlaceholder":721},[178,24555,24556],{"class":180,"line":827},[178,24557,722],{"emptyLinePlaceholder":721},[178,24559,24560],{"class":180,"line":832},[178,24561,5767],{"class":319},[178,24563,24564,24566,24568,24570,24572,24574],{"class":180,"line":850},[178,24565,1956],{"class":699},[178,24567,17327],{"class":184},[178,24569,23961],{"class":319},[178,24571,330],{"class":699},[178,24573,2133],{"class":195},[178,24575,3100],{"class":319},[178,24577,24578,24580,24582],{"class":180,"line":866},[178,24579,7133],{"class":699},[178,24581,7357],{"class":184},[178,24583,3760],{"class":319},[178,24585,24586],{"class":180,"line":877},[178,24587,3352],{"class":319},[178,24589,24590],{"class":180,"line":882},[178,24591,24372],{"class":2008},[178,24593,24594],{"class":180,"line":898},[178,24595,24377],{"class":2008},[178,24597,24598],{"class":180,"line":914},[178,24599,17071],{"class":319},[178,24601,24602,24604,24606],{"class":180,"line":919},[178,24603,17624],{"class":319},[178,24605,13312],{"class":184},[178,24607,7405],{"class":319},[178,24609,24610],{"class":180,"line":935},[178,24611,24394],{"class":2008},[178,24613,24614,24616,24618,24620],{"class":180,"line":952},[178,24615,20277],{"class":184},[178,24617,19490],{"class":319},[178,24619,13312],{"class":184},[178,24621,7405],{"class":319},[178,24623,24624],{"class":180,"line":966},[178,24625,24626],{"class":2008},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[178,24628,24629],{"class":180,"line":980},[178,24630,3371],{"class":319},[178,24632,24633,24635,24637],{"class":180,"line":985},[178,24634,1956],{"class":699},[178,24636,838],{"class":184},[178,24638,3760],{"class":319},[178,24640,24641],{"class":180,"line":1008},[178,24642,3352],{"class":319},[178,24644,24645,24647],{"class":180,"line":1014},[178,24646,7402],{"class":184},[178,24648,7405],{"class":319},[178,24650,24651],{"class":180,"line":1019},[178,24652,3371],{"class":319},[387,24654,24656],{"id":24655},"_83c对象模型和this指针","8.3C++对象模型和this指针",[23756,24658,24660],{"id":24659},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,24662,24663],{},"在c++中，类内的成员变量和成员函数分开存储",[19,24665,24666],{},"只有非静态成员变量才属于类的对象上",[24668,24669,24671],"h5",{"id":24670},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[154,24673,24675],{"className":1942,"code":24674,"language":1944,"meta":160,"style":160},"#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",[70,24676,24677,24684,24694,24700,24704,24708,24712,24720,24724,24728,24751,24755,24763,24767,24773],{"__ignoreMap":160},[178,24678,24679,24681],{"class":180,"line":181},[178,24680,3735],{"class":699},[178,24682,24683],{"class":188},"\u003Ciostraem>\n",[178,24685,24686,24688,24690,24692],{"class":180,"line":263},[178,24687,3743],{"class":699},[178,24689,3746],{"class":699},[178,24691,3749],{"class":184},[178,24693,3100],{"class":319},[178,24695,24696,24698],{"class":180,"line":274},[178,24697,16453],{"class":699},[178,24699,16929],{"class":184},[178,24701,24702],{"class":180,"line":354},[178,24703,3352],{"class":319},[178,24705,24706],{"class":180,"line":364},[178,24707,722],{"emptyLinePlaceholder":721},[178,24709,24710],{"class":180,"line":740},[178,24711,5767],{"class":319},[178,24713,24714,24716,24718],{"class":180,"line":746},[178,24715,7133],{"class":699},[178,24717,7357],{"class":184},[178,24719,3760],{"class":319},[178,24721,24722],{"class":180,"line":752},[178,24723,3352],{"class":319},[178,24725,24726],{"class":180,"line":757},[178,24727,17071],{"class":319},[178,24729,24730,24732,24734,24737,24739,24742,24744,24746,24748],{"class":180,"line":763},[178,24731,3357],{"class":319},[178,24733,2983],{"class":699},[178,24735,24736],{"class":188},"\"size of p=\"",[178,24738,2983],{"class":699},[178,24740,24741],{"class":184},"sizeoif",[178,24743,8308],{"class":319},[178,24745,2983],{"class":699},[178,24747,3048],{"class":319},[178,24749,24750],{"class":2008}," \u002F\u002F查看这个空类的占用的内存空间\n",[178,24752,24753],{"class":180,"line":769},[178,24754,3371],{"class":319},[178,24756,24757,24759,24761],{"class":180,"line":774},[178,24758,1956],{"class":699},[178,24760,838],{"class":184},[178,24762,3760],{"class":319},[178,24764,24765],{"class":180,"line":780},[178,24766,3352],{"class":319},[178,24768,24769,24771],{"class":180,"line":786},[178,24770,7402],{"class":184},[178,24772,7405],{"class":319},[178,24774,24775],{"class":180,"line":792},[178,24776,3371],{"class":319},[19,24778,24779],{},"输出结果为：size of p=1",[19,24781,24782],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,24784,24785],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24668,24787,24789],{"id":24788},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[154,24791,24793],{"className":1942,"code":24792,"language":1944,"meta":160,"style":160},"#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",[70,24794,24795,24801,24811,24819,24823,24832,24836,24844,24848,24852,24871,24875,24879,24887,24891,24897],{"__ignoreMap":160},[178,24796,24797,24799],{"class":180,"line":181},[178,24798,3735],{"class":699},[178,24800,3738],{"class":188},[178,24802,24803,24805,24807,24809],{"class":180,"line":263},[178,24804,3743],{"class":699},[178,24806,3746],{"class":699},[178,24808,3749],{"class":184},[178,24810,3100],{"class":319},[178,24812,24813,24815,24817],{"class":180,"line":274},[178,24814,16453],{"class":699},[178,24816,17327],{"class":184},[178,24818,4450],{"class":319},[178,24820,24821],{"class":180,"line":354},[178,24822,3352],{"class":319},[178,24824,24825,24827,24829],{"class":180,"line":364},[178,24826,3769],{"class":699},[178,24828,17206],{"class":319},[178,24830,24831],{"class":2008},"\u002F\u002F非静态成员变量\n",[178,24833,24834],{"class":180,"line":740},[178,24835,5767],{"class":319},[178,24837,24838,24840,24842],{"class":180,"line":746},[178,24839,7133],{"class":699},[178,24841,7357],{"class":184},[178,24843,3760],{"class":319},[178,24845,24846],{"class":180,"line":752},[178,24847,3352],{"class":319},[178,24849,24850],{"class":180,"line":757},[178,24851,17071],{"class":319},[178,24853,24854,24856,24858,24860,24862,24864,24866,24868],{"class":180,"line":763},[178,24855,3357],{"class":319},[178,24857,2983],{"class":699},[178,24859,24736],{"class":188},[178,24861,3179],{"class":699},[178,24863,8308],{"class":319},[178,24865,2983],{"class":699},[178,24867,3048],{"class":319},[178,24869,24870],{"class":2008}," \u002F\u002F查看不是空对象时占用多少内存\n",[178,24872,24873],{"class":180,"line":769},[178,24874,722],{"emptyLinePlaceholder":721},[178,24876,24877],{"class":180,"line":774},[178,24878,3371],{"class":319},[178,24880,24881,24883,24885],{"class":180,"line":780},[178,24882,1956],{"class":699},[178,24884,838],{"class":184},[178,24886,3760],{"class":319},[178,24888,24889],{"class":180,"line":786},[178,24890,3352],{"class":319},[178,24892,24893,24895],{"class":180,"line":792},[178,24894,7402],{"class":184},[178,24896,7405],{"class":319},[178,24898,24899],{"class":180,"line":798},[178,24900,3371],{"class":319},[19,24902,24903],{},"输出结果：size of p=4",[19,24905,24906],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[26,24908,24909],{},[29,24910,24911],{},"如果加上非静态成员变量，Person类修改如下",[154,24913,24915],{"className":1942,"code":24914,"language":1944,"meta":160,"style":160},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[70,24916,24917,24923,24927,24933,24941,24945,24950],{"__ignoreMap":160},[178,24918,24919,24921],{"class":180,"line":181},[178,24920,16453],{"class":699},[178,24922,16929],{"class":184},[178,24924,24925],{"class":180,"line":263},[178,24926,3352],{"class":319},[178,24928,24929,24931],{"class":180,"line":274},[178,24930,3769],{"class":699},[178,24932,23150],{"class":319},[178,24934,24935,24937,24939],{"class":180,"line":354},[178,24936,12781],{"class":699},[178,24938,4166],{"class":699},[178,24940,23157],{"class":319},[178,24942,24943],{"class":180,"line":364},[178,24944,5767],{"class":319},[178,24946,24947],{"class":180,"line":740},[178,24948,24949],{"class":2008},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[178,24951,24952,24954,24956,24958,24960,24962],{"class":180,"line":746},[178,24953,1956],{"class":699},[178,24955,17327],{"class":184},[178,24957,24170],{"class":319},[178,24959,330],{"class":699},[178,24961,2133],{"class":195},[178,24963,3100],{"class":319},[19,24965,24966],{},"输出结果：4",[19,24968,24969],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[26,24971,24972],{"start":263},[29,24973,24974],{},"加上非静态成员函数",[154,24976,24978],{"className":1942,"code":24977,"language":1944,"meta":160,"style":160},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[70,24979,24980,24987,24991,24997,25005,25009,25013,25017],{"__ignoreMap":160},[178,24981,24982,24984],{"class":180,"line":181},[178,24983,16453],{"class":699},[178,24985,24986],{"class":184},"  Person\n",[178,24988,24989],{"class":180,"line":263},[178,24990,3352],{"class":319},[178,24992,24993,24995],{"class":180,"line":274},[178,24994,3769],{"class":699},[178,24996,23150],{"class":319},[178,24998,24999,25001,25003],{"class":180,"line":354},[178,25000,16668],{"class":699},[178,25002,13146],{"class":184},[178,25004,3760],{"class":319},[178,25006,25007],{"class":180,"line":364},[178,25008,3814],{"class":319},[178,25010,25011],{"class":180,"line":740},[178,25012,722],{"emptyLinePlaceholder":721},[178,25014,25015],{"class":180,"line":746},[178,25016,3971],{"class":319},[178,25018,25019],{"class":180,"line":752},[178,25020,5767],{"class":319},[19,25022,25023],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[26,25025,25026],{"start":274},[29,25027,25028],{},"加上静态成员函数",[154,25030,25032],{"className":1942,"code":25031,"language":1944,"meta":160,"style":160},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[70,25033,25034,25040,25044,25050,25058,25062,25066,25070,25081,25085,25089,25093],{"__ignoreMap":160},[178,25035,25036,25038],{"class":180,"line":181},[178,25037,16453],{"class":699},[178,25039,24986],{"class":184},[178,25041,25042],{"class":180,"line":263},[178,25043,3352],{"class":319},[178,25045,25046,25048],{"class":180,"line":274},[178,25047,3769],{"class":699},[178,25049,23150],{"class":319},[178,25051,25052,25054,25056],{"class":180,"line":354},[178,25053,16668],{"class":699},[178,25055,13146],{"class":184},[178,25057,3760],{"class":319},[178,25059,25060],{"class":180,"line":364},[178,25061,3814],{"class":319},[178,25063,25064],{"class":180,"line":740},[178,25065,722],{"emptyLinePlaceholder":721},[178,25067,25068],{"class":180,"line":746},[178,25069,3971],{"class":319},[178,25071,25072,25074,25076,25079],{"class":180,"line":752},[178,25073,12781],{"class":699},[178,25075,24325],{"class":699},[178,25077,25078],{"class":184}," func1",[178,25080,3760],{"class":319},[178,25082,25083],{"class":180,"line":757},[178,25084,3814],{"class":319},[178,25086,25087],{"class":180,"line":763},[178,25088,722],{"emptyLinePlaceholder":721},[178,25090,25091],{"class":180,"line":769},[178,25092,3971],{"class":319},[178,25094,25095],{"class":180,"line":774},[178,25096,5767],{"class":319},[19,25098,24966],{},[19,25100,25101],{},"解释：静态成员函数也不属于类上",[1853,25103,9443],{},{"title":160,"searchDepth":263,"depth":263,"links":25105},[25106,25112],{"id":16404,"depth":263,"text":16405,"children":25107},[25108,25109,25110,25111],{"id":16408,"depth":274,"text":16409},{"id":17132,"depth":274,"text":17133},{"id":17304,"depth":274,"text":17305},{"id":17763,"depth":274,"text":17764},{"id":20135,"depth":263,"text":20136,"children":25113},[25114,25115,25116,25117,25118,25119,25120,25121,25122],{"id":20147,"depth":274,"text":20148},{"id":20440,"depth":274,"text":20441},{"id":20931,"depth":274,"text":20932},{"id":22028,"depth":274,"text":22029},{"id":22451,"depth":274,"text":22452},{"id":22930,"depth":274,"text":22931},{"id":23305,"depth":274,"text":23306},{"id":23718,"depth":274,"text":23719},{"id":24655,"depth":274,"text":24656},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16370,"description":25123},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25130,"title":1944,"body":25131,"description":25135,"extension":1880,"meta":25136,"navigation":721,"path":25138,"seo":25139,"stem":25140,"__hash__":25141},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25132,"toc":25133},[],{"title":160,"searchDepth":263,"depth":263,"links":25134},[],null,{"category":25137},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":1944,"description":25135},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25143,"title":25144,"body":25145,"description":160,"extension":1880,"meta":25731,"navigation":721,"path":25732,"seo":25733,"stem":25734,"__hash__":25735},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25146,"toc":25713},[25147,25150,25154,25157,25160,25163,25181,25186,25189,25192,25195,25198,25203,25206,25211,25214,25217,25221,25224,25227,25233,25236,25254,25258,25262,25265,25270,25273,25277,25280,25293,25296,25300,25303,25306,25309,25334,25337,25346,25357,25372,25404,25408,25415,25423,25427,25430,25433,25438,25442,25445,25448,25453,25456,25460,25463,25466,25471,25474,25478,25483,25487,25553,25557,25560,25563,25566,25569,25572,25578,25595,25598,25612,25621,25625,25628,25631,25636,25639,25644,25649,25652,25655,25660,25665,25668,25673,25678,25681,25686,25691,25694,25697,25702,25705,25710],[10,25148,25144],{"id":25149},"_1强化学习基本认识",[14,25151,25153],{"id":25152},"_11什么是强化学习","1.1.什么是强化学习",[19,25155,25156],{},"强化学习有两部分组成：智能体和环境；",[19,25158,25159],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,25161,25162],{},"强化学习与监督学习的区别:",[26,25164,25165,25168,25171,25174],{},[29,25166,25167],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[29,25169,25170],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[29,25172,25173],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[29,25175,25176,25177,25180],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[2093,25178,25179],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,25182,25183],{},[3269,25184],{"alt":160,"src":25185},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,25187,25188],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,25190,25191],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,25193,25194],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,25196,25197],{},"获取奖励",[19,25199,25200],{},[3269,25201],{"alt":160,"src":25202},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,25204,25205],{},"强化学习可以分成标准强化学习和深度强化学习",[19,25207,25208],{},[3269,25209],{"alt":160,"src":25210},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,25212,25213],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,25215,25216],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25218,25220],{"id":25219},"_12强化学习应用场景","1.2.强化学习应用场景",[19,25222,25223],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,25225,25226],{},"具身智能中的应用",[19,25228,25229,25232],{},[2093,25230,25231],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,25234,25235],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,25237,25238,25239,25242,25243,25246,25247,25250,25251],{},"机器人是",[2093,25240,25241],{},"躯体","，深度学习是",[2093,25244,25245],{},"神经元****网络","，VLA是",[2093,25248,25249],{},"通用的行为逻辑","，而强化学习是",[2093,25252,25253],{},"教练",[14,25255,25257],{"id":25256},"_13序列决策","1.3.序列决策",[387,25259,25261],{"id":25260},"_131智能体与环境","1.3.1.智能体与环境",[19,25263,25264],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,25266,25267],{},[3269,25268],{"alt":160,"src":25269},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,25271,25272],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[387,25274,25276],{"id":25275},"_132奖励","1.3.2.奖励",[19,25278,25279],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,25281,25282,25283,25292],{},"取某个策略的表现如何。强化学习的目的就是",[2093,25284,25285,25286,25291],{},"最大化",[2093,25287,25288],{},[2093,25289,25290],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,25294,25295],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[387,25297,25299],{"id":25298},"_133序列决策","1.3.3.序列决策",[19,25301,25302],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,25304,25305],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,25307,25308],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,25310,25311,25315,25316,25318,25319,25321,25322,25324,25325,15555,25328,15555,25331],{},[25312,25313,25314],"em",{},"Ht"," = ",[25312,25317,2536],{},"1*, a",[25312,25320,1665],{},", r",[25312,25323,1665],{},", . . . ,* ",[25312,25326,25327],{},"ot",[25312,25329,25330],{},", at ,",[25312,25332,25333],{},"rt",[19,25335,25336],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,25338,25339,25315,25342,3457,25344,2369],{},[25312,25340,25341],{},"st",[25312,25343,2002],{},[25312,25345,25314],{},[19,25347,25348,25349,25352,25353,25356],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[2093,25350,25351],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[2093,25354,25355],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,25358,25359,25360,25363,25364,25367,25368,25371],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[2093,25361,25362],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[2093,25365,25366],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25312,25369,25370],{},"S, A, T, R, Ω, O, γ",")。",[19,25373,25374,25375,25377,25378,25380,25381,944,25383,25386,25387,25389,25390,944,25393,25396,25397,25399,25400,25403],{},"其中 ",[25312,25376,2629],{}," 表示状态空间，为隐变量，",[25312,25379,2172],{}," 为动作空间，",[25312,25382,2654],{},[25312,25384,25385],{},"s ′ |s, a",") 为状态转移概率，",[25312,25388,2604],{}," 为奖励函数，",[25312,25391,25392],{},"Ω",[25312,25394,25395],{},"o|s, a",") 为观测概率，",[25312,25398,2530],{}," 为观测空间，",[25312,25401,25402],{},"γ"," 为折扣因子。",[14,25405,25407],{"id":25406},"_14动作空间","1.4.动作空间",[19,25409,25410,25411,25414],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[2093,25412,25413],{},"动作空间"," ，动作空间分为:",[26,25416,25417,25420],{},[29,25418,25419],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[29,25421,25422],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,25424,25426],{"id":25425},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,25428,25429],{},"由策略、价值函数、模型三部分组成",[19,25431,25432],{},"这三者组成马尔可夫决策过程",[19,25434,25435],{},[3269,25436],{"alt":160,"src":25437},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[387,25439,25441],{"id":25440},"_151策略","1.5.1.策略",[19,25443,25444],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,25446,25447],{},"策略可分为两种：",[19,25449,25450],{},[3269,25451],{"alt":160,"src":25452},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,25454,25455],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[387,25457,25459],{"id":25458},"_152价值函数","1.5.2.价值函数",[19,25461,25462],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,25464,25465],{},"价值函数中有一个折扣因子，类似于存款利息",[19,25467,25468],{},[3269,25469],{"alt":160,"src":25470},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,25472,25473],{},"进入某个状态采取的最优动作可以通过Q函数得到",[387,25475,25477],{"id":25476},"_153模型","1.5.3.模型",[19,25479,25480],{},[3269,25481],{"alt":160,"src":25482},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25484,25486],{"id":25485},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[45,25488,25489,25499],{},[48,25490,25491],{},[51,25492,25493,25496],{},[54,25494,25495],{"align":56},"类型",[54,25497,25498],{"align":56},"特点",[62,25500,25501,25511,25521,25531,25543],{},[51,25502,25503,25508],{},[67,25504,25505],{"align":56},[2093,25506,25507],{},"基于价值的智能体",[67,25509,25510],{"align":56},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[51,25512,25513,25518],{},[67,25514,25515],{"align":56},[2093,25516,25517],{},"基于策略的智能体",[67,25519,25520],{"align":56},"直接学习策略，没有学习价值函数",[51,25522,25523,25528],{},[67,25524,25525],{"align":56},[2093,25526,25527],{},"演员-评论员智能体",[67,25529,25530],{"align":56},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[51,25532,25533,25538],{},[67,25534,25535],{"align":56},[2093,25536,25537],{},"有模型强化学习智能体",[67,25539,25540],{"align":56},[3269,25541],{"alt":160,"src":25542},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[51,25544,25545,25550],{},[67,25546,25547],{"align":56},[2093,25548,25549],{},"免模型强化学习智能体",[67,25551,25552],{"align":56},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25554,25556],{"id":25555},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,25558,25559],{},"学习和规划是序列决策的两个基本问题",[19,25561,25562],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,25564,25565],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,25567,25568],{},"强化学习用到的库：Gym",[19,25570,25571],{},"Gym可以检验强化学习算法的优劣",[19,25573,25574,25577],{},[2093,25575,25576],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[154,25579,25581],{"className":172,"code":25580,"language":174,"meta":160,"style":160},"pip install gym==0.25.2\n",[70,25582,25583],{"__ignoreMap":160},[178,25584,25585,25587,25589,25592],{"class":180,"line":181},[178,25586,221],{"class":184},[178,25588,192],{"class":188},[178,25590,25591],{"class":188}," gym==",[178,25593,25594],{"class":195},"0.25.2\n",[19,25596,25597],{},"显示图形界面需要",[154,25599,25601],{"className":172,"code":25600,"language":174,"meta":160,"style":160},"pip install pygame\n",[70,25602,25603],{"__ignoreMap":160},[178,25604,25605,25607,25609],{"class":180,"line":181},[178,25606,221],{"class":184},[178,25608,192],{"class":188},[178,25610,25611],{"class":188}," pygame\n",[19,25613,25614,25615],{},"有关Gym库的相关文档介绍：",[2178,25616,25620],{"href":25617,"rel":25618},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[25619],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25622,25624],{"id":25623},"_18一些补充基础概念","1.8.一些补充基础概念",[19,25626,25627],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,25629,25630],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,25632,25633],{},[3269,25634],{"alt":160,"src":25635},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,25637,25638],{},"折扣率需要自己来设定",[19,25640,25641],{},[3269,25642],{"alt":160,"src":25643},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[26,25645,25646],{},[29,25647,25648],{},"状态转移函数：",[19,25650,25651],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,25653,25654],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,25656,25657],{},[3269,25658],{"alt":160,"src":25659},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[26,25661,25662],{"start":263},[29,25663,25664],{},"动作价值函数：",[19,25666,25667],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,25669,25670],{},[3269,25671],{"alt":160,"src":25672},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[26,25674,25675],{"start":274},[29,25676,25677],{},"最优动作价值函数：",[19,25679,25680],{},"这个函数是对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,25682,25683],{},[3269,25684],{"alt":160,"src":25685},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[26,25687,25688],{"start":354},[29,25689,25690],{},"状态价值函数:",[19,25692,25693],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,25695,25696],{},"它衡量的是“一个具体动作”的长期价值",[19,25698,25699],{},[3269,25700],{"alt":160,"src":25701},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,25703,25704],{},"几个价值函数之间的比较：",[19,25706,25707],{},[3269,25708],{"alt":160,"src":25709},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[1853,25711,25712],{},"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":160,"searchDepth":263,"depth":263,"links":25714},[25715,25716,25717,25722,25723,25728,25729,25730],{"id":25152,"depth":263,"text":25153},{"id":25219,"depth":263,"text":25220},{"id":25256,"depth":263,"text":25257,"children":25718},[25719,25720,25721],{"id":25260,"depth":274,"text":25261},{"id":25275,"depth":274,"text":25276},{"id":25298,"depth":274,"text":25299},{"id":25406,"depth":263,"text":25407},{"id":25425,"depth":263,"text":25426,"children":25724},[25725,25726,25727],{"id":25440,"depth":274,"text":25441},{"id":25458,"depth":274,"text":25459},{"id":25476,"depth":274,"text":25477},{"id":25485,"depth":263,"text":25486},{"id":25555,"depth":263,"text":25556},{"id":25623,"depth":263,"text":25624},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25144,"description":160},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25737,"title":25738,"body":25739,"description":25746,"extension":1880,"meta":25757,"navigation":721,"path":25758,"seo":25759,"stem":25760,"__hash__":25761},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25740,"toc":25755},[25741,25744,25747,25752],[10,25742,25738],{"id":25743},"_2马尔可夫决策过程",[19,25745,25746],{},"这是强化学习的基本框架",[19,25748,25749],{},[3269,25750],{"alt":160,"src":25751},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,25753,25754],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":160,"searchDepth":263,"depth":263,"links":25756},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25738,"description":25746},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25763,"title":25764,"body":25765,"description":160,"extension":1880,"meta":25881,"navigation":721,"path":25882,"seo":25883,"stem":25884,"__hash__":25885},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25766,"toc":25876},[25767,25770,25774,25777,25782,25787,25790,25795,25798,25803,25806,25810,25815,25818,25823,25828,25833,25836,25840,25845,25848,25853,25858,25863,25868,25871],[10,25768,25764],{"id":25769},"_3动作价值函数",[14,25771,25773],{"id":25772},"_31dqn","3.1.DQN",[19,25775,25776],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,25778,25779],{},[3269,25780],{"alt":160,"src":25781},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,25783,25784],{},[3269,25785],{"alt":160,"src":25786},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,25788,25789],{},"DQN算法的描述：",[19,25791,25792],{},[3269,25793],{"alt":160,"src":25794},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,25796,25797],{},"这里的Dense指的是全连接层",[19,25799,25800],{},[3269,25801],{"alt":160,"src":25802},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,25804,25805],{},"当前观测的状态为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,25807,25809],{"id":25808},"_32dqn的举例","3.2.DQN的举例",[19,25811,25812],{},[3269,25813],{"alt":160,"src":25814},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,25816,25817],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,25819,25820],{},[3269,25821],{"alt":160,"src":25822},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,25824,25825],{},[3269,25826],{"alt":160,"src":25827},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,25829,25830],{},[3269,25831],{"alt":160,"src":25832},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,25834,25835],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,25837,25839],{"id":25838},"_33td算法","3.3.TD算法",[19,25841,25842],{},[3269,25843],{"alt":160,"src":25844},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,25846,25847],{},"强化学习TD算法公式的粗略解释：",[19,25849,25850],{},[3269,25851],{"alt":160,"src":25852},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,25854,25855],{},[3269,25856],{"alt":160,"src":25857},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,25859,25860],{},[3269,25861],{"alt":160,"src":25862},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,25864,25865],{},[3269,25866],{"alt":160,"src":25867},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,25869,25870],{},"TD算法总结：",[19,25872,25873],{},[3269,25874],{"alt":160,"src":25875},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":160,"searchDepth":263,"depth":263,"links":25877},[25878,25879,25880],{"id":25772,"depth":263,"text":25773},{"id":25808,"depth":263,"text":25809},{"id":25838,"depth":263,"text":25839},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25764,"description":160},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":25887,"title":25888,"body":25889,"description":160,"extension":1880,"meta":26122,"navigation":721,"path":26123,"seo":26124,"stem":26125,"__hash__":26126},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":25890,"toc":26118},[25891,25894,25898,25901,25904,25909,25914,25917,25922,25927,25930,25935,25938,25943,25946,25951,25954,25959,25962,25967,25972,25975,25980,25983,25986,25991,25994,25999,26004,26008,26011,26014,26019,26024,26027,26032,26037,26040,26045,26048,26051,26056,26059,26064,26067,26072,26077,26080,26085,26090,26093,26098,26101,26106,26109],[10,25892,25888],{"id":25893},"_4策略学习",[14,25895,25897],{"id":25896},"_41概念描述","4.1.概念描述",[19,25899,25900],{},"用神经网络（策略网络）近似策略函数",[19,25902,25903],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,25905,25906],{},[3269,25907],{"alt":160,"src":25908},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,25910,25911],{},[3269,25912],{"alt":160,"src":25913},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,25915,25916],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,25918,25919],{},[3269,25920],{"alt":160,"src":25921},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,25923,25924],{},[3269,25925],{"alt":160,"src":25926},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,25928,25929],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,25931,25932],{},[3269,25933],{"alt":160,"src":25934},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,25936,25937],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,25939,25940],{},[3269,25941],{"alt":160,"src":25942},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,25944,25945],{},"改进theta要用到策略梯度算法",[19,25947,25948],{},[3269,25949],{"alt":160,"src":25950},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,25952,25953],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,25955,25956],{},[3269,25957],{"alt":160,"src":25958},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,25960,25961],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,25963,25964],{},[3269,25965],{"alt":160,"src":25966},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,25968,25969],{},[3269,25970],{"alt":160,"src":25971},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,25973,25974],{},"梯度公式总结：",[19,25976,25977],{},[3269,25978],{"alt":160,"src":25979},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,25981,25982],{},"两个公式的分别应用场景：",[19,25984,25985],{},"对于离散的动作：",[19,25987,25988],{},[3269,25989],{"alt":160,"src":25990},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,25992,25993],{},"对于连续的动作：",[19,25995,25996],{},[3269,25997],{"alt":160,"src":25998},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,26000,26001],{},[3269,26002],{"alt":160,"src":26003},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,26005,26007],{"id":26006},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,26009,26010],{},"使用蒙特卡洛来近似计算策略梯度",[19,26012,26013],{},"蒙特卡洛法的解释如下：",[19,26015,26016],{},[3269,26017],{"alt":160,"src":26018},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,26020,26021],{},[3269,26022],{"alt":160,"src":26023},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,26025,26026],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[26,26028,26029],{},[29,26030,26031],{},"方法一：reinforce算法",[19,26033,26034],{},[3269,26035],{"alt":160,"src":26036},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,26038,26039],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[26,26041,26042],{"start":263},[29,26043,26044],{},"方法二：actor-critic算法",[19,26046,26047],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,26049,26050],{},"两个网络的构建：",[19,26052,26053],{},[3269,26054],{"alt":160,"src":26055},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,26057,26058],{},"actor网路：",[19,26060,26061],{},[3269,26062],{"alt":160,"src":26063},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,26065,26066],{},"critic网络",[19,26068,26069],{},[3269,26070],{"alt":160,"src":26071},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[26,26073,26074],{"start":274},[29,26075,26076],{},"网络的训练",[19,26078,26079],{},"网络描述",[19,26081,26082],{},[3269,26083],{"alt":160,"src":26084},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,26086,26087],{},[3269,26088],{"alt":160,"src":26089},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,26091,26092],{},"TD算法更新梯度：",[19,26094,26095],{},[3269,26096],{"alt":160,"src":26097},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,26099,26100],{},"策略网络更新梯度：",[19,26102,26103],{},[3269,26104],{"alt":160,"src":26105},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,26107,26108],{},"训练整个流程的具体描述：",[19,26110,26111,26114,26115],{},[3269,26112],{"alt":160,"src":26113},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[3269,26116],{"alt":160,"src":26117},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":160,"searchDepth":263,"depth":263,"links":26119},[26120,26121],{"id":25896,"depth":263,"text":25897},{"id":26006,"depth":263,"text":26007},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":25888,"description":160},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26128,"title":26129,"body":26130,"description":26137,"extension":1880,"meta":26187,"navigation":721,"path":26188,"seo":26189,"stem":26190,"__hash__":26191},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26131,"toc":26183},[26132,26135,26138,26142,26145,26150,26154,26157,26162,26165,26170,26175,26178],[10,26133,26129],{"id":26134},"_5alphago算法",[19,26136,26137],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26139,26141],{"id":26140},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,26143,26144],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,26146,26147],{},[3269,26148],{"alt":160,"src":26149},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26151,26153],{"id":26152},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,26155,26156],{},"采用强化学习的方式训练策略网络",[19,26158,26159],{},[3269,26160],{"alt":160,"src":26161},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,26163,26164],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,26166,26167],{},[3269,26168],{"alt":160,"src":26169},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,26171,26172],{},[3269,26173],{"alt":160,"src":26174},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,26176,26177],{},"强化学习训练策略网络的总结：",[19,26179,26180],{},[3269,26181],{"alt":160,"src":26182},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":160,"searchDepth":263,"depth":263,"links":26184},[26185,26186],{"id":26140,"depth":263,"text":26141},{"id":26152,"depth":263,"text":26153},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26129,"description":26137},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26193,"title":26194,"body":26195,"description":26202,"extension":1880,"meta":26205,"navigation":721,"path":26206,"seo":26207,"stem":26208,"__hash__":26209},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26196,"toc":26203},[26197,26200],[10,26198,26194],{"id":26199},"_6价值网络",[19,26201,26202],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":160,"searchDepth":263,"depth":263,"links":26204},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26194,"description":26202},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26211,"title":26212,"body":26213,"description":26217,"extension":1880,"meta":26218,"navigation":721,"path":26219,"seo":26220,"stem":26221,"__hash__":26222},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26214,"toc":26215},[],{"title":160,"searchDepth":263,"depth":263,"links":26216},[],"记录自己的强化学习笔记。",{"category":25137},"\u002Fwiki\u002F2025-12-04",{"title":26212,"description":26217},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26224,"title":26225,"body":26226,"description":25135,"extension":1880,"meta":26265,"navigation":721,"path":26266,"seo":26267,"stem":26268,"__hash__":26269},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26227,"toc":26263},[26228,26231,26234,26240,26243,26249,26252,26257,26260],[10,26229,26225],{"id":26230},"_1-项目概览与官方资源",[19,26232,26233],{},"官方文档：",[19,26235,26236],{},[2178,26237,26238],{"href":26238,"rel":26239},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[25619],[19,26241,26242],{},"官方代码仓库：",[19,26244,26245],{},[2178,26246,26247],{"href":26247,"rel":26248},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[25619],[19,26250,26251],{},"复现大体流程：",[19,26253,26254],{},[3269,26255],{"alt":160,"src":26256},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,26258,26259],{},"本教程的目标是打通这条链路：",[19,26261,26262],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":160,"searchDepth":263,"depth":263,"links":26264},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26225,"description":25135},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26271,"title":26272,"body":26273,"description":25135,"extension":1880,"meta":26388,"navigation":721,"path":26389,"seo":26390,"stem":26391,"__hash__":26392},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26274,"toc":26383},[26275,26278,26282,26285,26292,26296,26299,26308,26318,26322,26351,26354,26380],[10,26276,26272],{"id":26277},"_2-环境准备与设备连接",[14,26279,26281],{"id":26280},"_21-系统与环境","2.1 系统与环境",[19,26283,26284],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,26286,26287,26288,26291],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[70,26289,26290],{},"lerobot"," 依赖。",[14,26293,26295],{"id":26294},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,26297,26298],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[154,26300,26302],{"className":172,"code":26301,"language":174,"meta":160,"style":160},"lerobot-find-out\n",[70,26303,26304],{"__ignoreMap":160},[178,26305,26306],{"class":180,"line":181},[178,26307,26301],{"class":184},[19,26309,26310,26311,1258,26314,26317],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[70,26312,26313],{},"\u002Fdev\u002FttyACM0",[70,26315,26316],{},"\u002Fdev\u002FttyACM1","）。",[14,26319,26321],{"id":26320},"_23-串口授权","2.3 串口授权",[154,26323,26325],{"className":172,"code":26324,"language":174,"meta":160,"style":160},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[70,26326,26327,26340],{"__ignoreMap":160},[178,26328,26329,26331,26334,26337],{"class":180,"line":181},[178,26330,185],{"class":184},[178,26332,26333],{"class":188}," chmod",[178,26335,26336],{"class":195}," 666",[178,26338,26339],{"class":188}," \u002Fdev\u002FttyACM0\n",[178,26341,26342,26344,26346,26348],{"class":180,"line":263},[178,26343,185],{"class":184},[178,26345,26333],{"class":188},[178,26347,26336],{"class":195},[178,26349,26350],{"class":188}," \u002Fdev\u002FttyACM1\n",[19,26352,26353],{},"说明：",[2946,26355,26356,26361,26367,26377],{},[29,26357,26358,26360],{},[70,26359,185],{},"：以 root 权限执行命令。",[29,26362,26363,26366],{},[70,26364,26365],{},"chmod","：修改设备节点权限。",[29,26368,26369,26372,26373,26376],{},[70,26370,26371],{},"666","：",[70,26374,26375],{},"rw-rw-rw-","，所有用户可读写。",[29,26378,26379],{},"串口号必须替换为你机器上的真实端口。",[1853,26381,26382],{},"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":160,"searchDepth":263,"depth":263,"links":26384},[26385,26386,26387],{"id":26280,"depth":263,"text":26281},{"id":26294,"depth":263,"text":26295},{"id":26320,"depth":263,"text":26321},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26272,"description":25135},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26394,"title":26395,"body":26396,"description":25135,"extension":1880,"meta":26557,"navigation":721,"path":26558,"seo":26559,"stem":26560,"__hash__":26561},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26397,"toc":26553},[26398,26402,26406,26412,26415,26472,26475,26479,26482,26550],[10,26399,26401],{"id":26400},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,26403,26405],{"id":26404},"_31-配置电机-id","3.1 配置电机 ID",[19,26407,26408,26409,26411],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[70,26410,1665],{},"，需要改成机械臂链路里不冲突的编号。",[19,26413,26414],{},"方式一：用 LeRobot 命令逐步写入。",[154,26416,26418],{"className":172,"code":26417,"language":174,"meta":160,"style":160},"# 主臂舵机配置 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",[70,26419,26420,26425,26433,26440,26445,26449,26454,26460,26467],{"__ignoreMap":160},[178,26421,26422],{"class":180,"line":181},[178,26423,26424],{"class":2008},"# 主臂舵机配置 ID\n",[178,26426,26427,26430],{"class":180,"line":263},[178,26428,26429],{"class":184},"lerobot-setup-motors",[178,26431,26432],{"class":195}," \\\n",[178,26434,26435,26438],{"class":180,"line":274},[178,26436,26437],{"class":195},"  --teleop.type=so101_leader",[178,26439,26432],{"class":195},[178,26441,26442],{"class":180,"line":354},[178,26443,26444],{"class":195},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[178,26446,26447],{"class":180,"line":364},[178,26448,722],{"emptyLinePlaceholder":721},[178,26450,26451],{"class":180,"line":740},[178,26452,26453],{"class":2008},"# 从臂舵机配置 ID\n",[178,26455,26456,26458],{"class":180,"line":746},[178,26457,26429],{"class":184},[178,26459,26432],{"class":195},[178,26461,26462,26465],{"class":180,"line":752},[178,26463,26464],{"class":195},"  --robot.type=so101_follower",[178,26466,26432],{"class":195},[178,26468,26469],{"class":180,"line":757},[178,26470,26471],{"class":195},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,26473,26474],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26476,26478],{"id":26477},"_32-机械臂校准","3.2 机械臂校准",[19,26480,26481],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[154,26483,26485],{"className":172,"code":26484,"language":174,"meta":160,"style":160},"# 主臂校准\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",[70,26486,26487,26492,26499,26505,26512,26517,26521,26526,26532,26538,26545],{"__ignoreMap":160},[178,26488,26489],{"class":180,"line":181},[178,26490,26491],{"class":2008},"# 主臂校准\n",[178,26493,26494,26497],{"class":180,"line":263},[178,26495,26496],{"class":184},"lerobot-calibrate",[178,26498,26432],{"class":195},[178,26500,26501,26503],{"class":180,"line":274},[178,26502,26437],{"class":195},[178,26504,26432],{"class":195},[178,26506,26507,26510],{"class":180,"line":354},[178,26508,26509],{"class":195},"  --teleop.port=\u002Fdev\u002FttyACM0",[178,26511,26432],{"class":195},[178,26513,26514],{"class":180,"line":364},[178,26515,26516],{"class":195},"  --teleop.id=my_awesome_leader_arm\n",[178,26518,26519],{"class":180,"line":740},[178,26520,722],{"emptyLinePlaceholder":721},[178,26522,26523],{"class":180,"line":746},[178,26524,26525],{"class":2008},"# 从臂校准\n",[178,26527,26528,26530],{"class":180,"line":752},[178,26529,26496],{"class":184},[178,26531,26432],{"class":195},[178,26533,26534,26536],{"class":180,"line":757},[178,26535,26464],{"class":195},[178,26537,26432],{"class":195},[178,26539,26540,26543],{"class":180,"line":763},[178,26541,26542],{"class":195},"  --robot.port=\u002Fdev\u002FttyACM1",[178,26544,26432],{"class":195},[178,26546,26547],{"class":180,"line":769},[178,26548,26549],{"class":195},"  --robot.id=my_awesome_follower_arm\n",[1853,26551,26552],{},"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":160,"searchDepth":263,"depth":263,"links":26554},[26555,26556],{"id":26404,"depth":263,"text":26405},{"id":26477,"depth":263,"text":26478},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26395,"description":25135},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26563,"title":26564,"body":26565,"description":25135,"extension":1880,"meta":26755,"navigation":721,"path":26756,"seo":26757,"stem":26758,"__hash__":26759},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26566,"toc":26751},[26567,26570,26574,26621,26625,26638,26701,26704,26748],[10,26568,26564],{"id":26569},"_4-遥操与相机接入",[14,26571,26573],{"id":26572},"_41-不带相机遥操","4.1 不带相机遥操",[154,26575,26577],{"className":172,"code":26576,"language":174,"meta":160,"style":160},"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",[70,26578,26579,26586,26592,26598,26605,26611,26617],{"__ignoreMap":160},[178,26580,26581,26584],{"class":180,"line":181},[178,26582,26583],{"class":184},"lerobot-teleoperate",[178,26585,26432],{"class":195},[178,26587,26588,26590],{"class":180,"line":263},[178,26589,26464],{"class":195},[178,26591,26432],{"class":195},[178,26593,26594,26596],{"class":180,"line":274},[178,26595,26542],{"class":195},[178,26597,26432],{"class":195},[178,26599,26600,26603],{"class":180,"line":354},[178,26601,26602],{"class":195},"  --robot.id=my_awesome_follower_arm",[178,26604,26432],{"class":195},[178,26606,26607,26609],{"class":180,"line":364},[178,26608,26437],{"class":195},[178,26610,26432],{"class":195},[178,26612,26613,26615],{"class":180,"line":740},[178,26614,26509],{"class":195},[178,26616,26432],{"class":195},[178,26618,26619],{"class":180,"line":746},[178,26620,26516],{"class":195},[14,26622,26624],{"id":26623},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[154,26626,26628],{"className":172,"code":26627,"language":174,"meta":160,"style":160},"lerobot-find-cameras opencv\n",[70,26629,26630],{"__ignoreMap":160},[178,26631,26632,26635],{"class":180,"line":181},[178,26633,26634],{"class":184},"lerobot-find-cameras",[178,26636,26637],{"class":188}," opencv\n",[154,26639,26641],{"className":172,"code":26640,"language":174,"meta":160,"style":160},"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",[70,26642,26643,26649,26655,26661,26667,26677,26683,26689,26696],{"__ignoreMap":160},[178,26644,26645,26647],{"class":180,"line":181},[178,26646,26583],{"class":184},[178,26648,26432],{"class":195},[178,26650,26651,26653],{"class":180,"line":263},[178,26652,26464],{"class":195},[178,26654,26432],{"class":195},[178,26656,26657,26659],{"class":180,"line":274},[178,26658,26542],{"class":195},[178,26660,26432],{"class":195},[178,26662,26663,26665],{"class":180,"line":354},[178,26664,26602],{"class":195},[178,26666,26432],{"class":195},[178,26668,26669,26672,26675],{"class":180,"line":364},[178,26670,26671],{"class":195},"  --robot.cameras=",[178,26673,26674],{"class":188},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[178,26676,26432],{"class":195},[178,26678,26679,26681],{"class":180,"line":740},[178,26680,26437],{"class":195},[178,26682,26432],{"class":195},[178,26684,26685,26687],{"class":180,"line":746},[178,26686,26509],{"class":195},[178,26688,26432],{"class":195},[178,26690,26691,26694],{"class":180,"line":752},[178,26692,26693],{"class":195},"  --teleop.id=my_awesome_leader_arm",[178,26695,26432],{"class":195},[178,26697,26698],{"class":180,"line":757},[178,26699,26700],{"class":195},"  --display_data=true\n",[19,26702,26703],{},"相机参数说明：",[2946,26705,26706,26712,26718,26727,26736,26742],{},[29,26707,26708,26711],{},[70,26709,26710],{},"front","：相机名称。",[29,26713,26714,26717],{},[70,26715,26716],{},"type: opencv","：相机驱动类型。",[29,26719,26720,26723,26724,26317],{},[70,26721,26722],{},"index_or_path","：设备编号或设备路径（如 ",[70,26725,26726],{},"\u002Fdev\u002Fvideo4",[29,26728,26729,123,26732,26735],{},[70,26730,26731],{},"width",[70,26733,26734],{},"height","：图像分辨率。",[29,26737,26738,26741],{},[70,26739,26740],{},"fps","：采样帧率。",[29,26743,26744,26747],{},[70,26745,26746],{},"--display_data=true","：启用实时可视化。",[1853,26749,26750],{},"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":160,"searchDepth":263,"depth":263,"links":26752},[26753,26754],{"id":26572,"depth":263,"text":26573},{"id":26623,"depth":263,"text":26624},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26564,"description":25135},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26761,"title":26762,"body":26763,"description":25135,"extension":1880,"meta":26934,"navigation":721,"path":26935,"seo":26936,"stem":26937,"__hash__":26938},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26764,"toc":26929},[26765,26769,26773,26778,26783,26786,26828,26834,26838,26886,26891,26895,26898,26906,26911,26916,26921,26926],[10,26766,26768],{"id":26767},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,26770,26772],{"id":26771},"_51-生成访问令牌","5.1 生成访问令牌",[19,26774,26775],{},[3269,26776],{"alt":160,"src":26777},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,26779,26780],{},[3269,26781],{"alt":160,"src":26782},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,26784,26785],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[154,26787,26789],{"className":172,"code":26788,"language":174,"meta":160,"style":160},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[70,26790,26791,26804],{"__ignoreMap":160},[178,26792,26793,26796,26799,26801],{"class":180,"line":181},[178,26794,26795],{"class":699},"export",[178,26797,26798],{"class":319}," HF_TOKEN",[178,26800,330],{"class":699},[178,26802,26803],{"class":188},"\"your_huggingface_token\"\n",[178,26805,26806,26809,26812,26815,26818,26820,26823,26825],{"class":180,"line":263},[178,26807,26808],{"class":184},"hf",[178,26810,26811],{"class":188}," auth",[178,26813,26814],{"class":188}," login",[178,26816,26817],{"class":195}," --token",[178,26819,11485],{"class":188},[178,26821,26822],{"class":319},"$HF_TOKEN",[178,26824,2191],{"class":188},[178,26826,26827],{"class":195}," --add-to-git-credential\n",[19,26829,26830,26833],{},[70,26831,26832],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,26835,26837],{"id":26836},"_52-验证登录","5.2 验证登录",[154,26839,26841],{"className":172,"code":26840,"language":174,"meta":160,"style":160},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[70,26842,26843,26873],{"__ignoreMap":160},[178,26844,26845,26848,26850,26853,26855,26857,26860,26863,26866,26868,26871],{"class":180,"line":181},[178,26846,26847],{"class":319},"HF_USER",[178,26849,330],{"class":699},[178,26851,26852],{"class":319},"$(",[178,26854,26808],{"class":184},[178,26856,26811],{"class":188},[178,26858,26859],{"class":188}," whoami",[178,26861,26862],{"class":699}," |",[178,26864,26865],{"class":184}," head",[178,26867,248],{"class":195},[178,26869,26870],{"class":195}," 1",[178,26872,863],{"class":319},[178,26874,26875,26878,26880,26883],{"class":180,"line":263},[178,26876,26877],{"class":195},"echo",[178,26879,11485],{"class":188},[178,26881,26882],{"class":319},"$HF_USER",[178,26884,26885],{"class":188},"\"\n",[19,26887,26888],{},[3269,26889],{"alt":160,"src":26890},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,26892,26894],{"id":26893},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,26896,26897],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[2946,26899,26900,26903],{},[29,26901,26902],{},"Dataset Repo（用于上传演示数据）",[29,26904,26905],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,26907,26908],{},[3269,26909],{"alt":160,"src":26910},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,26912,26913],{},[3269,26914],{"alt":160,"src":26915},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,26917,26918],{},[3269,26919],{"alt":160,"src":26920},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,26922,26923],{},[3269,26924],{"alt":160,"src":26925},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[1853,26927,26928],{},"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":160,"searchDepth":263,"depth":263,"links":26930},[26931,26932,26933],{"id":26771,"depth":263,"text":26772},{"id":26836,"depth":263,"text":26837},{"id":26893,"depth":263,"text":26894},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26762,"description":25135},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":26940,"title":26941,"body":26942,"description":25135,"extension":1880,"meta":27139,"navigation":721,"path":27140,"seo":27141,"stem":27142,"__hash__":27143},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":26943,"toc":27134},[26944,26948,26952,27048,27056,27061,27065,27081,27084,27088,27131],[10,26945,26947],{"id":26946},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,26949,26951],{"id":26950},"_61-录制示教数据","6.1 录制示教数据",[154,26953,26955],{"className":172,"code":26954,"language":174,"meta":160,"style":160},"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",[70,26956,26957,26964,26970,26976,26982,26991,26997,27003,27009,27016,27026,27033,27043],{"__ignoreMap":160},[178,26958,26959,26962],{"class":180,"line":181},[178,26960,26961],{"class":184},"lerobot-record",[178,26963,26432],{"class":195},[178,26965,26966,26968],{"class":180,"line":263},[178,26967,26464],{"class":195},[178,26969,26432],{"class":195},[178,26971,26972,26974],{"class":180,"line":274},[178,26973,26542],{"class":195},[178,26975,26432],{"class":195},[178,26977,26978,26980],{"class":180,"line":354},[178,26979,26602],{"class":195},[178,26981,26432],{"class":195},[178,26983,26984,26986,26989],{"class":180,"line":364},[178,26985,26671],{"class":195},[178,26987,26988],{"class":188},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[178,26990,26432],{"class":195},[178,26992,26993,26995],{"class":180,"line":740},[178,26994,26437],{"class":195},[178,26996,26432],{"class":195},[178,26998,26999,27001],{"class":180,"line":746},[178,27000,26509],{"class":195},[178,27002,26432],{"class":195},[178,27004,27005,27007],{"class":180,"line":752},[178,27006,26693],{"class":195},[178,27008,26432],{"class":195},[178,27010,27011,27014],{"class":180,"line":757},[178,27012,27013],{"class":195},"  --display_data=true",[178,27015,26432],{"class":195},[178,27017,27018,27021,27024],{"class":180,"line":763},[178,27019,27020],{"class":195},"  --dataset.repo_id=",[178,27022,27023],{"class":188},"\"Embodied-AI-6\u002Fso101_test\"",[178,27025,26432],{"class":195},[178,27027,27028,27031],{"class":180,"line":769},[178,27029,27030],{"class":195},"  --dataset.num_episodes=10",[178,27032,26432],{"class":195},[178,27034,27035,27038,27041],{"class":180,"line":774},[178,27036,27037],{"class":195},"  --dataset.single_task=",[178,27039,27040],{"class":188},"\"Grab the green cube\"",[178,27042,26432],{"class":195},[178,27044,27045],{"class":180,"line":780},[178,27046,27047],{"class":195},"  --resume=true\n",[2946,27049,27050],{},[29,27051,27052,27055],{},[70,27053,27054],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,27057,27058],{},[3269,27059],{"alt":160,"src":27060},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,27062,27064],{"id":27063},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[154,27066,27068],{"className":172,"code":27067,"language":174,"meta":160,"style":160},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[70,27069,27070],{"__ignoreMap":160},[178,27071,27072,27075,27078],{"class":180,"line":181},[178,27073,27074],{"class":184},"rm",[178,27076,27077],{"class":195}," -rf",[178,27079,27080],{"class":188}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,27082,27083],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,27085,27087],{"id":27086},"_63-回放指定-episode","6.3 回放指定 episode",[154,27089,27091],{"className":172,"code":27090,"language":174,"meta":160,"style":160},"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",[70,27092,27093,27100,27106,27112,27118,27126],{"__ignoreMap":160},[178,27094,27095,27098],{"class":180,"line":181},[178,27096,27097],{"class":184},"lerobot-replay",[178,27099,26432],{"class":195},[178,27101,27102,27104],{"class":180,"line":263},[178,27103,26464],{"class":195},[178,27105,26432],{"class":195},[178,27107,27108,27110],{"class":180,"line":274},[178,27109,26542],{"class":195},[178,27111,26432],{"class":195},[178,27113,27114,27116],{"class":180,"line":354},[178,27115,26602],{"class":195},[178,27117,26432],{"class":195},[178,27119,27120,27122,27124],{"class":180,"line":364},[178,27121,27020],{"class":195},[178,27123,27023],{"class":188},[178,27125,26432],{"class":195},[178,27127,27128],{"class":180,"line":740},[178,27129,27130],{"class":195},"  --dataset.episode=0\n",[1853,27132,27133],{},"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":160,"searchDepth":263,"depth":263,"links":27135},[27136,27137,27138],{"id":26950,"depth":263,"text":26951},{"id":27063,"depth":263,"text":27064},{"id":27086,"depth":263,"text":27087},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":26941,"description":25135},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27145,"title":27146,"body":27147,"description":25135,"extension":1880,"meta":27275,"navigation":721,"path":27276,"seo":27277,"stem":27278,"__hash__":27279},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27148,"toc":27273},[27149,27153,27216,27219,27266,27271],[10,27150,27152],{"id":27151},"_7-act-模型训练","7. ACT 模型训练",[154,27154,27156],{"className":172,"code":27155,"language":174,"meta":160,"style":160},"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",[70,27157,27158,27165,27173,27180,27187,27194,27201,27208],{"__ignoreMap":160},[178,27159,27160,27163],{"class":180,"line":181},[178,27161,27162],{"class":184},"lerobot-train",[178,27164,26432],{"class":195},[178,27166,27167,27169,27171],{"class":180,"line":263},[178,27168,27020],{"class":195},[178,27170,27023],{"class":188},[178,27172,26432],{"class":195},[178,27174,27175,27178],{"class":180,"line":274},[178,27176,27177],{"class":195},"  --policy.type=act",[178,27179,26432],{"class":195},[178,27181,27182,27185],{"class":180,"line":354},[178,27183,27184],{"class":195},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[178,27186,26432],{"class":195},[178,27188,27189,27192],{"class":180,"line":364},[178,27190,27191],{"class":195},"  --job_name=act_so101_test",[178,27193,26432],{"class":195},[178,27195,27196,27199],{"class":180,"line":740},[178,27197,27198],{"class":195},"  --policy.device=cuda",[178,27200,26432],{"class":195},[178,27202,27203,27206],{"class":180,"line":746},[178,27204,27205],{"class":195},"  --wandb.enable=false",[178,27207,26432],{"class":195},[178,27209,27210,27213],{"class":180,"line":752},[178,27211,27212],{"class":195},"  --policy.repo_id=",[178,27214,27215],{"class":188},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,27217,27218],{},"参数说明：",[2946,27220,27221,27227,27233,27239,27245,27254,27260],{},[29,27222,27223,27226],{},[70,27224,27225],{},"--dataset.repo_id","：训练数据集仓库。",[29,27228,27229,27232],{},[70,27230,27231],{},"--policy.type=act","：策略模型类型为 ACT。",[29,27234,27235,27238],{},[70,27236,27237],{},"--output_dir","：本地训练输出目录。",[29,27240,27241,27244],{},[70,27242,27243],{},"--job_name","：训练任务名称。",[29,27246,27247,27250,27251,26317],{},[70,27248,27249],{},"--policy.device","：训练设备（如 ",[70,27252,27253],{},"cuda",[29,27255,27256,27259],{},[70,27257,27258],{},"--wandb.enable","：是否启用 WandB 可视化。",[29,27261,27262,27265],{},[70,27263,27264],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,27267,27268],{},[3269,27269],{"alt":160,"src":27270},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[1853,27272,27133],{},{"title":160,"searchDepth":263,"depth":263,"links":27274},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27146,"description":25135},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27281,"title":27282,"body":27283,"description":25135,"extension":1880,"meta":27370,"navigation":721,"path":27371,"seo":27372,"stem":27373,"__hash__":27374},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27284,"toc":27368},[27285,27288,27291,27358,27366],[10,27286,27282],{"id":27287},"_8-策略部署与自动采集",[19,27289,27290],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[154,27292,27294],{"className":172,"code":27293,"language":174,"meta":160,"style":160},"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",[70,27295,27296,27302,27308,27314,27322,27328,27335,27343,27351],{"__ignoreMap":160},[178,27297,27298,27300],{"class":180,"line":181},[178,27299,26961],{"class":184},[178,27301,26432],{"class":195},[178,27303,27304,27306],{"class":180,"line":263},[178,27305,26464],{"class":195},[178,27307,26432],{"class":195},[178,27309,27310,27312],{"class":180,"line":274},[178,27311,26542],{"class":195},[178,27313,26432],{"class":195},[178,27315,27316,27318,27320],{"class":180,"line":354},[178,27317,26671],{"class":195},[178,27319,26988],{"class":188},[178,27321,26432],{"class":195},[178,27323,27324,27326],{"class":180,"line":364},[178,27325,26602],{"class":195},[178,27327,26432],{"class":195},[178,27329,27330,27333],{"class":180,"line":740},[178,27331,27332],{"class":195},"  --display_data=false",[178,27334,26432],{"class":195},[178,27336,27337,27339,27341],{"class":180,"line":746},[178,27338,27020],{"class":195},[178,27340,27023],{"class":188},[178,27342,26432],{"class":195},[178,27344,27345,27347,27349],{"class":180,"line":752},[178,27346,27037],{"class":195},[178,27348,27040],{"class":188},[178,27350,26432],{"class":195},[178,27352,27353,27356],{"class":180,"line":757},[178,27354,27355],{"class":195},"  --policy.path=",[178,27357,27215],{"class":188},[2946,27359,27360],{},[29,27361,27362,27365],{},[70,27363,27364],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[1853,27367,27133],{},{"title":160,"searchDepth":263,"depth":263,"links":27369},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27282,"description":25135},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27376,"title":27377,"body":27378,"description":25135,"extension":1880,"meta":27407,"navigation":721,"path":27408,"seo":27409,"stem":27410,"__hash__":27411},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27379,"toc":27405},[27380,27384,27387,27393,27396,27402],[10,27381,27383],{"id":27382},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,27385,27386],{},"项目地址：",[19,27388,27389],{},[2178,27390,27391],{"href":27391,"rel":27392},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[25619],[19,27394,27395],{},"参考教程：",[19,27397,27398],{},[2178,27399,27400],{"href":27400,"rel":27401},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[25619],[19,27403,27404],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":160,"searchDepth":263,"depth":263,"links":27406},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27377,"description":25135},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27413,"title":27414,"body":27415,"description":27419,"extension":1880,"meta":27420,"navigation":721,"path":27421,"seo":27422,"stem":27423,"__hash__":27424},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27416,"toc":27417},[],{"title":160,"searchDepth":263,"depth":263,"links":27418},[],"act复现",{"category":25137},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27414,"description":27419},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27426,"title":27427,"body":27428,"description":160,"extension":1880,"meta":27730,"navigation":721,"path":27731,"seo":27732,"stem":27733,"__hash__":27734},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27429,"toc":27722},[27430,27433,27437,27447,27454,27461,27464,27471,27474,27477,27481,27493,27497,27543,27546,27549,27552,27555,27558,27562,27600,27606,27610,27664,27669,27672,27675,27680,27683,27688,27691,27694,27698,27701,27704,27708],[10,27431,27427],{"id":27432},"_1简介",[387,27434,27436],{"id":27435},"_11什么是-docker","1.1什么是 Docker？",[19,27438,27439,27440,27443,27444],{},"Docker 是一个开源的 ",[2093,27441,27442],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[2093,27445,27446],{},"一次构建，到处运行。",[19,27448,27449,27450,27453],{},"“ ",[2093,27451,27452],{},"一次构建，到处运行"," ”也就是说：",[26,27455,27456],{},[29,27457,27458],{},[2093,27459,27460],{},"之前：",[19,27462,27463],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[26,27465,27466],{},[29,27467,27468],{},[2093,27469,27470],{},"使用docker后：",[19,27472,27473],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,27475,27476],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[387,27478,27480],{"id":27479},"_12它是怎么工作的","1.2.它是怎么工作的？",[2946,27482,27483,27486],{},[29,27484,27485],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[29,27487,27488,27489,27492],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[2093,27490,27491],{},"无论在哪运行都一样稳定"," 。",[387,27494,27496],{"id":27495},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[45,27498,27499,27509],{},[48,27500,27501],{},[51,27502,27503,27506],{},[54,27504,27505],{"align":56},"概念",[54,27507,27508],{"align":56},"解释",[62,27510,27511,27519,27527,27535],{},[51,27512,27513,27516],{},[67,27514,27515],{"align":56},"镜像",[67,27517,27518],{"align":56},"Image，运行容器的模板，像是一个应用快照",[51,27520,27521,27524],{},[67,27522,27523],{"align":56},"容器",[67,27525,27526],{"align":56},"Container，运行中的镜像实例，有自己的文件系统、网络等",[51,27528,27529,27532],{},[67,27530,27531],{"align":56},"Dockerfile",[67,27533,27534],{"align":56},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[51,27536,27537,27540],{},[67,27538,27539],{"align":56},"仓库",[67,27541,27542],{"align":56},"Registry，存放镜像的地方，比如 Docker Hub",[19,27544,27545],{},"抽象化理解:",[19,27547,27548],{},"Docker镜像≈C++类",[19,27550,27551],{},"Docker容器≈C++类实例(即对象)",[19,27553,27554],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,27556,27557],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[387,27559,27561],{"id":27560},"_14类比理解","1.4.类比理解",[45,27563,27564,27574],{},[48,27565,27566],{},[51,27567,27568,27571],{},[54,27569,27570],{"align":56},"传统部署",[54,27572,27573],{"align":56},"Docker部署",[62,27575,27576,27584,27592],{},[51,27577,27578,27581],{},[67,27579,27580],{"align":56},"手动安装依赖、调试版本不一致问题",[67,27582,27583],{"align":56},"一次打包环境和代码",[51,27585,27586,27589],{},[67,27587,27588],{"align":56},"程序“裸奔”跑在系统上",[67,27590,27591],{"align":56},"程序“穿着容器”隔离运行",[51,27593,27594,27597],{},[67,27595,27596],{"align":56},"容易“在我电脑上能跑”",[67,27598,27599],{"align":56},"保证“无论在哪都能跑”",[19,27601,27602,27603],{},"就像快递包裹： ",[2093,27604,27605],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[387,27607,27609],{"id":27608},"_15docker-的核心优势","1.5.Docker 的核心优势",[45,27611,27612,27622],{},[48,27613,27614],{},[51,27615,27616,27619],{},[54,27617,27618],{"align":56},"优势",[54,27620,27621],{"align":56},"说明",[62,27623,27624,27632,27640,27648,27656],{},[51,27625,27626,27629],{},[67,27627,27628],{"align":56},"轻量级",[67,27630,27631],{"align":56},"基于系统内核共享，启动速度快，占资源少",[51,27633,27634,27637],{},[67,27635,27636],{"align":56},"跨平台",[67,27638,27639],{"align":56},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[51,27641,27642,27645],{},[67,27643,27644],{"align":56},"易于迁移部署",[67,27646,27647],{"align":56},"应用和环境一起封装，不怕依赖不一致",[51,27649,27650,27653],{},[67,27651,27652],{"align":56},"易于版本控制",[67,27654,27655],{"align":56},"镜像版本可控，支持回滚",[51,27657,27658,27661],{},[67,27659,27660],{"align":56},"生态丰富",[67,27662,27663],{"align":56},"Docker Hub 上有成千上万的现成镜像可用",[26,27665,27666],{},[29,27667,27668],{},"在Linux上可以几乎实现无性能损失。",[19,27670,27671],{},"docker里的发行版和本机共用Linux内核。",[19,27673,27674],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[26,27676,27677],{},[29,27678,27679],{},"可以快速部署在绝大多数Linux发行版",[19,27681,27682],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[26,27684,27685],{},[29,27686,27687],{},"配置环境简单",[19,27689,27690],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,27692,27693],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[26,27695,27696],{},[29,27697,27660],{},[19,27699,27700],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,27702,27703],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[387,27705,27707],{"id":27706},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[2946,27709,27710,27713,27716,27719],{},[29,27711,27712],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[29,27714,27715],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[29,27717,27718],{},"微服务架构：每个服务一个容器，灵活组合",[29,27720,27721],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":160,"searchDepth":263,"depth":263,"links":27723},[27724,27725,27726,27727,27728,27729],{"id":27435,"depth":274,"text":27436},{"id":27479,"depth":274,"text":27480},{"id":27495,"depth":274,"text":27496},{"id":27560,"depth":274,"text":27561},{"id":27608,"depth":274,"text":27609},{"id":27706,"depth":274,"text":27707},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27427,"description":160},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27736,"title":27737,"body":27738,"description":160,"extension":1880,"meta":28468,"navigation":721,"path":28469,"seo":28470,"stem":28471,"__hash__":28472},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27739,"toc":28463},[27740,27743,27747,27750,27753,27759,27765,27769,27778,27781,27837,27840,27891,27894,27977,27980,28017,28021,28032,28045,28052,28055,28134,28137,28186,28189,28212,28216,28223,28226,28242,28248,28251,28267,28273,28276,28292,28306,28312,28332,28338,28341,28353,28359,28362,28376,28382,28385,28405,28410,28413,28416,28420,28423,28426,28429,28436,28439,28442,28445,28450,28455,28460],[10,27741,27737],{"id":27742},"_2安装docker",[387,27744,27746],{"id":27745},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,27748,27749],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,27751,27752],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,27754,27755],{},[2178,27756,27757],{"href":27757,"rel":27758},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[25619],[19,27760,27761],{},[2178,27762,27763],{"href":27763,"rel":27764},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[25619],[23756,27766,27768],{"id":27767},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,27770,27771,27772,27777],{},"以下内容根据 ",[2178,27773,27776],{"href":27774,"rel":27775},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[25619],"官方文档"," 修改而来。",[19,27779,27780],{},"如果你过去安装过 docker，先删掉：",[154,27782,27784],{"className":172,"code":27783,"language":174,"meta":160,"style":160},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[70,27785,27786],{"__ignoreMap":160},[178,27787,27788,27790,27793,27795,27798,27801,27804,27807,27810,27813,27816,27819,27822,27825,27828,27831,27834],{"class":180,"line":181},[178,27789,1474],{"class":699},[178,27791,27792],{"class":319}," pkg ",[178,27794,994],{"class":699},[178,27796,27797],{"class":188}," docker.io",[178,27799,27800],{"class":188}," docker-doc",[178,27802,27803],{"class":188}," docker-compose",[178,27805,27806],{"class":188}," docker-compose-v2",[178,27808,27809],{"class":188}," podman-docker",[178,27811,27812],{"class":188}," containerd",[178,27814,27815],{"class":188}," runc",[178,27817,27818],{"class":319},"; ",[178,27820,27821],{"class":699},"do",[178,27823,27824],{"class":184}," sudo",[178,27826,27827],{"class":188}," apt-get",[178,27829,27830],{"class":188}," remove",[178,27832,27833],{"class":319}," $pkg; ",[178,27835,27836],{"class":699},"done\n",[19,27838,27839],{},"首先安装依赖和GPG：",[154,27841,27845],{"className":27842,"code":27843,"language":27844,"meta":160,"style":160},"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",[70,27846,27847,27852,27857,27862,27867,27872,27877,27881,27886],{"__ignoreMap":160},[178,27848,27849],{"class":180,"line":181},[178,27850,27851],{},"# Add Docker's official GPG key:\n",[178,27853,27854],{"class":180,"line":263},[178,27855,27856],{},"sudo apt-get update\n",[178,27858,27859],{"class":180,"line":274},[178,27860,27861],{},"sudo apt-get install ca-certificates curl\n",[178,27863,27864],{"class":180,"line":354},[178,27865,27866],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[178,27868,27869],{"class":180,"line":364},[178,27870,27871],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[178,27873,27874],{"class":180,"line":740},[178,27875,27876],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[178,27878,27879],{"class":180,"line":746},[178,27880,722],{"emptyLinePlaceholder":721},[178,27882,27883],{"class":180,"line":752},[178,27884,27885],{},"# 如果上面这行报错就弄下面这行\n",[178,27887,27888],{"class":180,"line":757},[178,27889,27890],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,27892,27893],{},"信任 Docker 的 GPG 公钥并添加仓库：",[154,27895,27897],{"className":172,"code":27896,"language":174,"meta":160,"style":160},"# 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",[70,27898,27899,27904,27910,27927,27960],{"__ignoreMap":160},[178,27900,27901],{"class":180,"line":181},[178,27902,27903],{"class":2008},"# Add the repository to Apt sources:\n",[178,27905,27906,27908],{"class":180,"line":263},[178,27907,26877],{"class":195},[178,27909,26432],{"class":195},[178,27911,27912,27915,27918,27921,27924],{"class":180,"line":274},[178,27913,27914],{"class":188},"  \"deb [arch=$(",[178,27916,27917],{"class":184},"dpkg",[178,27919,27920],{"class":195}," --print-architecture",[178,27922,27923],{"class":188},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[178,27925,27926],{"class":195},"\\\n",[178,27928,27929,27932,27934,27936,27939,27942,27944,27946,27949,27951,27953,27956,27958],{"class":180,"line":354},[178,27930,27931],{"class":188},"  \"",[178,27933,26852],{"class":319},[178,27935,2498],{"class":195},[178,27937,27938],{"class":188}," \u002Fetc\u002Fos-release",[178,27940,27941],{"class":319}," && ",[178,27943,26877],{"class":195},[178,27945,11485],{"class":188},[178,27947,27948],{"class":319},"$VERSION_CODENAME",[178,27950,2191],{"class":188},[178,27952,2369],{"class":319},[178,27954,27955],{"class":188},"\" stable\"",[178,27957,26862],{"class":699},[178,27959,26432],{"class":195},[178,27961,27962,27965,27968,27971,27974],{"class":180,"line":364},[178,27963,27964],{"class":184},"  sudo",[178,27966,27967],{"class":188}," tee",[178,27969,27970],{"class":188}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[178,27972,27973],{"class":699}," >",[178,27975,27976],{"class":188}," \u002Fdev\u002Fnull\n",[19,27978,27979],{},"最后安装",[154,27981,27983],{"className":172,"code":27982,"language":174,"meta":160,"style":160},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[70,27984,27985,27994],{"__ignoreMap":160},[178,27986,27987,27989,27991],{"class":180,"line":181},[178,27988,185],{"class":184},[178,27990,27827],{"class":188},[178,27992,27993],{"class":188}," update\n",[178,27995,27996,27998,28000,28002,28005,28008,28011,28014],{"class":180,"line":263},[178,27997,185],{"class":184},[178,27999,27827],{"class":188},[178,28001,192],{"class":188},[178,28003,28004],{"class":188}," docker-ce",[178,28006,28007],{"class":188}," docker-ce-cli",[178,28009,28010],{"class":188}," containerd.io",[178,28012,28013],{"class":188}," docker-buildx-plugin",[178,28015,28016],{"class":188}," docker-compose-plugin\n",[23756,28018,28020],{"id":28019},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,28022,28023,28024,28027,28028,28031],{},"查看自己自己包管理工具版本（dnf是 ",[2093,28025,28026],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[2093,28029,28030],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[154,28033,28035],{"className":172,"code":28034,"language":174,"meta":160,"style":160},"dnf --version\n",[70,28036,28037],{"__ignoreMap":160},[178,28038,28039,28042],{"class":180,"line":181},[178,28040,28041],{"class":184},"dnf",[178,28043,28044],{"class":195}," --version\n",[19,28046,27771,28047,28051],{},[2178,28048,27776],{"href":28049,"rel":28050},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[25619]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,28053,28054],{},"如果你之前安装过 docker，请先删掉",[154,28056,28058],{"className":172,"code":28057,"language":174,"meta":160,"style":160},"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",[70,28059,28060,28073,28080,28087,28094,28101,28108,28115,28122,28129],{"__ignoreMap":160},[178,28061,28062,28064,28066,28068,28071],{"class":180,"line":181},[178,28063,185],{"class":184},[178,28065,189],{"class":188},[178,28067,27830],{"class":188},[178,28069,28070],{"class":188}," docker",[178,28072,26432],{"class":195},[178,28074,28075,28078],{"class":180,"line":263},[178,28076,28077],{"class":188},"                  docker-client",[178,28079,26432],{"class":195},[178,28081,28082,28085],{"class":180,"line":274},[178,28083,28084],{"class":188},"                  docker-client-latest",[178,28086,26432],{"class":195},[178,28088,28089,28092],{"class":180,"line":354},[178,28090,28091],{"class":188},"                  docker-common",[178,28093,26432],{"class":195},[178,28095,28096,28099],{"class":180,"line":364},[178,28097,28098],{"class":188},"                  docker-latest",[178,28100,26432],{"class":195},[178,28102,28103,28106],{"class":180,"line":740},[178,28104,28105],{"class":188},"                  docker-latest-logrotate",[178,28107,26432],{"class":195},[178,28109,28110,28113],{"class":180,"line":746},[178,28111,28112],{"class":188},"                  docker-logrotate",[178,28114,26432],{"class":195},[178,28116,28117,28120],{"class":180,"line":752},[178,28118,28119],{"class":188},"                  docker-selinux",[178,28121,26432],{"class":195},[178,28123,28124,28127],{"class":180,"line":757},[178,28125,28126],{"class":188},"                  docker-engine-selinux",[178,28128,26432],{"class":195},[178,28130,28131],{"class":180,"line":763},[178,28132,28133],{"class":188},"                  docker-engine\n",[19,28135,28136],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[154,28138,28140],{"className":172,"code":28139,"language":174,"meta":160,"style":160},"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",[70,28141,28142,28155,28170],{"__ignoreMap":160},[178,28143,28144,28146,28148,28150,28152],{"class":180,"line":181},[178,28145,185],{"class":184},[178,28147,189],{"class":188},[178,28149,196],{"class":195},[178,28151,192],{"class":188},[178,28153,28154],{"class":188}," dnf-plugins-core\n",[178,28156,28157,28159,28161,28164,28167],{"class":180,"line":263},[178,28158,185],{"class":184},[178,28160,189],{"class":188},[178,28162,28163],{"class":188}," config-manager",[178,28165,28166],{"class":188}," addrepo",[178,28168,28169],{"class":195}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[178,28171,28172,28174,28177,28180,28183],{"class":180,"line":274},[178,28173,185],{"class":184},[178,28175,28176],{"class":188}," sed",[178,28178,28179],{"class":195}," -i",[178,28181,28182],{"class":188}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[178,28184,28185],{"class":188}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,28187,28188],{},"最后安装：",[154,28190,28192],{"className":172,"code":28191,"language":174,"meta":160,"style":160},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[70,28193,28194],{"__ignoreMap":160},[178,28195,28196,28198,28200,28202,28204,28206,28208,28210],{"class":180,"line":181},[178,28197,185],{"class":184},[178,28199,189],{"class":188},[178,28201,192],{"class":188},[178,28203,28004],{"class":188},[178,28205,28007],{"class":188},[178,28207,28010],{"class":188},[178,28209,28013],{"class":188},[178,28211,28016],{"class":188},[387,28213,28215],{"id":28214},"_22配置环境","2.2.配置环境",[23756,28217,28219,28222],{"id":28218},"_221检查-docker-服务状态",[2093,28220,28221],{},"2.2.1.检查 Docker 服务状态"," ：",[19,28224,28225],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[154,28227,28229],{"className":172,"code":28228,"language":174,"meta":160,"style":160},"systemctl status docker\n",[70,28230,28231],{"__ignoreMap":160},[178,28232,28233,28236,28239],{"class":180,"line":181},[178,28234,28235],{"class":184},"systemctl",[178,28237,28238],{"class":188}," status",[178,28240,28241],{"class":188}," docker\n",[23756,28243,28245,28222],{"id":28244},"_222启动-docker-服务",[2093,28246,28247],{},"2.2.2.启动 Docker 服务",[19,28249,28250],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[154,28252,28254],{"className":172,"code":28253,"language":174,"meta":160,"style":160},"sudo systemctl start docker\n",[70,28255,28256],{"__ignoreMap":160},[178,28257,28258,28260,28263,28265],{"class":180,"line":181},[178,28259,185],{"class":184},[178,28261,28262],{"class":188}," systemctl",[178,28264,5955],{"class":188},[178,28266,28241],{"class":188},[23756,28268,28270,28222],{"id":28269},"_223设置-docker-开机自启",[2093,28271,28272],{},"2.2.3.设置 Docker 开机自启",[19,28274,28275],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[154,28277,28279],{"className":172,"code":28278,"language":174,"meta":160,"style":160},"sudo systemctl enable docker\n",[70,28280,28281],{"__ignoreMap":160},[178,28282,28283,28285,28287,28290],{"class":180,"line":181},[178,28284,185],{"class":184},[178,28286,28262],{"class":188},[178,28288,28289],{"class":188}," enable",[178,28291,28241],{"class":188},[23756,28293,28295,15555,28298,15555,28303,28222],{"id":28294},"_224将用户添加到-docker-组",[2093,28296,28297],{},"2.2.4.将用户添加到",[2093,28299,28300],{},[70,28301,28302],{},"docker",[2093,28304,28305],{},"组",[19,28307,28308,28309,28311],{},"使用以下命令将当前用户添加到 ",[70,28310,28302],{}," 组：",[154,28313,28315],{"className":172,"code":28314,"language":174,"meta":160,"style":160},"sudo usermod -aG docker $USER\n",[70,28316,28317],{"__ignoreMap":160},[178,28318,28319,28321,28324,28327,28329],{"class":180,"line":181},[178,28320,185],{"class":184},[178,28322,28323],{"class":188}," usermod",[178,28325,28326],{"class":195}," -aG",[178,28328,28070],{"class":188},[178,28330,28331],{"class":319}," $USER\n",[23756,28333,28335,28222],{"id":28334},"_225退出并重新登录",[2093,28336,28337],{},"2.2.5.退出并重新登录",[19,28339,28340],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[154,28342,28344],{"className":172,"code":28343,"language":174,"meta":160,"style":160},"newgrp docker\n",[70,28345,28346],{"__ignoreMap":160},[178,28347,28348,28351],{"class":180,"line":181},[178,28349,28350],{"class":184},"newgrp",[178,28352,28241],{"class":188},[23756,28354,28356,28222],{"id":28355},"_226重新启动-docker-服务如果需要",[2093,28357,28358],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,28360,28361],{},"确保 Docker 服务正在运行，可以使用以下命令：",[154,28363,28364],{"className":172,"code":28253,"language":174,"meta":160,"style":160},[70,28365,28366],{"__ignoreMap":160},[178,28367,28368,28370,28372,28374],{"class":180,"line":181},[178,28369,185],{"class":184},[178,28371,28262],{"class":188},[178,28373,5955],{"class":188},[178,28375,28241],{"class":188},[23756,28377,28379,28222],{"id":28378},"_227重启电脑后检查-docker-服务状态",[2093,28380,28381],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,28383,28384],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[154,28386,28388],{"className":172,"code":28387,"language":174,"meta":160,"style":160},"sudo reboot\nsystemctl status docker\n",[70,28389,28390,28397],{"__ignoreMap":160},[178,28391,28392,28394],{"class":180,"line":181},[178,28393,185],{"class":184},[178,28395,28396],{"class":188}," reboot\n",[178,28398,28399,28401,28403],{"class":180,"line":263},[178,28400,28235],{"class":184},[178,28402,28238],{"class":188},[178,28404,28241],{"class":188},[19,28406,28407],{},[3269,28408],{"alt":160,"src":28409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,28411,28412],{},"第三行显示enabled说明开机自启动成功",[19,28414,28415],{},"按q退出",[387,28417,28419],{"id":28418},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,28421,28422],{},"优先使用linux来使用docker是比较好的",[19,28424,28425],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,28427,28428],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,28430,28431,28432],{},"官方下载安装:",[2178,28433,28434],{"href":28434,"rel":28435},"https:\u002F\u002Fwww.docker.com\u002F",[25619],[19,28437,28438],{},"Windows的Docker显卡直通与USB直通:",[19,28440,28441],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,28443,28444],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,28446,28447],{},[3269,28448],{"alt":160,"src":28449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,28451,28452],{},[3269,28453],{"alt":160,"src":28454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,28456,28457],{},[3269,28458],{"alt":160,"src":28459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[1853,28461,28462],{},"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":160,"searchDepth":263,"depth":263,"links":28464},[28465,28466,28467],{"id":27745,"depth":274,"text":27746},{"id":28214,"depth":274,"text":28215},{"id":28418,"depth":274,"text":28419},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27737,"description":160},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28474,"title":28475,"body":28476,"description":28483,"extension":1880,"meta":29176,"navigation":721,"path":29177,"seo":29178,"stem":29179,"__hash__":29180},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28477,"toc":29170},[28478,28481,28484,28488,28493,28498,28501,28529,28534,28543,28546,28551,28555,28562,28567,28573,28577,28580,28584,28589,28681,28686,28704,28709,28730,28735,28751,28755,28760,28789,28794,28840,28845,28889,28897,28914,28919,28935,28940,28954,28957,28960,28963,28966,28995,28998,29003,29007,29010,29013,29019,29022,29025,29028,29090,29097,29102,29105,29123,29127,29130,29147,29150,29153,29167],[10,28479,28475],{"id":28480},"_3docker直通",[19,28482,28483],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[387,28485,28487],{"id":28486},"_31usb直通","3.1.USB直通",[19,28489,28490],{},[3269,28491],{"alt":160,"src":28492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[26,28494,28495],{},[29,28496,28497],{},"方法一(不是很推荐新手)：",[19,28499,28500],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[154,28502,28504],{"className":172,"code":28503,"language":174,"meta":160,"style":160},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[70,28505,28506,28514,28519],{"__ignoreMap":160},[178,28507,28508,28511],{"class":180,"line":181},[178,28509,28510],{"class":184},"ls",[178,28512,28513],{"class":188}," \u002Fdev\n",[178,28515,28516],{"class":180,"line":263},[178,28517,28518],{"class":2008},"#例如\n",[178,28520,28521,28524,28526],{"class":180,"line":274},[178,28522,28523],{"class":319},"--device",[178,28525,330],{"class":699},[178,28527,28528],{"class":188},"\u002Fdev\u002Ftty_USB0\n",[26,28530,28531],{"start":263},[29,28532,28533],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[154,28535,28537],{"className":172,"code":28536,"language":174,"meta":160,"style":160},"--privileged\n",[70,28538,28539],{"__ignoreMap":160},[178,28540,28541],{"class":180,"line":181},[178,28542,28536],{"class":184},[19,28544,28545],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,28547,28548],{},[3269,28549],{"alt":160,"src":28550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[387,28552,28554],{"id":28553},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,28556,28557,28558,28561],{},"NVIDIA Container Toolkit使用户 ",[2093,28559,28560],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,28563,28564],{},[3269,28565],{"alt":160,"src":28566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,28568,28569],{},[2178,28570,28571],{"href":28571,"rel":28572},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[25619],[23756,28574,28576],{"id":28575},"_321安装","3.2.1.安装",[19,28578,28579],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24668,28581,28583],{"id":28582},"_3211ubuntu","3.2.1.1.Ubuntu",[26,28585,28586],{},[29,28587,28588],{},"配置存储库 并更新",[154,28590,28592],{"className":172,"code":28591,"language":174,"meta":160,"style":160},"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",[70,28593,28594,28623,28643,28655,28667,28673],{"__ignoreMap":160},[178,28595,28596,28599,28602,28605,28607,28609,28612,28615,28618,28621],{"class":180,"line":181},[178,28597,28598],{"class":184},"curl",[178,28600,28601],{"class":195}," -fsSL",[178,28603,28604],{"class":188}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[178,28606,26862],{"class":699},[178,28608,27824],{"class":184},[178,28610,28611],{"class":188}," gpg",[178,28613,28614],{"class":195}," --dearmor",[178,28616,28617],{"class":195}," -o",[178,28619,28620],{"class":188}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[178,28622,26432],{"class":195},[178,28624,28625,28628,28630,28633,28636,28639,28641],{"class":180,"line":263},[178,28626,28627],{"class":319},"  && ",[178,28629,28598],{"class":184},[178,28631,28632],{"class":195}," -s",[178,28634,28635],{"class":195}," -L",[178,28637,28638],{"class":188}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[178,28640,26862],{"class":699},[178,28642,26432],{"class":195},[178,28644,28645,28648,28651,28653],{"class":180,"line":274},[178,28646,28647],{"class":184},"    sed",[178,28649,28650],{"class":188}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[178,28652,26862],{"class":699},[178,28654,26432],{"class":195},[178,28656,28657,28660,28662,28665],{"class":180,"line":354},[178,28658,28659],{"class":184},"    sudo",[178,28661,27967],{"class":188},[178,28663,28664],{"class":188}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[178,28666,26432],{"class":195},[178,28668,28669,28671],{"class":180,"line":364},[178,28670,28627],{"class":319},[178,28672,27926],{"class":195},[178,28674,28675,28677,28679],{"class":180,"line":740},[178,28676,28659],{"class":184},[178,28678,27827],{"class":188},[178,28680,27993],{"class":188},[26,28682,28683],{"start":263},[29,28684,28685],{},"安装nvidia-docker2",[154,28687,28689],{"className":172,"code":28688,"language":174,"meta":160,"style":160},"sudo apt-get install -y nvidia-docker2\n",[70,28690,28691],{"__ignoreMap":160},[178,28692,28693,28695,28697,28699,28701],{"class":180,"line":181},[178,28694,185],{"class":184},[178,28696,27827],{"class":188},[178,28698,192],{"class":188},[178,28700,196],{"class":195},[178,28702,28703],{"class":188}," nvidia-docker2\n",[26,28705,28706],{"start":274},[29,28707,28708],{},"使用nvidia-ctk命令配置container runtime",[154,28710,28712],{"className":172,"code":28711,"language":174,"meta":160,"style":160},"sudo nvidia-ctk runtime configure --runtime=docker\n",[70,28713,28714],{"__ignoreMap":160},[178,28715,28716,28718,28721,28724,28727],{"class":180,"line":181},[178,28717,185],{"class":184},[178,28719,28720],{"class":188}," nvidia-ctk",[178,28722,28723],{"class":188}," runtime",[178,28725,28726],{"class":188}," configure",[178,28728,28729],{"class":195}," --runtime=docker\n",[26,28731,28732],{"start":354},[29,28733,28734],{},"重启docker服务:",[154,28736,28738],{"className":172,"code":28737,"language":174,"meta":160,"style":160},"sudo systemctl restart docker\n",[70,28739,28740],{"__ignoreMap":160},[178,28741,28742,28744,28746,28749],{"class":180,"line":181},[178,28743,185],{"class":184},[178,28745,28262],{"class":188},[178,28747,28748],{"class":188}," restart",[178,28750,28241],{"class":188},[24668,28752,28754],{"id":28753},"_3212fedora","3.2.1.2.Fedora",[26,28756,28757],{},[29,28758,28759],{},"配置存储库",[154,28761,28763],{"className":172,"code":28762,"language":174,"meta":160,"style":160},"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",[70,28764,28765,28780],{"__ignoreMap":160},[178,28766,28767,28769,28771,28773,28776,28778],{"class":180,"line":181},[178,28768,28598],{"class":184},[178,28770,28632],{"class":195},[178,28772,28635],{"class":195},[178,28774,28775],{"class":188}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[178,28777,26862],{"class":699},[178,28779,26432],{"class":195},[178,28781,28782,28784,28786],{"class":180,"line":263},[178,28783,185],{"class":184},[178,28785,27967],{"class":188},[178,28787,28788],{"class":188}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[26,28790,28791],{"start":263},[29,28792,28793],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[154,28795,28797],{"className":172,"code":28796,"language":174,"meta":160,"style":160},"# 如果是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",[70,28798,28799,28804,28818,28822,28827],{"__ignoreMap":160},[178,28800,28801],{"class":180,"line":181},[178,28802,28803],{"class":2008},"# 如果是RHEL或者Rocky（DNF4）\n",[178,28805,28806,28808,28810,28812,28815],{"class":180,"line":263},[178,28807,185],{"class":184},[178,28809,189],{"class":188},[178,28811,28163],{"class":188},[178,28813,28814],{"class":195}," --add-repo",[178,28816,28817],{"class":188}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[178,28819,28820],{"class":180,"line":274},[178,28821,722],{"emptyLinePlaceholder":721},[178,28823,28824],{"class":180,"line":354},[178,28825,28826],{"class":2008},"# 如果是Feodra41+（DNF5）\n",[178,28828,28829,28831,28833,28835,28837],{"class":180,"line":364},[178,28830,185],{"class":184},[178,28832,189],{"class":188},[178,28834,28163],{"class":188},[178,28836,28166],{"class":188},[178,28838,28839],{"class":195}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[26,28841,28842],{"start":274},[29,28843,28844],{},"安装NVIDIA Container Toolki包",[154,28846,28848],{"className":172,"code":28847,"language":174,"meta":160,"style":160},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[70,28849,28850,28855,28868,28872,28877],{"__ignoreMap":160},[178,28851,28852],{"class":180,"line":181},[178,28853,28854],{"class":2008},"# 如果是RHEL或者Rocky\n",[178,28856,28857,28859,28861,28863,28865],{"class":180,"line":263},[178,28858,185],{"class":184},[178,28860,189],{"class":188},[178,28862,192],{"class":188},[178,28864,196],{"class":195},[178,28866,28867],{"class":188}," nvidia-container-toolkit\n",[178,28869,28870],{"class":180,"line":274},[178,28871,722],{"emptyLinePlaceholder":721},[178,28873,28874],{"class":180,"line":354},[178,28875,28876],{"class":2008},"# 如果是Fedora\n",[178,28878,28879,28881,28883,28885,28887],{"class":180,"line":364},[178,28880,185],{"class":184},[178,28882,189],{"class":188},[178,28884,192],{"class":188},[178,28886,196],{"class":195},[178,28888,28867],{"class":188},[26,28890,28891],{"start":354},[29,28892,28893,28894,28896],{},"安装nvidia-docker2 ： 在Fedora上使用",[70,28895,28041],{},"进行安装",[154,28898,28900],{"className":172,"code":28899,"language":174,"meta":160,"style":160},"sudo dnf install -y nvidia-docker2\n",[70,28901,28902],{"__ignoreMap":160},[178,28903,28904,28906,28908,28910,28912],{"class":180,"line":181},[178,28905,185],{"class":184},[178,28907,189],{"class":188},[178,28909,192],{"class":188},[178,28911,196],{"class":195},[178,28913,28703],{"class":188},[26,28915,28916],{"start":364},[29,28917,28918],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[154,28920,28921],{"className":172,"code":28711,"language":174,"meta":160,"style":160},[70,28922,28923],{"__ignoreMap":160},[178,28924,28925,28927,28929,28931,28933],{"class":180,"line":181},[178,28926,185],{"class":184},[178,28928,28720],{"class":188},[178,28930,28723],{"class":188},[178,28932,28726],{"class":188},[178,28934,28729],{"class":195},[26,28936,28937],{"start":740},[29,28938,28939],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[154,28941,28942],{"className":172,"code":28737,"language":174,"meta":160,"style":160},[70,28943,28944],{"__ignoreMap":160},[178,28945,28946,28948,28950,28952],{"class":180,"line":181},[178,28947,185],{"class":184},[178,28949,28262],{"class":188},[178,28951,28748],{"class":188},[178,28953,28241],{"class":188},[19,28955,28956],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,28958,28959],{},"方法：",[19,28961,28962],{},"1️⃣nvidia-smi",[19,28964,28965],{},"2️⃣运行nvidia cuda 容器进行测试",[154,28967,28969],{"className":172,"code":28968,"language":174,"meta":160,"style":160},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[70,28970,28971],{"__ignoreMap":160},[178,28972,28973,28975,28977,28980,28983,28986,28989,28992],{"class":180,"line":181},[178,28974,185],{"class":184},[178,28976,28070],{"class":188},[178,28978,28979],{"class":188}," run",[178,28981,28982],{"class":195}," --rm",[178,28984,28985],{"class":195}," --gpus",[178,28987,28988],{"class":188}," all",[178,28990,28991],{"class":188}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[178,28993,28994],{"class":188}," nvidia-smi\n",[19,28996,28997],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,28999,29000],{},[3269,29001],{"alt":160,"src":29002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[387,29004,29006],{"id":29005},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,29008,29009],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,29011,29012],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,29014,29015],{},[2178,29016,29017],{"href":29017,"rel":29018},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[25619],[19,29020,29021],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,29023,29024],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,29026,29027],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[45,29029,29030,29046],{},[48,29031,29032],{},[51,29033,29034,29037,29040,29043],{},[54,29035,29036],{"align":56},"镜像类型",[54,29038,29039],{"align":56},"适用场景",[54,29041,29042],{"align":56},"示例标签",[54,29044,29045],{"align":56},"大小",[62,29047,29048,29062,29076],{},[51,29049,29050,29053,29056,29059],{},[67,29051,29052],{"align":56},"base",[67,29054,29055],{"align":56},"仅需 CUDA 运行时库",[67,29057,29058],{"align":56},"12.4.0-base-ubuntu22.04",[67,29060,29061],{"align":56},"~240MB",[51,29063,29064,29067,29070,29073],{},[67,29065,29066],{"align":56},"runtime",[67,29068,29069],{"align":56},"部署编译后的应用（含数学库）",[67,29071,29072],{"align":56},"12.4.0-runtime-ubuntu22.04",[67,29074,29075],{"align":56},"~2GB",[51,29077,29078,29081,29084,29087],{},[67,29079,29080],{"align":56},"devel",[67,29082,29083],{"align":56},"开发环境（含编译工具）",[67,29085,29086],{"align":56},"12.4.0-devel-ubuntu22.04",[67,29088,29089],{"align":56},"~3GB",[19,29091,29092,29093,29096],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[70,29094,29095],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,29098,29099],{},[3269,29100],{"alt":160,"src":29101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,29103,29104],{},"在dockerfile里就可以开头这么写：",[154,29106,29108],{"className":172,"code":29107,"language":174,"meta":160,"style":160},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[70,29109,29110,29115],{"__ignoreMap":160},[178,29111,29112],{"class":180,"line":181},[178,29113,29114],{"class":2008},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[178,29116,29117,29120],{"class":180,"line":263},[178,29118,29119],{"class":184},"FROM",[178,29121,29122],{"class":188}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[387,29124,29126],{"id":29125},"_34配置以太网","3.4.配置以太网",[19,29128,29129],{},"指定网络模式",[154,29131,29133],{"className":172,"code":29132,"language":174,"meta":160,"style":160},"--net=host \\\n",[70,29134,29135],{"__ignoreMap":160},[178,29136,29137,29140,29142,29145],{"class":180,"line":181},[178,29138,29139],{"class":319},"--net",[178,29141,330],{"class":699},[178,29143,29144],{"class":188},"host",[178,29146,26432],{"class":184},[19,29148,29149],{},"启动参数里加上这行即可。具体在下方",[19,29151,29152],{},"--net选项：指定网络模式，该选项有以下参数可选：",[2946,29154,29155,29158,29161,29164],{},[29,29156,29157],{},"--net=bridge:默认选项，表示连接到默认的网桥",[29,29159,29160],{},"--net=host:容器使用宿主机的网络",[29,29162,29163],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[29,29165,29166],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[1853,29168,29169],{},"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":160,"searchDepth":263,"depth":263,"links":29171},[29172,29173,29174,29175],{"id":28486,"depth":274,"text":28487},{"id":28553,"depth":274,"text":28554},{"id":29005,"depth":274,"text":29006},{"id":29125,"depth":274,"text":29126},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28475,"description":28483},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29182,"title":29183,"body":29184,"description":29191,"extension":1880,"meta":29197,"navigation":721,"path":29198,"seo":29199,"stem":29200,"__hash__":29201},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29185,"toc":29195},[29186,29189,29192],[10,29187,29183],{"id":29188},"_4dockerhub换源",[19,29190,29191],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,29193,29194],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":160,"searchDepth":263,"depth":263,"links":29196},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29183,"description":29191},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29203,"title":29204,"body":29205,"description":160,"extension":1880,"meta":30216,"navigation":721,"path":30217,"seo":30218,"stem":30219,"__hash__":30220},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29206,"toc":30211},[29207,29210,29214,29220,29224,29227,29567,29570,29573,29576,29581,29586,29589,29592,29595,29598,29617,29620,29631,29637,29819,29829,29845,30108,30110,30134,30149,30158,30208],[10,29208,29204],{"id":29209},"_5docker命令学习",[387,29211,29213],{"id":29212},"_51参考文档","5.1.参考文档",[19,29215,29216],{},[2178,29217,29218],{"href":29218,"rel":29219},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[25619],[387,29221,29223],{"id":29222},"_52常用命令","5.2.常用命令",[19,29225,29226],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[45,29228,29229,29242],{},[48,29230,29231],{},[51,29232,29233,29236,29239],{},[54,29234,29235],{"align":56},"命令",[54,29237,29238],{"align":56},"描述",[54,29240,29241],{"align":56},"示例",[62,29243,29244,29255,29266,29277,29288,29299,29310,29321,29331,29342,29353,29364,29374,29385,29396,29407,29417,29427,29437,29447,29458,29469,29480,29491,29502,29513,29523,29534,29545,29556],{},[51,29245,29246,29249,29252],{},[67,29247,29248],{"align":56},"docker run",[67,29250,29251],{"align":56},"创建并启动一个新的容器。",[67,29253,29254],{"align":56},"docker run -it ubuntu bash",[51,29256,29257,29260,29263],{},[67,29258,29259],{"align":56},"docker build",[67,29261,29262],{"align":56},"通过指定的 Dockerfile 创建一个新的镜像。",[67,29264,29265],{"align":56},"docker build -t myimage .",[51,29267,29268,29271,29274],{},[67,29269,29270],{"align":56},"docker pull",[67,29272,29273],{"align":56},"从 Docker 仓库拉取镜像。",[67,29275,29276],{"align":56},"docker pull ubuntu",[51,29278,29279,29282,29285],{},[67,29280,29281],{"align":56},"docker push",[67,29283,29284],{"align":56},"将本地镜像推送到 Docker 仓库。",[67,29286,29287],{"align":56},"docker push myimage",[51,29289,29290,29293,29296],{},[67,29291,29292],{"align":56},"docker stop",[67,29294,29295],{"align":56},"停止一个正在运行的容器。",[67,29297,29298],{"align":56},"docker stop container_id",[51,29300,29301,29304,29307],{},[67,29302,29303],{"align":56},"docker start",[67,29305,29306],{"align":56},"启动一个已经存在的容器。",[67,29308,29309],{"align":56},"docker start container_id",[51,29311,29312,29315,29318],{},[67,29313,29314],{"align":56},"docker restart",[67,29316,29317],{"align":56},"重新启动容器。",[67,29319,29320],{"align":56},"docker restart container_id",[51,29322,29323,29326,29329],{},[67,29324,29325],{"align":56},"docker ps",[67,29327,29328],{"align":56},"列出当前正在运行的容器。",[67,29330,29325],{"align":56},[51,29332,29333,29336,29339],{},[67,29334,29335],{"align":56},"docker rm",[67,29337,29338],{"align":56},"删除一个或多个停止的容器。",[67,29340,29341],{"align":56},"docker rm container_id",[51,29343,29344,29347,29350],{},[67,29345,29346],{"align":56},"docker exec",[67,29348,29349],{"align":56},"在一个正在运行的容器中执行命令。",[67,29351,29352],{"align":56},"docker exec -it container_id bash",[51,29354,29355,29358,29361],{},[67,29356,29357],{"align":56},"docker logs",[67,29359,29360],{"align":56},"查看容器的日志输出。",[67,29362,29363],{"align":56},"docker logs container_id",[51,29365,29366,29369,29372],{},[67,29367,29368],{"align":56},"docker images",[67,29370,29371],{"align":56},"列出本地所有镜像。",[67,29373,29368],{"align":56},[51,29375,29376,29379,29382],{},[67,29377,29378],{"align":56},"docker rmi",[67,29380,29381],{"align":56},"删除一个或多个镜像。",[67,29383,29384],{"align":56},"docker rmi myimage",[51,29386,29387,29390,29393],{},[67,29388,29389],{"align":56},"docker network",[67,29391,29392],{"align":56},"管理 Docker 网络。",[67,29394,29395],{"align":56},"docker network ls",[51,29397,29398,29401,29404],{},[67,29399,29400],{"align":56},"docker volume",[67,29402,29403],{"align":56},"管理 Docker 数据卷。",[67,29405,29406],{"align":56},"docker volume ls",[51,29408,29409,29412,29415],{},[67,29410,29411],{"align":56},"docker-compose up",[67,29413,29414],{"align":56},"启动 docker-compose.yml 中定义的所有服务。",[67,29416,29411],{"align":56},[51,29418,29419,29422,29425],{},[67,29420,29421],{"align":56},"docker-compose down",[67,29423,29424],{"align":56},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[67,29426,29421],{"align":56},[51,29428,29429,29432,29435],{},[67,29430,29431],{"align":56},"docker info",[67,29433,29434],{"align":56},"显示 Docker 系统的详细信息。",[67,29436,29431],{"align":56},[51,29438,29439,29442,29445],{},[67,29440,29441],{"align":56},"docker stats",[67,29443,29444],{"align":56},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[67,29446,29441],{"align":56},[51,29448,29449,29452,29455],{},[67,29450,29451],{"align":56},"docker inspect",[67,29453,29454],{"align":56},"查看容器或镜像的详细信息（JSON 格式）。",[67,29456,29457],{"align":56},"docker inspect container_id",[51,29459,29460,29463,29466],{},[67,29461,29462],{"align":56},"docker save",[67,29464,29465],{"align":56},"将一个镜像保存为 tar 文件。",[67,29467,29468],{"align":56},"docker save -o myimage.tar myimage",[51,29470,29471,29474,29477],{},[67,29472,29473],{"align":56},"docker load",[67,29475,29476],{"align":56},"从 tar 文件中加载镜像。",[67,29478,29479],{"align":56},"docker load -i myimage.tar",[51,29481,29482,29485,29488],{},[67,29483,29484],{"align":56},"docker tag",[67,29486,29487],{"align":56},"为镜像添加标签（tag）。",[67,29489,29490],{"align":56},"docker tag myimage myimage:v1",[51,29492,29493,29496,29499],{},[67,29494,29495],{"align":56},"docker buildx build",[67,29497,29498],{"align":56},"使用 Buildx 构建多架构镜像。",[67,29500,29501],{"align":56},"docker buildx build -t myimage .",[51,29503,29504,29507,29510],{},[67,29505,29506],{"align":56},"docker buildx create",[67,29508,29509],{"align":56},"创建一个新的 Buildx 构建实例。",[67,29511,29512],{"align":56},"docker buildx create –use",[51,29514,29515,29518,29521],{},[67,29516,29517],{"align":56},"docker buildx ls",[67,29519,29520],{"align":56},"列出所有可用的 Buildx 构建实例。",[67,29522,29517],{"align":56},[51,29524,29525,29528,29531],{},[67,29526,29527],{"align":56},"docker buildx use",[67,29529,29530],{"align":56},"设置当前的 Buildx 构建实例。",[67,29532,29533],{"align":56},"docker buildx use mybuilder",[51,29535,29536,29539,29542],{},[67,29537,29538],{"align":56},"docker buildx bake",[67,29540,29541],{"align":56},"使用 Bake 文件批量构建镜像。",[67,29543,29544],{"align":56},"docker buildx bake -f bake.hcl",[51,29546,29547,29550,29553],{},[67,29548,29549],{"align":56},"docker buildx build –push",[67,29551,29552],{"align":56},"构建镜像并推送到镜像仓库。",[67,29554,29555],{"align":56},"docker buildx build –push -t myimage .",[51,29557,29558,29561,29564],{},[67,29559,29560],{"align":56},"docker buildx build –platform",[67,29562,29563],{"align":56},"构建镜像并为多个平台生成支持。",[67,29565,29566],{"align":56},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,29568,29569],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,29571,29572],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,29574,29575],{},"docker images 可以查看已经下载的镜像",[19,29577,29578],{},[3269,29579],{"alt":160,"src":29580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,29582,29583],{},[2093,29584,29585],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,29587,29588],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,29590,29591],{},"docker container logs 查看容器日志",[19,29593,29594],{},"docker top 查看容器里的进程",[19,29596,29597],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[154,29599,29601],{"className":172,"code":29600,"language":174,"meta":160,"style":160},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[70,29602,29603],{"__ignoreMap":160},[178,29604,29605,29608,29611,29614],{"class":180,"line":181},[178,29606,29607],{"class":184},"如：docker",[178,29609,29610],{"class":188}," cp",[178,29612,29613],{"class":188}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[178,29615,29616],{"class":188}," \u002Fmydata\u002Fnginx\n",[19,29618,29619],{},"docker run时在启动容器的时候会有几个常用的选项：",[2946,29621,29622,29625,29628],{},[29,29623,29624],{},"-d选项：表示后台运行",[29,29626,29627],{},"-P选项：随机端口映射",[29,29629,29630],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[387,29632,29634],{"id":29633},"_53run命令的参数非常重要",[2093,29635,29636],{},"5.3.run命令的参数（非常重要）",[45,29638,29639,29652],{},[48,29640,29641],{},[51,29642,29643,29646,29649],{},[54,29644,29645],{"align":56},"参数\u002F配置",[54,29647,29648],{"align":56},"功能说明",[54,29650,29651],{"align":56},"重要性与参考依据",[62,29653,29654,29665,29676,29687,29698,29709,29720,29731,29742,29753,29764,29775,29786,29797,29808],{},[51,29655,29656,29659,29662],{},[67,29657,29658],{"align":56},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[67,29660,29661],{"align":56},"指定容器名称，便于后续管理",[67,29663,29664],{"align":56},"替代随机生成的容器名。",[51,29666,29667,29670,29673],{},[67,29668,29669],{"align":56},"–gpus all",[67,29671,29672],{"align":56},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[67,29674,29675],{"align":56},"用于CUDA加速等GPU依赖任务。",[51,29677,29678,29681,29684],{},[67,29679,29680],{"align":56},"-e NVIDIA_DRIVER_CAPABILITIES=all",[67,29682,29683],{"align":56},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[67,29685,29686],{"align":56},"确保容器内GPU功能完整67。",[51,29688,29689,29692,29695],{},[67,29690,29691],{"align":56},"-dit",[67,29693,29694],{"align":56},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[67,29696,29697],{"align":56},"允许容器在后台运行并支持交互操作。",[51,29699,29700,29703,29706],{},[67,29701,29702],{"align":56},"–privileged",[67,29704,29705],{"align":56},"赋予容器完全主机权限（可访问设备、内核模块等）",[67,29707,29708],{"align":56},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[51,29710,29711,29714,29717],{},[67,29712,29713],{"align":56},"–net=host",[67,29715,29716],{"align":56},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[67,29718,29719],{"align":56},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[51,29721,29722,29725,29728],{},[67,29723,29724],{"align":56},"–group-add audio–group-add video–group-add dialout",[67,29726,29727],{"align":56},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[67,29729,29730],{"align":56},"避免权限问题（如避免无法调用摄像头、麦克风）。",[51,29732,29733,29736,29739],{},[67,29734,29735],{"align":56},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[67,29737,29738],{"align":56},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[67,29740,29741],{"align":56},"支持容器内运行图形界面应用（如OpenCV可视化）。",[51,29743,29744,29747,29750],{},[67,29745,29746],{"align":56},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[67,29748,29749],{"align":56},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[67,29751,29752],{"align":56},"实现容器内图形显示。",[51,29754,29755,29758,29761],{},[67,29756,29757],{"align":56},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[67,29759,29760],{"align":56},"挂载X11认证文件（只读）",[67,29762,29763],{"align":56},"确保容器有权连接宿主机显示服务。",[51,29765,29766,29769,29772],{},[67,29767,29768],{"align":56},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[67,29770,29771],{"align":56},"挂载Wayland显示协议相关目录",[67,29773,29774],{"align":56},"支持Wayland协议的图形显示。",[51,29776,29777,29780,29783],{},[67,29778,29779],{"align":56},"–ulimit nofile=1024:524288",[67,29781,29782],{"align":56},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[67,29784,29785],{"align":56},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[51,29787,29788,29791,29794],{},[67,29789,29790],{"align":56},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[67,29792,29793],{"align":56},"挂载宿主机用户目录到容器内同名路径",[67,29795,29796],{"align":56},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[51,29798,29799,29802,29805],{},[67,29800,29801],{"align":56},"-w \u002Fhome\u002Ftungchiahui",[67,29803,29804],{"align":56},"设置容器启动后的默认工作目录",[67,29806,29807],{"align":56},"直接进入项目路径，方便执行命令2324。",[51,29809,29810,29813,29816],{},[67,29811,29812],{"align":56},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[67,29814,29815],{"align":56},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[67,29817,29818],{"align":56},"提供预配置的深度学习与机器人开发环境。",[19,29820,29821,29822,29824,29825,29828],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[70,29823,185],{},"加不加",[70,29826,29827],{},"sudo -E","都无所谓。",[19,29830,29831,29832,29834,29835,29837,29838,29841,29842,29844],{},"用户已经被加到docker组了，不用",[70,29833,185],{},"也行跑，其次，",[70,29836,185],{},"运行的话，你的",[70,29839,29840],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[70,29843,29840],{},"更不可能变了。",[154,29846,29848],{"className":172,"code":29847,"language":174,"meta":160,"style":160},"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",[70,29849,29850,29863,29873,29883,29895,29902,29909,29916,29926,29935,29944,29958,29970,29982,29991,30001,30010,30025,30058,30085,30096,30103],{"__ignoreMap":160},[178,29851,29852,29854,29856,29858,29861],{"class":180,"line":181},[178,29853,185],{"class":184},[178,29855,28070],{"class":188},[178,29857,28979],{"class":188},[178,29859,29860],{"class":195}," --name=ros_opencv_cuda",[178,29862,26432],{"class":195},[178,29864,29865,29868,29871],{"class":180,"line":263},[178,29866,29867],{"class":319},"--gpus ",[178,29869,29870],{"class":188},"all",[178,29872,26432],{"class":195},[178,29874,29875,29878,29881],{"class":180,"line":274},[178,29876,29877],{"class":319},"-e ",[178,29879,29880],{"class":188},"NVIDIA_DRIVER_CAPABILITIES=all",[178,29882,26432],{"class":195},[178,29884,29885,29887,29890,29893],{"class":180,"line":354},[178,29886,29877],{"class":319},[178,29888,29889],{"class":188},"DISPLAY=",[178,29891,29892],{"class":319},"$DISPLAY ",[178,29894,27926],{"class":195},[178,29896,29897,29900],{"class":180,"line":364},[178,29898,29899],{"class":319},"-dit ",[178,29901,27926],{"class":195},[178,29903,29904,29907],{"class":180,"line":740},[178,29905,29906],{"class":319},"--privileged ",[178,29908,27926],{"class":195},[178,29910,29911,29914],{"class":180,"line":746},[178,29912,29913],{"class":319},"--net=host ",[178,29915,27926],{"class":195},[178,29917,29918,29921,29924],{"class":180,"line":752},[178,29919,29920],{"class":319},"--group-add ",[178,29922,29923],{"class":188},"audio",[178,29925,26432],{"class":195},[178,29927,29928,29930,29933],{"class":180,"line":757},[178,29929,29920],{"class":319},[178,29931,29932],{"class":188},"video",[178,29934,26432],{"class":195},[178,29936,29937,29939,29942],{"class":180,"line":763},[178,29938,29920],{"class":319},[178,29940,29941],{"class":188},"dialout",[178,29943,26432],{"class":195},[178,29945,29946,29948,29951,29953,29956],{"class":180,"line":769},[178,29947,29877],{"class":319},[178,29949,29950],{"class":188},"XAUTHORITY=",[178,29952,29840],{"class":319},[178,29954,29955],{"class":188},"\u002F.Xauthority",[178,29957,26432],{"class":195},[178,29959,29960,29962,29965,29968],{"class":180,"line":774},[178,29961,29877],{"class":319},[178,29963,29964],{"class":188},"WAYLAND_DISPLAY=",[178,29966,29967],{"class":319},"$WAYLAND_DISPLAY ",[178,29969,27926],{"class":195},[178,29971,29972,29974,29977,29980],{"class":180,"line":780},[178,29973,29877],{"class":319},[178,29975,29976],{"class":188},"XDG_RUNTIME_DIR=",[178,29978,29979],{"class":319},"$XDG_RUNTIME_DIR ",[178,29981,27926],{"class":195},[178,29983,29984,29986,29989],{"class":180,"line":786},[178,29985,29877],{"class":319},[178,29987,29988],{"class":188},"QT_QPA_PLATFORM=xcb",[178,29990,26432],{"class":195},[178,29992,29993,29996,29999],{"class":180,"line":792},[178,29994,29995],{"class":319},"-v ",[178,29997,29998],{"class":188},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[178,30000,26432],{"class":195},[178,30002,30003,30005,30008],{"class":180,"line":798},[178,30004,29995],{"class":319},[178,30006,30007],{"class":188},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[178,30009,26432],{"class":195},[178,30011,30012,30015,30018,30020,30023],{"class":180,"line":804},[178,30013,30014],{"class":319},"-v $HOME",[178,30016,30017],{"class":188},"\u002F.Xauthority:",[178,30019,29840],{"class":319},[178,30021,30022],{"class":188},"\u002F.Xauthority:ro",[178,30024,26432],{"class":195},[178,30026,30027,30029,30032,30034,30037,30040,30042,30045,30047,30049,30051,30053,30056],{"class":180,"line":810},[178,30028,29995],{"class":319},[178,30030,30031],{"class":188},"\u002Frun\u002Fuser\u002F",[178,30033,26852],{"class":319},[178,30035,30036],{"class":184},"id",[178,30038,30039],{"class":195}," -u",[178,30041,2369],{"class":319},[178,30043,30044],{"class":188},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[178,30046,26852],{"class":319},[178,30048,30036],{"class":184},[178,30050,30039],{"class":195},[178,30052,2369],{"class":319},[178,30054,30055],{"class":188},"\u002Fwayland-0",[178,30057,26432],{"class":195},[178,30059,30060,30062,30064,30066,30068,30070,30072,30075,30077,30079,30081,30083],{"class":180,"line":816},[178,30061,29995],{"class":319},[178,30063,30031],{"class":188},[178,30065,26852],{"class":319},[178,30067,30036],{"class":184},[178,30069,30039],{"class":195},[178,30071,2369],{"class":319},[178,30073,30074],{"class":188},":\u002Frun\u002Fuser\u002F",[178,30076,26852],{"class":319},[178,30078,30036],{"class":184},[178,30080,30039],{"class":195},[178,30082,15474],{"class":319},[178,30084,27926],{"class":195},[178,30086,30087,30089,30091,30094],{"class":180,"line":822},[178,30088,30014],{"class":319},[178,30090,2799],{"class":188},[178,30092,30093],{"class":319},"$HOME ",[178,30095,27926],{"class":195},[178,30097,30098,30101],{"class":180,"line":827},[178,30099,30100],{"class":319},"-w $HOME ",[178,30102,27926],{"class":195},[178,30104,30105],{"class":180,"line":832},[178,30106,30107],{"class":319},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,30109,10786],{},[26,30111,30112,30120,30123,30126],{},[29,30113,30114,15555,30116,30119],{},[70,30115,29880],{},[70,30117,30118],{},"--gpus all","没有英伟达显卡请注释。",[29,30121,30122],{},"--name后面请自己为容器起名。",[29,30124,30125],{},"最后一行仓库名称请你自己找对应的镜像填上。",[29,30127,30128,30129,297],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25312,30130,30131],{},[2093,30132,30133],{},"请不要加",[154,30135,30137],{"className":172,"code":30136,"language":174,"meta":160,"style":160},"--ulimit nofile=1024:524288 \\\n",[70,30138,30139],{"__ignoreMap":160},[178,30140,30141,30144,30147],{"class":180,"line":181},[178,30142,30143],{"class":184},"--ulimit",[178,30145,30146],{"class":188}," nofile=1024:524288",[178,30148,26432],{"class":195},[19,30150,30151,30152,30157],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25312,30153,30154],{},[2093,30155,30156],{},"不建议","**.**",[154,30159,30161],{"className":172,"code":30160,"language":174,"meta":160,"style":160},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[70,30162,30163,30190,30199],{"__ignoreMap":160},[178,30164,30165,30168,30171,30173,30175,30177,30179,30181,30183,30186,30188],{"class":180,"line":181},[178,30166,30167],{"class":184},"--user",[178,30169,30170],{"class":319}," $(",[178,30172,30036],{"class":184},[178,30174,30039],{"class":195},[178,30176,2369],{"class":319},[178,30178,2799],{"class":188},[178,30180,26852],{"class":319},[178,30182,30036],{"class":184},[178,30184,30185],{"class":195}," -g",[178,30187,15474],{"class":319},[178,30189,27926],{"class":195},[178,30191,30192,30194,30197],{"class":180,"line":263},[178,30193,29995],{"class":319},[178,30195,30196],{"class":188},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[178,30198,26432],{"class":195},[178,30200,30201,30203,30206],{"class":180,"line":274},[178,30202,29995],{"class":319},[178,30204,30205],{"class":188},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[178,30207,26432],{"class":195},[1853,30209,30210],{},"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":160,"searchDepth":263,"depth":263,"links":30212},[30213,30214,30215],{"id":29212,"depth":274,"text":29213},{"id":29222,"depth":274,"text":29223},{"id":29633,"depth":274,"text":29636},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29204,"description":160},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30222,"title":30223,"body":30224,"description":160,"extension":1880,"meta":31846,"navigation":721,"path":31847,"seo":31848,"stem":31849,"__hash__":31850},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30225,"toc":31841},[30226,30229,30233,30236,30458,30462,30466,30469,30575,30580,30583,30588,30591,30596,30599,30604,30607,30619,30622,30627,30634,30662,30669,30745,30750,30753,30776,30778,30853,30858,30861,30865,30873,30878,30883,30887,30898,30904,30907,30910,30933,30936,30939,30967,30970,30973,31438,31441,31446,31451,31455,31478,31483,31487,31491,31494,31497,31500,31527,31530,31533,31551,31554,31557,31579,31587,31592,31597,31601,31604,31607,31610,31613,31658,31661,31679,31682,31687,31690,31711,31714,31770,31773,31778,31782,31785,31792,31795,31798,31803,31806,31822,31825,31838],[10,30227,30223],{"id":30228},"_6手动创建docker镜像",[387,30230,30232],{"id":30231},"_61dockerfile","6.1.DockerFile",[19,30234,30235],{},"常用命令：",[45,30237,30238,30249],{},[48,30239,30240],{},[51,30241,30242,30245,30247],{},[54,30243,30244],{"align":56},"指令",[54,30246,27621],{"align":56},[54,30248,29241],{"align":56},[62,30250,30251,30261,30277,30288,30299,30310,30321,30332,30343,30357,30371,30382,30396,30407,30418,30432,30447],{},[51,30252,30253,30255,30258],{},[67,30254,29119],{"align":56},[67,30256,30257],{"align":56},"指定基础镜像，是 Dockerfile 的起点",[67,30259,30260],{"align":56},"FROM ubuntu:22.04",[51,30262,30263,30266,30269],{},[67,30264,30265],{"align":56},"LABEL",[67,30267,30268],{"align":56},"添加元数据（如作者、版本等）",[67,30270,30271,30272,30276],{"align":56},"LABEL maintainer=”",[2178,30273,30275],{"href":30274},"mailto:you@example.com","you@example.com","”",[51,30278,30279,30282,30285],{},[67,30280,30281],{"align":56},"ENV",[67,30283,30284],{"align":56},"设置环境变量",[67,30286,30287],{"align":56},"ENV PORT=8080",[51,30289,30290,30293,30296],{},[67,30291,30292],{"align":56},"ARG",[67,30294,30295],{"align":56},"构建参数，只在构建期间可用",[67,30297,30298],{"align":56},"ARG VERSION=1.0",[51,30300,30301,30304,30307],{},[67,30302,30303],{"align":56},"RUN",[67,30305,30306],{"align":56},"构建镜像时运行命令",[67,30308,30309],{"align":56},"RUN apt-get update && apt-get install -y curl",[51,30311,30312,30315,30318],{},[67,30313,30314],{"align":56},"COPY",[67,30316,30317],{"align":56},"复制文件到镜像中",[67,30319,30320],{"align":56},"COPY . \u002Fapp",[51,30322,30323,30326,30329],{},[67,30324,30325],{"align":56},"ADD",[67,30327,30328],{"align":56},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[67,30330,30331],{"align":56},"ADD archive.tar.gz \u002Fdata\u002F",[51,30333,30334,30337,30340],{},[67,30335,30336],{"align":56},"WORKDIR",[67,30338,30339],{"align":56},"设置工作目录",[67,30341,30342],{"align":56},"WORKDIR \u002Fopt",[51,30344,30345,30348,30351],{},[67,30346,30347],{"align":56},"CMD",[67,30349,30350],{"align":56},"设置容器启动时默认命令（可被 docker run 覆盖）",[67,30352,30353,30354],{"align":56},"CMD ",[178,30355,30356],{},"“node”, “index.js”",[51,30358,30359,30362,30365],{},[67,30360,30361],{"align":56},"ENTRYPOINT",[67,30363,30364],{"align":56},"设置容器启动时固定命令（通常用于 CLI 工具等）",[67,30366,30367,30368],{"align":56},"ENTRYPOINT ",[178,30369,30370],{},"“python3”",[51,30372,30373,30376,30379],{},[67,30374,30375],{"align":56},"EXPOSE",[67,30377,30378],{"align":56},"声明镜像内服务监听的端口（不会自动映射）",[67,30380,30381],{"align":56},"EXPOSE 80",[51,30383,30384,30387,30390],{},[67,30385,30386],{"align":56},"VOLUME",[67,30388,30389],{"align":56},"声明数据卷挂载点",[67,30391,30392,30393],{"align":56},"VOLUME ",[178,30394,30395],{},"“\u002Fdata”",[51,30397,30398,30401,30404],{},[67,30399,30400],{"align":56},"USER",[67,30402,30403],{"align":56},"设置后续命令执行的用户",[67,30405,30406],{"align":56},"USER appuser",[51,30408,30409,30412,30415],{},[67,30410,30411],{"align":56},"ONBUILD",[67,30413,30414],{"align":56},"当镜像作为其他镜像基础镜像时触发的构建指令",[67,30416,30417],{"align":56},"ONBUILD COPY . \u002Fsrc",[51,30419,30420,30423,30426],{},[67,30421,30422],{"align":56},"SHELL",[67,30424,30425],{"align":56},"更改默认 shell，比如将 sh -c 改为 bash -c",[67,30427,30428,30429],{"align":56},"SHELL ",[178,30430,30431],{},"“\u002Fbin\u002Fbash”, “-c”",[51,30433,30434,30437,30440],{},[67,30435,30436],{"align":56},"HEALTHCHECK",[67,30438,30439],{"align":56},"定义容器运行时的健康检查命令",[67,30441,30442,30443],{"align":56},"`HEALTHCHECK CMD curl –fail ",[2178,30444,30445],{"href":30445,"rel":30446},"http:\u002F\u002Flocalhost:8080",[25619],[51,30448,30449,30452,30455],{},[67,30450,30451],{"align":56},"STOPSIGNAL",[67,30453,30454],{"align":56},"容器停止时发送的信号",[67,30456,30457],{"align":56},"STOPSIGNAL SIGKILL",[387,30459,30461],{"id":30460},"_62自己创建容器","6.2.自己创建容器",[23756,30463,30465],{"id":30464},"_621手动创建","6.2.1.手动创建",[19,30467,30468],{},"在x86电脑上编译x86的：",[154,30470,30472],{"className":172,"code":30471,"language":174,"meta":160,"style":160},"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",[70,30473,30474,30490,30494,30507,30511,30524,30528,30541,30545,30558,30562],{"__ignoreMap":160},[178,30475,30476,30478,30481,30484,30487],{"class":180,"line":181},[178,30477,28302],{"class":184},[178,30479,30480],{"class":188}," build",[178,30482,30483],{"class":195}," -t",[178,30485,30486],{"class":188}," ros-melodic-cuda118-cudnn8-bionic:latest",[178,30488,30489],{"class":188}," .\n",[178,30491,30492],{"class":180,"line":263},[178,30493,722],{"emptyLinePlaceholder":721},[178,30495,30496,30498,30500,30502,30505],{"class":180,"line":274},[178,30497,28302],{"class":184},[178,30499,30480],{"class":188},[178,30501,30483],{"class":195},[178,30503,30504],{"class":188}," ros-noetic-focal:latest",[178,30506,30489],{"class":188},[178,30508,30509],{"class":180,"line":354},[178,30510,722],{"emptyLinePlaceholder":721},[178,30512,30513,30515,30517,30519,30522],{"class":180,"line":364},[178,30514,28302],{"class":184},[178,30516,30480],{"class":188},[178,30518,30483],{"class":195},[178,30520,30521],{"class":188}," ros-humble-jammy:latest",[178,30523,30489],{"class":188},[178,30525,30526],{"class":180,"line":740},[178,30527,722],{"emptyLinePlaceholder":721},[178,30529,30530,30532,30534,30536,30539],{"class":180,"line":746},[178,30531,28302],{"class":184},[178,30533,30480],{"class":188},[178,30535,30483],{"class":195},[178,30537,30538],{"class":188}," ros-jazzy-noble:latest",[178,30540,30489],{"class":188},[178,30542,30543],{"class":180,"line":752},[178,30544,722],{"emptyLinePlaceholder":721},[178,30546,30547,30549,30551,30553,30556],{"class":180,"line":757},[178,30548,28302],{"class":184},[178,30550,30480],{"class":188},[178,30552,30483],{"class":195},[178,30554,30555],{"class":188}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[178,30557,30489],{"class":188},[178,30559,30560],{"class":180,"line":763},[178,30561,722],{"emptyLinePlaceholder":721},[178,30563,30564,30566,30568,30570,30573],{"class":180,"line":769},[178,30565,28302],{"class":184},[178,30567,30480],{"class":188},[178,30569,30483],{"class":195},[178,30571,30572],{"class":188}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[178,30574,30489],{"class":188},[19,30576,30577],{},[3269,30578],{"alt":160,"src":30579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,30581,30582],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,30584,30585],{},[3269,30586],{"alt":160,"src":30587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,30589,30590],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[26,30592,30593],{},[29,30594,30595],{},"创建 Docker Hub 账户",[19,30597,30598],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[26,30600,30601],{"start":263},[29,30602,30603],{},"登录 Docker Hub",[19,30605,30606],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[154,30608,30610],{"className":172,"code":30609,"language":174,"meta":160,"style":160},"docker login\n",[70,30611,30612],{"__ignoreMap":160},[178,30613,30614,30616],{"class":180,"line":181},[178,30615,28302],{"class":184},[178,30617,30618],{"class":188}," login\n",[19,30620,30621],{},"输入你的 Docker Hub 用户名和密码进行验证。",[26,30623,30624],{},[29,30625,30626],{},"为你的镜像打标签",[19,30628,30629,30630,30633],{},"Docker Hub 使用 ",[70,30631,30632],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[154,30635,30637],{"className":172,"code":30636,"language":174,"meta":160,"style":160},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[70,30638,30639],{"__ignoreMap":160},[178,30640,30641,30643,30646,30648,30651,30654,30657,30659],{"class":180,"line":181},[178,30642,28302],{"class":184},[178,30644,30645],{"class":188}," tag",[178,30647,30538],{"class":188},[178,30649,30650],{"class":699}," \u003C",[178,30652,30653],{"class":188},"你的用户",[178,30655,30656],{"class":319},"名",[178,30658,2899],{"class":699},[178,30660,30661],{"class":188},"\u002Fros-jazzy-noble:latest\n",[19,30663,30664,30665,30668],{},"例如，如果你的 Docker Hub 用户名是 ",[70,30666,30667],{},"tungchiahui","，你应该执行：",[154,30670,30672],{"className":172,"code":30671,"language":174,"meta":160,"style":160},"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",[70,30673,30674,30685,30689,30700,30704,30715,30719,30730,30734],{"__ignoreMap":160},[178,30675,30676,30678,30680,30682],{"class":180,"line":181},[178,30677,28302],{"class":184},[178,30679,30645],{"class":188},[178,30681,30504],{"class":188},[178,30683,30684],{"class":188}," tungchiahui\u002Fros-noetic-focal:latest\n",[178,30686,30687],{"class":180,"line":263},[178,30688,722],{"emptyLinePlaceholder":721},[178,30690,30691,30693,30695,30697],{"class":180,"line":274},[178,30692,28302],{"class":184},[178,30694,30645],{"class":188},[178,30696,30521],{"class":188},[178,30698,30699],{"class":188}," tungchiahui\u002Fros-humble-jammy:latest\n",[178,30701,30702],{"class":180,"line":354},[178,30703,722],{"emptyLinePlaceholder":721},[178,30705,30706,30708,30710,30712],{"class":180,"line":364},[178,30707,28302],{"class":184},[178,30709,30645],{"class":188},[178,30711,30538],{"class":188},[178,30713,30714],{"class":188}," tungchiahui\u002Fros-jazzy-noble:latest\n",[178,30716,30717],{"class":180,"line":740},[178,30718,722],{"emptyLinePlaceholder":721},[178,30720,30721,30723,30725,30727],{"class":180,"line":746},[178,30722,28302],{"class":184},[178,30724,30645],{"class":188},[178,30726,30555],{"class":188},[178,30728,30729],{"class":188}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[178,30731,30732],{"class":180,"line":752},[178,30733,722],{"emptyLinePlaceholder":721},[178,30735,30736,30738,30740,30742],{"class":180,"line":757},[178,30737,28302],{"class":184},[178,30739,30645],{"class":188},[178,30741,30572],{"class":188},[178,30743,30744],{"class":188}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[26,30746,30747],{"start":263},[29,30748,30749],{},"推送镜像到 Docker Hub",[19,30751,30752],{},"使用以下命令将镜像推送到 Docker Hub：",[154,30754,30756],{"className":172,"code":30755,"language":174,"meta":160,"style":160},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[70,30757,30758],{"__ignoreMap":160},[178,30759,30760,30762,30765,30767,30769,30771,30773],{"class":180,"line":181},[178,30761,28302],{"class":184},[178,30763,30764],{"class":188}," push",[178,30766,30650],{"class":699},[178,30768,30653],{"class":188},[178,30770,30656],{"class":319},[178,30772,2899],{"class":699},[178,30774,30775],{"class":188},"\u002Fros-noetic-jazzy-noble:latest\n",[19,30777,528],{},[154,30779,30781],{"className":172,"code":30780,"language":174,"meta":160,"style":160},"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",[70,30782,30783,30791,30795,30803,30807,30815,30819,30828,30832,30840,30844],{"__ignoreMap":160},[178,30784,30785,30787,30789],{"class":180,"line":181},[178,30786,28302],{"class":184},[178,30788,30764],{"class":188},[178,30790,30684],{"class":188},[178,30792,30793],{"class":180,"line":263},[178,30794,722],{"emptyLinePlaceholder":721},[178,30796,30797,30799,30801],{"class":180,"line":274},[178,30798,28302],{"class":184},[178,30800,30764],{"class":188},[178,30802,30699],{"class":188},[178,30804,30805],{"class":180,"line":354},[178,30806,722],{"emptyLinePlaceholder":721},[178,30808,30809,30811,30813],{"class":180,"line":364},[178,30810,28302],{"class":184},[178,30812,30764],{"class":188},[178,30814,30714],{"class":188},[178,30816,30817],{"class":180,"line":740},[178,30818,722],{"emptyLinePlaceholder":721},[178,30820,30821,30823,30825],{"class":180,"line":746},[178,30822,28302],{"class":184},[178,30824,30764],{"class":188},[178,30826,30827],{"class":188}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[178,30829,30830],{"class":180,"line":752},[178,30831,722],{"emptyLinePlaceholder":721},[178,30833,30834,30836,30838],{"class":180,"line":757},[178,30835,28302],{"class":184},[178,30837,30764],{"class":188},[178,30839,30744],{"class":188},[178,30841,30842],{"class":180,"line":763},[178,30843,722],{"emptyLinePlaceholder":721},[178,30845,30846,30848,30850],{"class":180,"line":769},[178,30847,28302],{"class":184},[178,30849,30764],{"class":188},[178,30851,30852],{"class":188}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[26,30854,30855],{"start":274},[29,30856,30857],{},"验证推送成功",[19,30859,30860],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,30862,30863],{},[2093,30864,5556],{},[2946,30866,30867,30870],{},[29,30868,30869],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[29,30871,30872],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,30874,30875],{},[3269,30876],{"alt":160,"src":30877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,30879,30880],{},[3269,30881],{"alt":160,"src":30882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[23756,30884,30886],{"id":30885},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,30888,30889,30890,30893,30894,30897],{},"如果您想在 ",[2093,30891,30892],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[2093,30895,30896],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,30899,30900,30901],{},"1. ",[2093,30902,30903],{},"启用 Docker 跨平台构建",[19,30905,30906],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,30908,30909],{},"第一步：启用 buildx（只需执行一次）",[154,30911,30913],{"className":172,"code":30912,"language":174,"meta":160,"style":160},"docker buildx create --name multiarch_builder --use\n",[70,30914,30915],{"__ignoreMap":160},[178,30916,30917,30919,30922,30924,30927,30930],{"class":180,"line":181},[178,30918,28302],{"class":184},[178,30920,30921],{"class":188}," buildx",[178,30923,245],{"class":188},[178,30925,30926],{"class":195}," --name",[178,30928,30929],{"class":188}," multiarch_builder",[178,30931,30932],{"class":195}," --use\n",[19,30934,30935],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,30937,30938],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[154,30940,30942],{"className":172,"code":30941,"language":174,"meta":160,"style":160},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[70,30943,30944],{"__ignoreMap":160},[178,30945,30946,30948,30950,30952,30955,30958,30961,30964],{"class":180,"line":181},[178,30947,28302],{"class":184},[178,30949,28979],{"class":188},[178,30951,28982],{"class":195},[178,30953,30954],{"class":195}," --privileged",[178,30956,30957],{"class":188}," multiarch\u002Fqemu-user-static",[178,30959,30960],{"class":195}," --reset",[178,30962,30963],{"class":195}," -p",[178,30965,30966],{"class":188}," yes\n",[19,30968,30969],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,30971,30972],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[154,30974,30976],{"className":172,"code":30975,"language":174,"meta":160,"style":160},"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",[70,30977,30978,31020,31024,31029,31039,31049,31058,31064,31068,31072,31082,31090,31099,31105,31109,31113,31123,31131,31140,31146,31150,31154,31164,31172,31181,31187,31191,31195,31205,31213,31222,31228,31232,31236,31246,31254,31263,31269,31273,31277,31287,31295,31304,31310,31314,31318,31328,31336,31345,31351,31355,31359,31369,31377,31386,31392,31396,31400,31411,31419,31428,31434],{"__ignoreMap":160},[178,30979,30980,30982,30984,30986,30989,30992,30994,30996,30999,31001,31003,31005,31007,31010,31013,31015,31018],{"class":180,"line":181},[178,30981,28302],{"class":184},[178,30983,30921],{"class":188},[178,30985,30480],{"class":188},[178,30987,30988],{"class":195}," --platform",[178,30990,30991],{"class":188}," linux\u002Famd64,linux\u002Farm64",[178,30993,30483],{"class":195},[178,30995,30650],{"class":699},[178,30997,30998],{"class":188},"你的镜像",[178,31000,30656],{"class":319},[178,31002,2899],{"class":699},[178,31004,2799],{"class":188},[178,31006,320],{"class":699},[178,31008,31009],{"class":188},"标",[178,31011,31012],{"class":319},"签",[178,31014,2899],{"class":699},[178,31016,31017],{"class":195}," --push",[178,31019,30489],{"class":188},[178,31021,31022],{"class":180,"line":263},[178,31023,722],{"emptyLinePlaceholder":721},[178,31025,31026],{"class":180,"line":274},[178,31027,31028],{"class":2008},"# 例子：\n",[178,31030,31031,31033,31035,31037],{"class":180,"line":354},[178,31032,28302],{"class":184},[178,31034,30921],{"class":188},[178,31036,30480],{"class":188},[178,31038,26432],{"class":195},[178,31040,31041,31044,31047],{"class":180,"line":364},[178,31042,31043],{"class":319},"--platform ",[178,31045,31046],{"class":188},"linux\u002Famd64,linux\u002Farm64",[178,31048,26432],{"class":195},[178,31050,31051,31053,31056],{"class":180,"line":740},[178,31052,30483],{"class":195},[178,31054,31055],{"class":188}," tungchiahui\u002Fros:noetic-focal",[178,31057,26432],{"class":195},[178,31059,31060,31062],{"class":180,"line":746},[178,31061,31017],{"class":195},[178,31063,26432],{"class":195},[178,31065,31066],{"class":180,"line":752},[178,31067,30489],{"class":188},[178,31069,31070],{"class":180,"line":757},[178,31071,722],{"emptyLinePlaceholder":721},[178,31073,31074,31076,31078,31080],{"class":180,"line":763},[178,31075,28302],{"class":184},[178,31077,30921],{"class":188},[178,31079,30480],{"class":188},[178,31081,26432],{"class":195},[178,31083,31084,31086,31088],{"class":180,"line":769},[178,31085,31043],{"class":319},[178,31087,31046],{"class":188},[178,31089,26432],{"class":195},[178,31091,31092,31094,31097],{"class":180,"line":774},[178,31093,30483],{"class":195},[178,31095,31096],{"class":188}," tungchiahui\u002Fros:humble-jammy",[178,31098,26432],{"class":195},[178,31100,31101,31103],{"class":180,"line":780},[178,31102,31017],{"class":195},[178,31104,26432],{"class":195},[178,31106,31107],{"class":180,"line":786},[178,31108,30489],{"class":188},[178,31110,31111],{"class":180,"line":792},[178,31112,722],{"emptyLinePlaceholder":721},[178,31114,31115,31117,31119,31121],{"class":180,"line":798},[178,31116,28302],{"class":184},[178,31118,30921],{"class":188},[178,31120,30480],{"class":188},[178,31122,26432],{"class":195},[178,31124,31125,31127,31129],{"class":180,"line":804},[178,31126,31043],{"class":319},[178,31128,31046],{"class":188},[178,31130,26432],{"class":195},[178,31132,31133,31135,31138],{"class":180,"line":810},[178,31134,30483],{"class":195},[178,31136,31137],{"class":188}," tungchiahui\u002Fros:jazzy-noble",[178,31139,26432],{"class":195},[178,31141,31142,31144],{"class":180,"line":816},[178,31143,31017],{"class":195},[178,31145,26432],{"class":195},[178,31147,31148],{"class":180,"line":822},[178,31149,30489],{"class":188},[178,31151,31152],{"class":180,"line":827},[178,31153,722],{"emptyLinePlaceholder":721},[178,31155,31156,31158,31160,31162],{"class":180,"line":832},[178,31157,28070],{"class":184},[178,31159,30921],{"class":188},[178,31161,30480],{"class":188},[178,31163,26432],{"class":195},[178,31165,31166,31168,31170],{"class":180,"line":850},[178,31167,31043],{"class":319},[178,31169,31046],{"class":188},[178,31171,26432],{"class":195},[178,31173,31174,31176,31179],{"class":180,"line":866},[178,31175,30483],{"class":195},[178,31177,31178],{"class":188}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[178,31180,26432],{"class":195},[178,31182,31183,31185],{"class":180,"line":877},[178,31184,31017],{"class":195},[178,31186,26432],{"class":195},[178,31188,31189],{"class":180,"line":882},[178,31190,30489],{"class":188},[178,31192,31193],{"class":180,"line":898},[178,31194,722],{"emptyLinePlaceholder":721},[178,31196,31197,31199,31201,31203],{"class":180,"line":914},[178,31198,28302],{"class":184},[178,31200,30921],{"class":188},[178,31202,30480],{"class":188},[178,31204,26432],{"class":195},[178,31206,31207,31209,31211],{"class":180,"line":919},[178,31208,31043],{"class":319},[178,31210,31046],{"class":188},[178,31212,26432],{"class":195},[178,31214,31215,31217,31220],{"class":180,"line":935},[178,31216,30483],{"class":195},[178,31218,31219],{"class":188}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[178,31221,26432],{"class":195},[178,31223,31224,31226],{"class":180,"line":952},[178,31225,31017],{"class":195},[178,31227,26432],{"class":195},[178,31229,31230],{"class":180,"line":966},[178,31231,30489],{"class":188},[178,31233,31234],{"class":180,"line":980},[178,31235,722],{"emptyLinePlaceholder":721},[178,31237,31238,31240,31242,31244],{"class":180,"line":985},[178,31239,28070],{"class":184},[178,31241,30921],{"class":188},[178,31243,30480],{"class":188},[178,31245,26432],{"class":195},[178,31247,31248,31250,31252],{"class":180,"line":1008},[178,31249,31043],{"class":319},[178,31251,31046],{"class":188},[178,31253,26432],{"class":195},[178,31255,31256,31258,31261],{"class":180,"line":1014},[178,31257,30483],{"class":195},[178,31259,31260],{"class":188}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[178,31262,26432],{"class":195},[178,31264,31265,31267],{"class":180,"line":1019},[178,31266,31017],{"class":195},[178,31268,26432],{"class":195},[178,31270,31271],{"class":180,"line":1033},[178,31272,30489],{"class":188},[178,31274,31275],{"class":180,"line":1046},[178,31276,722],{"emptyLinePlaceholder":721},[178,31278,31279,31281,31283,31285],{"class":180,"line":1059},[178,31280,28302],{"class":184},[178,31282,30921],{"class":188},[178,31284,30480],{"class":188},[178,31286,26432],{"class":195},[178,31288,31289,31291,31293],{"class":180,"line":1072},[178,31290,31043],{"class":319},[178,31292,31046],{"class":188},[178,31294,26432],{"class":195},[178,31296,31297,31299,31302],{"class":180,"line":1077},[178,31298,30483],{"class":195},[178,31300,31301],{"class":188}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[178,31303,26432],{"class":195},[178,31305,31306,31308],{"class":180,"line":1082},[178,31307,31017],{"class":195},[178,31309,26432],{"class":195},[178,31311,31312],{"class":180,"line":1099},[178,31313,30489],{"class":188},[178,31315,31316],{"class":180,"line":9806},[178,31317,722],{"emptyLinePlaceholder":721},[178,31319,31320,31322,31324,31326],{"class":180,"line":9818},[178,31321,28302],{"class":184},[178,31323,30921],{"class":188},[178,31325,30480],{"class":188},[178,31327,26432],{"class":195},[178,31329,31330,31332,31334],{"class":180,"line":11477},[178,31331,31043],{"class":319},[178,31333,31046],{"class":188},[178,31335,26432],{"class":195},[178,31337,31338,31340,31343],{"class":180,"line":11502},[178,31339,30483],{"class":195},[178,31341,31342],{"class":188}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[178,31344,26432],{"class":195},[178,31346,31347,31349],{"class":180,"line":11525},[178,31348,31017],{"class":195},[178,31350,26432],{"class":195},[178,31352,31353],{"class":180,"line":11549},[178,31354,30489],{"class":188},[178,31356,31357],{"class":180,"line":11554},[178,31358,722],{"emptyLinePlaceholder":721},[178,31360,31361,31363,31365,31367],{"class":180,"line":11559},[178,31362,28070],{"class":184},[178,31364,30921],{"class":188},[178,31366,30480],{"class":188},[178,31368,26432],{"class":195},[178,31370,31371,31373,31375],{"class":180,"line":11564},[178,31372,31043],{"class":319},[178,31374,31046],{"class":188},[178,31376,26432],{"class":195},[178,31378,31379,31381,31384],{"class":180,"line":11573},[178,31380,30483],{"class":195},[178,31382,31383],{"class":188}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[178,31385,26432],{"class":195},[178,31387,31388,31390],{"class":180,"line":11578},[178,31389,31017],{"class":195},[178,31391,26432],{"class":195},[178,31393,31394],{"class":180,"line":11584},[178,31395,30489],{"class":188},[178,31397,31398],{"class":180,"line":11605},[178,31399,722],{"emptyLinePlaceholder":721},[178,31401,31402,31405,31407,31409],{"class":180,"line":11611},[178,31403,31404],{"class":184},"  docker",[178,31406,30921],{"class":188},[178,31408,30480],{"class":188},[178,31410,26432],{"class":195},[178,31412,31413,31415,31417],{"class":180,"line":11625},[178,31414,31043],{"class":319},[178,31416,31046],{"class":188},[178,31418,26432],{"class":195},[178,31420,31421,31423,31426],{"class":180,"line":11631},[178,31422,30483],{"class":195},[178,31424,31425],{"class":188}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[178,31427,26432],{"class":195},[178,31429,31430,31432],{"class":180,"line":11658},[178,31431,31017],{"class":195},[178,31433,26432],{"class":195},[178,31435,31436],{"class":180,"line":11667},[178,31437,30489],{"class":188},[19,31439,31440],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,31442,31443],{},[3269,31444],{"alt":160,"src":31445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,31447,31448],{},[3269,31449],{"alt":160,"src":31450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[23756,31452,31454],{"id":31453},"_623清除构建缓存","6.2.3.清除构建缓存",[154,31456,31458],{"className":172,"code":31457,"language":174,"meta":160,"style":160},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[70,31459,31460,31465],{"__ignoreMap":160},[178,31461,31462],{"class":180,"line":181},[178,31463,31464],{"class":2008},"# 清理BuildKit构建缓存\n",[178,31466,31467,31469,31472,31475],{"class":180,"line":263},[178,31468,28302],{"class":184},[178,31470,31471],{"class":188}," builder",[178,31473,31474],{"class":188}," prune",[178,31476,31477],{"class":195}," -f\n",[19,31479,31480],{},[3269,31481],{"alt":160,"src":31482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[387,31484,31486],{"id":31485},"_63补充","6.3.补充",[23756,31488,31490],{"id":31489},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,31492,31493],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,31495,31496],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,31498,31499],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[154,31501,31503],{"className":172,"code":31502,"language":174,"meta":160,"style":160},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[70,31504,31505,31512],{"__ignoreMap":160},[178,31506,31507,31509],{"class":180,"line":181},[178,31508,29119],{"class":184},[178,31510,31511],{"class":188}," nginx\n",[178,31513,31514,31516,31519,31522,31524],{"class":180,"line":263},[178,31515,30303],{"class":184},[178,31517,31518],{"class":188}," echo",[178,31520,31521],{"class":188}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[178,31523,27973],{"class":699},[178,31525,31526],{"class":188}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,31528,31529],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,31531,31532],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[154,31534,31536],{"className":172,"code":31535,"language":174,"meta":160,"style":160},"docker build -t nginx:tuling .\n",[70,31537,31538],{"__ignoreMap":160},[178,31539,31540,31542,31544,31546,31549],{"class":180,"line":181},[178,31541,28302],{"class":184},[178,31543,30480],{"class":188},[178,31545,30483],{"class":195},[178,31547,31548],{"class":188}," nginx:tuling",[178,31550,30489],{"class":188},[19,31552,31553],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,31555,31556],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[154,31558,31560],{"className":172,"code":31559,"language":174,"meta":160,"style":160},"docker run -d -p 92:80 nginx:tuling\n",[70,31561,31562],{"__ignoreMap":160},[178,31563,31564,31566,31568,31571,31573,31576],{"class":180,"line":181},[178,31565,28302],{"class":184},[178,31567,28979],{"class":188},[178,31569,31570],{"class":195}," -d",[178,31572,30963],{"class":195},[178,31574,31575],{"class":188}," 92:80",[178,31577,31578],{"class":188}," nginx:tuling\n",[19,31580,31581,31582],{},"4、访问 ",[2178,31583,31586],{"href":31584,"rel":31585},"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",[25619],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,31588,31589],{},[3269,31590],{"alt":160,"src":31591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,31593,31594],{},[3269,31595],{"alt":160,"src":31596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[23756,31598,31600],{"id":31599},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,31602,31603],{},"只需要知道大体流程即可",[19,31605,31606],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,31608,31609],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,31611,31612],{},"2、在Dockerfile中添加以下内容",[154,31614,31616],{"className":27842,"code":31615,"language":27844,"meta":160,"style":160},"# 基于哪个镜像\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",[70,31617,31618,31623,31628,31633,31638,31643,31648,31653],{"__ignoreMap":160},[178,31619,31620],{"class":180,"line":181},[178,31621,31622],{},"# 基于哪个镜像\n",[178,31624,31625],{"class":180,"line":263},[178,31626,31627],{},"From java:8\n",[178,31629,31630],{"class":180,"line":274},[178,31631,31632],{},"# 复制文件到容器\n",[178,31634,31635],{"class":180,"line":354},[178,31636,31637],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[178,31639,31640],{"class":180,"line":364},[178,31641,31642],{},"# 声明需要暴露的端口\n",[178,31644,31645],{"class":180,"line":740},[178,31646,31647],{},"EXPOSE 8877\n",[178,31649,31650],{"class":180,"line":746},[178,31651,31652],{},"# 配置容器启动后执行的命令\n",[178,31654,31655],{"class":180,"line":752},[178,31656,31657],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,31659,31660],{},"3、使用docker build命令构建镜像",[154,31662,31664],{"className":172,"code":31663,"language":174,"meta":160,"style":160},"docker build -t tulingmall-member:0.0.5 .\n",[70,31665,31666],{"__ignoreMap":160},[178,31667,31668,31670,31672,31674,31677],{"class":180,"line":181},[178,31669,28302],{"class":184},[178,31671,30480],{"class":188},[178,31673,30483],{"class":195},[178,31675,31676],{"class":188}," tulingmall-member:0.0.5",[178,31678,30489],{"class":188},[19,31680,31681],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,31683,31684],{},[3269,31685],{"alt":160,"src":31686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,31688,31689],{},"4、启动镜像，加-d可在后台启动",[154,31691,31693],{"className":172,"code":31692,"language":174,"meta":160,"style":160},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[70,31694,31695],{"__ignoreMap":160},[178,31696,31697,31699,31701,31703,31705,31708],{"class":180,"line":181},[178,31698,28302],{"class":184},[178,31700,28979],{"class":188},[178,31702,31570],{"class":195},[178,31704,30963],{"class":195},[178,31706,31707],{"class":188}," 8877:8877",[178,31709,31710],{"class":188}," tulingmall-member:0.0.5\n",[19,31712,31713],{},"加上JVM参数：",[154,31715,31717],{"className":172,"code":31716,"language":174,"meta":160,"style":160},"# --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",[70,31718,31719,31724,31739,31749,31758,31765],{"__ignoreMap":160},[178,31720,31721],{"class":180,"line":181},[178,31722,31723],{"class":2008},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[178,31725,31726,31728,31730,31733,31735,31737],{"class":180,"line":263},[178,31727,28302],{"class":184},[178,31729,28979],{"class":188},[178,31731,31732],{"class":195},"  -d",[178,31734,30963],{"class":195},[178,31736,31707],{"class":188},[178,31738,26432],{"class":195},[178,31740,31741,31743,31746],{"class":180,"line":274},[178,31742,29877],{"class":319},[178,31744,31745],{"class":188},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[178,31747,31748],{"class":195},"  \\\n",[178,31750,31751,31753,31756],{"class":180,"line":354},[178,31752,29877],{"class":319},[178,31754,31755],{"class":188},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[178,31757,31748],{"class":195},[178,31759,31760,31763],{"class":180,"line":364},[178,31761,31762],{"class":319},"--cap-add=SYS_PTRACE  ",[178,31764,27926],{"class":195},[178,31766,31767],{"class":180,"line":740},[178,31768,31769],{"class":319},"tulingmall-member:0.0.5\n",[19,31771,31772],{},"5、访问会员服务接口",[19,31774,31775],{},[3269,31776],{"alt":160,"src":31777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[23756,31779,31781],{"id":31780},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,31783,31784],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,31786,31787,31788],{},"阿里云docker镜像仓库：",[2178,31789,31790],{"href":31790,"rel":31791},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[25619],[19,31793,31794],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,31796,31797],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,31799,31800],{},[3269,31801],{"alt":160,"src":31802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,31804,31805],{},"要把镜像推送到镜像仓库",[154,31807,31809],{"className":172,"code":31808,"language":174,"meta":160,"style":160},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[70,31810,31811],{"__ignoreMap":160},[178,31812,31813,31815,31817,31819],{"class":180,"line":181},[178,31814,28302],{"class":184},[178,31816,30645],{"class":188},[178,31818,31676],{"class":188},[178,31820,31821],{"class":188}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,31823,31824],{},"最后将镜像推送到远程仓库",[154,31826,31828],{"className":172,"code":31827,"language":174,"meta":160,"style":160},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[70,31829,31830],{"__ignoreMap":160},[178,31831,31832,31834,31836],{"class":180,"line":181},[178,31833,28302],{"class":184},[178,31835,30764],{"class":188},[178,31837,31821],{"class":188},[1853,31839,31840],{},"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":160,"searchDepth":263,"depth":263,"links":31842},[31843,31844,31845],{"id":30231,"depth":274,"text":30232},{"id":30460,"depth":274,"text":30461},{"id":31485,"depth":274,"text":31486},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30223,"description":160},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":31852,"title":31853,"body":31854,"description":160,"extension":1880,"meta":31997,"navigation":721,"path":31998,"seo":31999,"stem":32000,"__hash__":32001},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":31855,"toc":31995},[31856,31859,31864,31869,31872,31877,31882,31885,31890,31895,31898,31903,31906,31909,31912,31915,31918,31921,31941,31963,31966,31969,31989,31992],[10,31857,31853],{"id":31858},"_7vscode远程开发",[26,31860,31861],{},[29,31862,31863],{},"插件1：微软Docker工具",[19,31865,31866],{},[3269,31867],{"alt":160,"src":31868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,31870,31871],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,31873,31874],{},[3269,31875],{"alt":160,"src":31876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[26,31878,31879],{"start":263},[29,31880,31881],{},"插件2：微软Docker远程开发工具",[19,31883,31884],{},"下面这是远程开发的插件。",[19,31886,31887],{},[3269,31888],{"alt":160,"src":31889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,31891,31892],{},[3269,31893],{"alt":160,"src":31894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,31896,31897],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,31899,31900],{},[3269,31901],{"alt":160,"src":31902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,31904,31905],{},"安装完拓展之后，vscode进行链接：",[19,31907,31908],{},"1.按ctrl+shift+p",[19,31910,31911],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,31913,31914],{},"3.选择目前运行的容器",[19,31916,31917],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,31919,31920],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[154,31922,31924],{"className":172,"code":31923,"language":174,"meta":160,"style":160},"docker run -v 主机目录:容器目录 image-name\n",[70,31925,31926],{"__ignoreMap":160},[178,31927,31928,31930,31932,31935,31938],{"class":180,"line":181},[178,31929,28302],{"class":184},[178,31931,28979],{"class":188},[178,31933,31934],{"class":195}," -v",[178,31936,31937],{"class":188}," 主机目录:容器目录",[178,31939,31940],{"class":188}," image-name\n",[154,31942,31944],{"className":172,"code":31943,"language":174,"meta":160,"style":160},"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",[70,31945,31946],{"__ignoreMap":160},[178,31947,31948,31950,31952,31955,31957,31960],{"class":180,"line":181},[178,31949,28302],{"class":184},[178,31951,28979],{"class":188},[178,31953,31954],{"class":195}," -it",[178,31956,31934],{"class":195},[178,31958,31959],{"class":188}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[178,31961,31962],{"class":188}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,31964,31965],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,31967,31968],{},"查看挂载情况：",[154,31970,31972],{"className":172,"code":31971,"language":174,"meta":160,"style":160},"mount | grep -i project\n",[70,31973,31974],{"__ignoreMap":160},[178,31975,31976,31979,31981,31984,31986],{"class":180,"line":181},[178,31977,31978],{"class":184},"mount",[178,31980,26862],{"class":699},[178,31982,31983],{"class":184}," grep",[178,31985,28179],{"class":195},[178,31987,31988],{"class":188}," project\n",[19,31990,31991],{},"也可以通过ls来进行查看",[1853,31993,31994],{},"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":160,"searchDepth":263,"depth":263,"links":31996},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":31853,"description":160},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":32003,"title":32004,"body":32005,"description":25135,"extension":1880,"meta":32009,"navigation":721,"path":32011,"seo":32012,"stem":32013,"__hash__":32014},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":32006,"toc":32007},[],{"title":160,"searchDepth":263,"depth":263,"links":32008},[],{"category":32010},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":32004,"description":25135},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":32016,"title":32017,"body":32018,"description":25135,"extension":1880,"meta":32022,"navigation":721,"path":32023,"seo":32024,"stem":32025,"__hash__":32026},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":32019,"toc":32020},[],{"title":160,"searchDepth":263,"depth":263,"links":32021},[],{"category":32010},"\u002Fwiki\u002F2025-11-10-k8s",{"title":32017,"description":25135},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":32028,"title":32029,"body":32030,"description":25135,"extension":1880,"meta":32318,"navigation":721,"path":32319,"seo":32320,"stem":32321,"__hash__":32322},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":32031,"toc":32316},[32032,32035,32043,32058,32063,32113,32116,32122,32305,32310,32313],[10,32033,32029],{"id":32034},"_1验证深度学习环境",[19,32036,32037,32038],{},"关于环境的安装，看",[2178,32039,32042],{"href":32040,"rel":32041},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[25619],"Pytorch-->深度学习",[19,32044,32045,32046,32049,32050,32053,32054,32057],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[70,32047,32048],{},"pytorch-cuda=12.4"," 是一个“ ",[2093,32051,32052],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[2093,32055,32056],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,32059,32060],{},[3269,32061],{"alt":160,"src":32062},"\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",[154,32064,32066],{"className":172,"code":32065,"language":174,"meta":160,"style":160},"# 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",[70,32067,32068,32073],{"__ignoreMap":160},[178,32069,32070],{"class":180,"line":181},[178,32071,32072],{"class":2008},"# CUDA 12.4\n",[178,32074,32075,32077,32079,32082,32085,32088,32091,32094,32096,32099,32102,32105,32108,32110],{"class":180,"line":263},[178,32076,242],{"class":184},[178,32078,192],{"class":188},[178,32080,32081],{"class":188}," pytorch==",[178,32083,32084],{"class":195},"2.5.1",[178,32086,32087],{"class":188}," torchvision==",[178,32089,32090],{"class":195},"0.20.1",[178,32092,32093],{"class":188}," torchaudio==",[178,32095,32084],{"class":195},[178,32097,32098],{"class":188}," pytorch-cuda=",[178,32100,32101],{"class":195},"12.4",[178,32103,32104],{"class":195}," -c",[178,32106,32107],{"class":188}," pytorch",[178,32109,32104],{"class":195},[178,32111,32112],{"class":188}," nvidia\n",[19,32114,32115],{},"）：",[19,32117,32118],{},[2178,32119,32120],{"href":32120,"rel":32121},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[25619],[154,32123,32125],{"className":690,"code":32124,"language":692,"meta":160,"style":160},"# 对深度学习环境进行测试\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",[70,32126,32127,32132,32139,32144,32154,32169,32174,32184,32221,32228,32240,32256,32261,32271,32283,32293],{"__ignoreMap":160},[178,32128,32129],{"class":180,"line":181},[178,32130,32131],{"class":2008},"# 对深度学习环境进行测试\n",[178,32133,32134,32136],{"class":180,"line":263},[178,32135,700],{"class":699},[178,32137,32138],{"class":319}," torch\n",[178,32140,32141],{"class":180,"line":274},[178,32142,32143],{"class":2008},"# 查看cuda是否被激活\n",[178,32145,32146,32149,32151],{"class":180,"line":354},[178,32147,32148],{"class":319},"flag",[178,32150,330],{"class":699},[178,32152,32153],{"class":319},"torch.cuda.is_available()\n",[178,32155,32156,32158,32160,32163,32166],{"class":180,"line":364},[178,32157,1504],{"class":195},[178,32159,944],{"class":319},[178,32161,32162],{"class":188},"\"cuda:\"",[178,32164,32165],{"class":319},", flag)   ",[178,32167,32168],{"class":2008},"#返回true的话说明被激活\n",[178,32170,32171],{"class":180,"line":740},[178,32172,32173],{"class":2008},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[178,32175,32176,32179,32181],{"class":180,"line":746},[178,32177,32178],{"class":319},"ngpu",[178,32180,330],{"class":699},[178,32182,32183],{"class":195},"1\n",[178,32185,32186,32189,32191,32194,32197,32199,32202,32205,32208,32210,32212,32214,32216,32219],{"class":180,"line":752},[178,32187,32188],{"class":319},"device",[178,32190,330],{"class":699},[178,32192,32193],{"class":319},"torch.device(",[178,32195,32196],{"class":188},"\"cuda:0\"",[178,32198,3499],{"class":699},[178,32200,32201],{"class":319},"(torch.cuda.is_available() ",[178,32203,32204],{"class":699},"and",[178,32206,32207],{"class":319}," ngpu",[178,32209,2899],{"class":699},[178,32211,2133],{"class":195},[178,32213,15474],{"class":319},[178,32215,3496],{"class":699},[178,32217,32218],{"class":188}," \"cpu\"",[178,32220,863],{"class":319},[178,32222,32223,32225],{"class":180,"line":757},[178,32224,1504],{"class":195},[178,32226,32227],{"class":319},"(device)\n",[178,32229,32230,32232,32235,32237],{"class":180,"line":763},[178,32231,1504],{"class":195},[178,32233,32234],{"class":319},"(torch.cuda.get_device_name(",[178,32236,2133],{"class":195},[178,32238,32239],{"class":319},"))\n",[178,32241,32242,32244,32247,32249,32251,32253],{"class":180,"line":769},[178,32243,1504],{"class":195},[178,32245,32246],{"class":319},"(torch.rand(",[178,32248,2021],{"class":195},[178,32250,2318],{"class":319},[178,32252,2021],{"class":195},[178,32254,32255],{"class":319},").cuda())\n",[178,32257,32258],{"class":180,"line":774},[178,32259,32260],{"class":2008},"# 查看cuda和cudnn的版本\n",[178,32262,32263,32266,32268],{"class":180,"line":780},[178,32264,32265],{"class":319},"cuda_version",[178,32267,330],{"class":699},[178,32269,32270],{"class":319},"torch.version.cuda\n",[178,32272,32273,32275,32277,32280],{"class":180,"line":786},[178,32274,1504],{"class":195},[178,32276,944],{"class":319},[178,32278,32279],{"class":188},"\"cuda version\"",[178,32281,32282],{"class":319},",cuda_version)\n",[178,32284,32285,32288,32290],{"class":180,"line":792},[178,32286,32287],{"class":319},"cudnn_version",[178,32289,330],{"class":699},[178,32291,32292],{"class":319},"torch.backends.cudnn.version()\n",[178,32294,32295,32297,32299,32302],{"class":180,"line":798},[178,32296,1504],{"class":195},[178,32298,944],{"class":319},[178,32300,32301],{"class":188},"\"cudnn version\"",[178,32303,32304],{"class":319},",cudnn_version)\n",[19,32306,32307],{},[3269,32308],{"alt":160,"src":32309},"\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,32311,32312],{},"cuda:0 指的是一块显卡",[1853,32314,32315],{},"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":160,"searchDepth":263,"depth":263,"links":32317},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":32029,"description":25135},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32324,"title":32325,"body":32326,"description":25135,"extension":1880,"meta":52120,"navigation":721,"path":52121,"seo":52122,"stem":52123,"__hash__":52124},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32327,"toc":52114},[32328,32331,32335,32339,32342,32347,32352,32355,32360,32365,32370,32373,32377,32382,32386,32391,32394,32399,32402,32405,32408,32411,32416,32419,32424,32429,32434,32439,32442,32446,32449,32454,33055,33060,33063,33068,33071,33074,33534,33537,33540,33543,33546,35594,35597,35602,35607,36402,36405,36410,37188,37192,38851,38855,39569,39573,39577,39582,39587,39592,39595,39600,39605,39610,39615,39620,39624,39629,40911,40916,40919,40922,40925,41080,41083,41086,42302,42307,43002,43006,43010,43015,43020,43023,43028,43033,43038,43043,43048,43053,43058,43063,43068,43073,43078,43083,43088,43093,43098,43103,43108,43113,43118,43123,43128,43133,43138,43143,43148,43153,43158,43163,43168,43173,43177,43181,43184,44662,44666,46313,46317,47011,47015,47018,47021,47565,47568,47572,47575,48972,48976,48979,49557,51344,51348,51351,52111],[10,32329,32325],{"id":32330},"_2经典神经网络",[387,32332,32334],{"id":32333},"_21lenet与alexnet","2.1.LeNet与AlexNet",[23756,32336,32338],{"id":32337},"_211原理介绍","2.1.1.原理介绍",[19,32340,32341],{},"LeNet-5",[26,32343,32344],{},[29,32345,32346],{},"原理",[19,32348,32349],{},[3269,32350],{"alt":160,"src":32351},"\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,32353,32354],{},"B是batch批次；C是channel通道",[26,32356,32357],{"start":263},[29,32358,32359],{},"网络参数详细",[19,32361,32362],{},[3269,32363],{"alt":160,"src":32364},"\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,32366,32367],{},[3269,32368],{"alt":160,"src":32369},"\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,32371,32372],{},"AlexNet",[26,32374,32375],{},[29,32376,32346],{},[19,32378,32379],{},[3269,32380],{"alt":160,"src":32381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-006.png",[26,32383,32384],{"start":263},[29,32385,32359],{},[19,32387,32388],{},[3269,32389],{"alt":160,"src":32390},"\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,32392,32393],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,32395,32396],{},[3269,32397],{"alt":160,"src":32398},"\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,32400,32401],{},"数据处理中的图像增强操作:",[19,32403,32404],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,32406,32407],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,32409,32410],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,32412,32413],{},[3269,32414],{"alt":160,"src":32415},"\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,32417,32418],{},"提升网络精确度的方法：LRN正则化",[19,32420,32421],{},[3269,32422],{"alt":160,"src":32423},"\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,32425,32426],{},[3269,32427],{"alt":160,"src":32428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-011.png",[26,32430,32431],{"start":274},[29,32432,32433],{},"AlexNet的总结",[19,32435,32436],{},[3269,32437],{"alt":160,"src":32438},"\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,32440,32441],{},"比LeNet模型要深一丢丢",[23756,32443,32445],{"id":32444},"_212代码实现","2.1.2.代码实现",[19,32447,32448],{},"（1）LeNet",[26,32450,32451],{},[29,32452,32453],{},"模型搭建",[154,32455,32457],{"className":690,"code":32456,"language":692,"meta":160,"style":160},"# 导入库\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",[70,32458,32459,32464,32470,32475,32488,32493,32505,32509,32528,32533,32538,32549,32554,32573,32577,32582,32631,32643,32648,32677,32712,32739,32744,32756,32761,32781,32800,32819,32823,32828,32838,32855,32866,32881,32892,32903,32918,32933,32944,32951,32955,32968,32973,32996,33001,33006,33011,33015,33020,33025,33035],{"__ignoreMap":160},[178,32460,32461],{"class":180,"line":181},[178,32462,32463],{"class":2008},"# 导入库\n",[178,32465,32466,32468],{"class":180,"line":263},[178,32467,700],{"class":699},[178,32469,32138],{"class":319},[178,32471,32472],{"class":180,"line":274},[178,32473,32474],{"class":2008},"# 导入神经网络层\n",[178,32476,32477,32480,32483,32485],{"class":180,"line":354},[178,32478,32479],{"class":699},"from",[178,32481,32482],{"class":319}," torch ",[178,32484,700],{"class":699},[178,32486,32487],{"class":319}," nn\n",[178,32489,32490],{"class":180,"line":364},[178,32491,32492],{"class":2008},"# 导入展示神经网络参数的包\n",[178,32494,32495,32497,32500,32502],{"class":180,"line":740},[178,32496,32479],{"class":699},[178,32498,32499],{"class":319}," torchsummary ",[178,32501,700],{"class":699},[178,32503,32504],{"class":319}," summary\n",[178,32506,32507],{"class":180,"line":746},[178,32508,722],{"emptyLinePlaceholder":721},[178,32510,32511,32513,32516,32518,32521,32523,32526],{"class":180,"line":752},[178,32512,16453],{"class":699},[178,32514,32515],{"class":184}," LeNet",[178,32517,944],{"class":319},[178,32519,32520],{"class":184},"nn",[178,32522,2498],{"class":319},[178,32524,32525],{"class":184},"Module",[178,32527,1005],{"class":319},[178,32529,32530],{"class":180,"line":757},[178,32531,32532],{"class":2008},"    # 模型初始化:\n",[178,32534,32535],{"class":180,"line":763},[178,32536,32537],{"class":2008},"    # 定义一些网络层和激活函数\n",[178,32539,32540,32543,32546],{"class":180,"line":769},[178,32541,32542],{"class":699},"    def",[178,32544,32545],{"class":195}," __init__",[178,32547,32548],{"class":319},"(self):\n",[178,32550,32551],{"class":180,"line":774},[178,32552,32553],{"class":2008},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[178,32555,32556,32559,32562,32565,32568,32571],{"class":180,"line":780},[178,32557,32558],{"class":195},"        super",[178,32560,32561],{"class":319},"(LeNet,",[178,32563,32564],{"class":195},"self",[178,32566,32567],{"class":319},").",[178,32569,32570],{"class":195},"__init__",[178,32572,3760],{"class":319},[178,32574,32575],{"class":180,"line":786},[178,32576,722],{"emptyLinePlaceholder":721},[178,32578,32579],{"class":180,"line":792},[178,32580,32581],{"class":2008},"        # 定义网络层\n",[178,32583,32584,32587,32590,32592,32595,32598,32600,32602,32604,32607,32609,32611,32613,32616,32618,32620,32622,32625,32627,32629],{"class":180,"line":798},[178,32585,32586],{"class":195},"        self",[178,32588,32589],{"class":319},".c1",[178,32591,330],{"class":699},[178,32593,32594],{"class":319},"nn.Conv2d(",[178,32596,32597],{"class":6985},"in_channels",[178,32599,330],{"class":699},[178,32601,1665],{"class":195},[178,32603,2318],{"class":319},[178,32605,32606],{"class":6985},"out_channels",[178,32608,330],{"class":699},[178,32610,2284],{"class":195},[178,32612,2318],{"class":319},[178,32614,32615],{"class":6985},"kernel_size",[178,32617,330],{"class":699},[178,32619,2259],{"class":195},[178,32621,2318],{"class":319},[178,32623,32624],{"class":6985},"padding",[178,32626,330],{"class":699},[178,32628,1669],{"class":195},[178,32630,863],{"class":319},[178,32632,32633,32635,32638,32640],{"class":180,"line":804},[178,32634,32586],{"class":195},[178,32636,32637],{"class":319},".sig",[178,32639,330],{"class":699},[178,32641,32642],{"class":319},"nn.Sigmoid()\n",[178,32644,32645],{"class":180,"line":810},[178,32646,32647],{"class":2008},"        # 定义池化\n",[178,32649,32650,32652,32655,32657,32660,32662,32664,32666,32668,32671,32673,32675],{"class":180,"line":816},[178,32651,32586],{"class":195},[178,32653,32654],{"class":319},".s2",[178,32656,330],{"class":699},[178,32658,32659],{"class":319},"nn.AvgPool2d(",[178,32661,32615],{"class":6985},[178,32663,330],{"class":699},[178,32665,1669],{"class":195},[178,32667,2318],{"class":319},[178,32669,32670],{"class":6985},"stride",[178,32672,330],{"class":699},[178,32674,1669],{"class":195},[178,32676,863],{"class":319},[178,32678,32679,32681,32684,32686,32688,32690,32692,32694,32696,32698,32700,32702,32704,32706,32708,32710],{"class":180,"line":822},[178,32680,32586],{"class":195},[178,32682,32683],{"class":319},".c3",[178,32685,330],{"class":699},[178,32687,32594],{"class":319},[178,32689,32597],{"class":6985},[178,32691,330],{"class":699},[178,32693,2284],{"class":195},[178,32695,2318],{"class":319},[178,32697,32606],{"class":6985},[178,32699,330],{"class":699},[178,32701,2541],{"class":195},[178,32703,2318],{"class":319},[178,32705,32615],{"class":6985},[178,32707,330],{"class":699},[178,32709,2259],{"class":195},[178,32711,863],{"class":319},[178,32713,32714,32716,32719,32721,32723,32725,32727,32729,32731,32733,32735,32737],{"class":180,"line":827},[178,32715,32586],{"class":195},[178,32717,32718],{"class":319},".s4",[178,32720,330],{"class":699},[178,32722,32659],{"class":319},[178,32724,32615],{"class":6985},[178,32726,330],{"class":699},[178,32728,1669],{"class":195},[178,32730,2318],{"class":319},[178,32732,32670],{"class":6985},[178,32734,330],{"class":699},[178,32736,1669],{"class":195},[178,32738,863],{"class":319},[178,32740,32741],{"class":180,"line":832},[178,32742,32743],{"class":2008},"        # 定义平展层\n",[178,32745,32746,32748,32751,32753],{"class":180,"line":850},[178,32747,32586],{"class":195},[178,32749,32750],{"class":319},".flatten",[178,32752,330],{"class":699},[178,32754,32755],{"class":319},"nn.Flatten()\n",[178,32757,32758],{"class":180,"line":866},[178,32759,32760],{"class":2008},"        # 定义全连接层\n",[178,32762,32763,32765,32768,32770,32773,32775,32777,32779],{"class":180,"line":877},[178,32764,32586],{"class":195},[178,32766,32767],{"class":319},".f5",[178,32769,330],{"class":699},[178,32771,32772],{"class":319},"nn.Linear(",[178,32774,5759],{"class":195},[178,32776,2318],{"class":319},[178,32778,2757],{"class":195},[178,32780,863],{"class":319},[178,32782,32783,32785,32788,32790,32792,32794,32796,32798],{"class":180,"line":882},[178,32784,32586],{"class":195},[178,32786,32787],{"class":319},".f6",[178,32789,330],{"class":699},[178,32791,32772],{"class":319},[178,32793,2757],{"class":195},[178,32795,2318],{"class":319},[178,32797,2651],{"class":195},[178,32799,863],{"class":319},[178,32801,32802,32804,32807,32809,32811,32813,32815,32817],{"class":180,"line":898},[178,32803,32586],{"class":195},[178,32805,32806],{"class":319},".f7",[178,32808,330],{"class":699},[178,32810,32772],{"class":319},[178,32812,2651],{"class":195},[178,32814,2318],{"class":319},[178,32816,2386],{"class":195},[178,32818,863],{"class":319},[178,32820,32821],{"class":180,"line":914},[178,32822,722],{"emptyLinePlaceholder":721},[178,32824,32825],{"class":180,"line":919},[178,32826,32827],{"class":2008},"    # 写工具->写前向传播\n",[178,32829,32830,32832,32835],{"class":180,"line":935},[178,32831,32542],{"class":699},[178,32833,32834],{"class":184}," forward",[178,32836,32837],{"class":319},"(self,x):\n",[178,32839,32840,32843,32845,32847,32850,32852],{"class":180,"line":952},[178,32841,32842],{"class":319},"        x",[178,32844,330],{"class":699},[178,32846,32564],{"class":195},[178,32848,32849],{"class":319},".sig(",[178,32851,32564],{"class":195},[178,32853,32854],{"class":319},".c1(x))\n",[178,32856,32857,32859,32861,32863],{"class":180,"line":966},[178,32858,32842],{"class":319},[178,32860,330],{"class":699},[178,32862,32564],{"class":195},[178,32864,32865],{"class":319},".s2(x)\n",[178,32867,32868,32870,32872,32874,32876,32878],{"class":180,"line":980},[178,32869,32842],{"class":319},[178,32871,330],{"class":699},[178,32873,32564],{"class":195},[178,32875,32849],{"class":319},[178,32877,32564],{"class":195},[178,32879,32880],{"class":319},".c3(x))\n",[178,32882,32883,32885,32887,32889],{"class":180,"line":985},[178,32884,32842],{"class":319},[178,32886,330],{"class":699},[178,32888,32564],{"class":195},[178,32890,32891],{"class":319},".s4(x)\n",[178,32893,32894,32896,32898,32900],{"class":180,"line":1008},[178,32895,32842],{"class":319},[178,32897,330],{"class":699},[178,32899,32564],{"class":195},[178,32901,32902],{"class":319},".flatten(x)\n",[178,32904,32905,32907,32909,32911,32913,32915],{"class":180,"line":1014},[178,32906,32842],{"class":319},[178,32908,330],{"class":699},[178,32910,32564],{"class":195},[178,32912,32849],{"class":319},[178,32914,32564],{"class":195},[178,32916,32917],{"class":319},".f5(x))\n",[178,32919,32920,32922,32924,32926,32928,32930],{"class":180,"line":1019},[178,32921,32842],{"class":319},[178,32923,330],{"class":699},[178,32925,32564],{"class":195},[178,32927,32849],{"class":319},[178,32929,32564],{"class":195},[178,32931,32932],{"class":319},".f6(x))\n",[178,32934,32935,32937,32939,32941],{"class":180,"line":1033},[178,32936,32842],{"class":319},[178,32938,330],{"class":699},[178,32940,32564],{"class":195},[178,32942,32943],{"class":319},".f7(x)\n",[178,32945,32946,32948],{"class":180,"line":1046},[178,32947,16511],{"class":699},[178,32949,32950],{"class":319}," x\n",[178,32952,32953],{"class":180,"line":1059},[178,32954,722],{"emptyLinePlaceholder":721},[178,32956,32957,32959,32961,32963,32966],{"class":180,"line":1072},[178,32958,1085],{"class":699},[178,32960,1088],{"class":195},[178,32962,4725],{"class":699},[178,32964,32965],{"class":188},"\"__main__\"",[178,32967,847],{"class":319},[178,32969,32970],{"class":180,"line":1077},[178,32971,32972],{"class":2008},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[178,32974,32975,32978,32980,32982,32985,32987,32990,32992,32994],{"class":180,"line":1082},[178,32976,32977],{"class":319},"    device",[178,32979,330],{"class":699},[178,32981,32193],{"class":319},[178,32983,32984],{"class":188},"\"cuda\"",[178,32986,3499],{"class":699},[178,32988,32989],{"class":319}," torch.cuda.is_available() ",[178,32991,3496],{"class":699},[178,32993,32218],{"class":188},[178,32995,863],{"class":319},[178,32997,32998],{"class":180,"line":1099},[178,32999,33000],{"class":2008},"    # 如果就是想指定用cpu用下方代码:\n",[178,33002,33003],{"class":180,"line":9806},[178,33004,33005],{"class":2008},"    # device=\"cpu\"\n",[178,33007,33008],{"class":180,"line":9818},[178,33009,33010],{"class":2008},"    # print(device)\n",[178,33012,33013],{"class":180,"line":11477},[178,33014,722],{"emptyLinePlaceholder":721},[178,33016,33017],{"class":180,"line":11502},[178,33018,33019],{"class":2008},"    # 实例化模型\n",[178,33021,33022],{"class":180,"line":11525},[178,33023,33024],{"class":2008},"    # 将模型放到设备中去运行\n",[178,33026,33027,33030,33032],{"class":180,"line":11549},[178,33028,33029],{"class":319},"    model",[178,33031,330],{"class":699},[178,33033,33034],{"class":319},"LeNet().to(device)\n",[178,33036,33037,33039,33042,33044,33046,33048,33050,33052],{"class":180,"line":11554},[178,33038,1022],{"class":195},[178,33040,33041],{"class":319},"(summary(model,(",[178,33043,1665],{"class":195},[178,33045,2318],{"class":319},[178,33047,2841],{"class":195},[178,33049,2318],{"class":319},[178,33051,2841],{"class":195},[178,33053,33054],{"class":319},")))\n",[19,33056,33057],{},[3269,33058],{"alt":160,"src":33059},"\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,33061,33062],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[26,33064,33065],{"start":263},[29,33066,33067],{},"训练",[19,33069,33070],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,33072,33073],{},"在训练之前可以将数据展示看一下",[154,33075,33077],{"className":690,"code":33076,"language":692,"meta":160,"style":160},"# 建立画图的函数，用于展示数据\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",[70,33078,33079,33084,33089,33101,33113,33123,33128,33140,33145,33157,33162,33174,33178,33182,33203,33215,33220,33240,33251,33255,33260,33278,33289,33294,33305,33310,33321,33325,33330,33345,33358,33363,33368,33381,33394,33407,33412,33416,33421,33441,33458,33478,33491,33504,33514,33529],{"__ignoreMap":160},[178,33080,33081],{"class":180,"line":181},[178,33082,33083],{"class":2008},"# 建立画图的函数，用于展示数据\n",[178,33085,33086],{"class":180,"line":263},[178,33087,33088],{"class":2008},"# torchvision中包含很多内置的数据集\n",[178,33090,33091,33093,33096,33098],{"class":180,"line":274},[178,33092,32479],{"class":699},[178,33094,33095],{"class":319}," sklearn.externals.array_api_compat.torch ",[178,33097,700],{"class":699},[178,33099,33100],{"class":319}," squeeze\n",[178,33102,33103,33105,33108,33110],{"class":180,"line":354},[178,33104,32479],{"class":699},[178,33106,33107],{"class":319}," torchvision.datasets ",[178,33109,700],{"class":699},[178,33111,33112],{"class":319}," FashionMNIST\n",[178,33114,33115,33117,33119,33121],{"class":180,"line":364},[178,33116,700],{"class":699},[178,33118,710],{"class":319},[178,33120,713],{"class":699},[178,33122,716],{"class":319},[178,33124,33125],{"class":180,"line":740},[178,33126,33127],{"class":2008},"# 引入处理数据集的包\n",[178,33129,33130,33132,33135,33137],{"class":180,"line":746},[178,33131,32479],{"class":699},[178,33133,33134],{"class":319}," torchvision ",[178,33136,700],{"class":699},[178,33138,33139],{"class":319}," transforms\n",[178,33141,33142],{"class":180,"line":752},[178,33143,33144],{"class":2008},"# 从torch库中引入数据处理的包\n",[178,33146,33147,33149,33152,33154],{"class":180,"line":757},[178,33148,700],{"class":699},[178,33150,33151],{"class":319}," torch.utils.data ",[178,33153,713],{"class":699},[178,33155,33156],{"class":319}," Data\n",[178,33158,33159],{"class":180,"line":763},[178,33160,33161],{"class":2008},"# 导入画图的库\n",[178,33163,33164,33166,33169,33171],{"class":180,"line":769},[178,33165,700],{"class":699},[178,33167,33168],{"class":319}," matplotlib.pyplot ",[178,33170,713],{"class":699},[178,33172,33173],{"class":319}," plt\n",[178,33175,33176],{"class":180,"line":774},[178,33177,722],{"emptyLinePlaceholder":721},[178,33179,33180],{"class":180,"line":780},[178,33181,722],{"emptyLinePlaceholder":721},[178,33183,33184,33187,33189,33192,33195,33197,33200],{"class":180,"line":786},[178,33185,33186],{"class":319},"train_data",[178,33188,330],{"class":699},[178,33190,33191],{"class":319},"FashionMNIST(",[178,33193,33194],{"class":6985},"root",[178,33196,330],{"class":699},[178,33198,33199],{"class":188},"'.\u002Fdata'",[178,33201,33202],{"class":319},",\n",[178,33204,33205,33208,33210,33213],{"class":180,"line":792},[178,33206,33207],{"class":6985},"                        train",[178,33209,330],{"class":699},[178,33211,33212],{"class":195},"True",[178,33214,33202],{"class":319},[178,33216,33217],{"class":180,"line":798},[178,33218,33219],{"class":2008},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[178,33221,33222,33225,33227,33230,33232,33234,33237],{"class":180,"line":804},[178,33223,33224],{"class":6985},"                        transform",[178,33226,330],{"class":699},[178,33228,33229],{"class":319},"transforms.Compose([transforms.Resize(",[178,33231,554],{"class":6985},[178,33233,330],{"class":699},[178,33235,33236],{"class":195},"224",[178,33238,33239],{"class":319},"),transforms.ToTensor()]),\n",[178,33241,33242,33245,33247,33249],{"class":180,"line":810},[178,33243,33244],{"class":6985},"                        download",[178,33246,330],{"class":699},[178,33248,33212],{"class":195},[178,33250,863],{"class":319},[178,33252,33253],{"class":180,"line":816},[178,33254,722],{"emptyLinePlaceholder":721},[178,33256,33257],{"class":180,"line":822},[178,33258,33259],{"class":2008},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[178,33261,33262,33265,33267,33270,33273,33275],{"class":180,"line":827},[178,33263,33264],{"class":319},"train_loader",[178,33266,330],{"class":699},[178,33268,33269],{"class":319},"Data.DataLoader(",[178,33271,33272],{"class":6985},"dataset",[178,33274,330],{"class":699},[178,33276,33277],{"class":319},"train_data,\n",[178,33279,33280,33283,33285,33287],{"class":180,"line":832},[178,33281,33282],{"class":6985},"                             batch_size",[178,33284,330],{"class":699},[178,33286,2145],{"class":195},[178,33288,33202],{"class":319},[178,33290,33291],{"class":180,"line":850},[178,33292,33293],{"class":2008},"                             # 数据是否打乱\n",[178,33295,33296,33299,33301,33303],{"class":180,"line":866},[178,33297,33298],{"class":6985},"                             shuffle",[178,33300,330],{"class":699},[178,33302,33212],{"class":195},[178,33304,33202],{"class":319},[178,33306,33307],{"class":180,"line":877},[178,33308,33309],{"class":2008},"                             # 规定加载数据的进程\n",[178,33311,33312,33315,33317,33319],{"class":180,"line":882},[178,33313,33314],{"class":6985},"                             num_workers",[178,33316,330],{"class":699},[178,33318,2133],{"class":195},[178,33320,863],{"class":319},[178,33322,33323],{"class":180,"line":898},[178,33324,722],{"emptyLinePlaceholder":721},[178,33326,33327],{"class":180,"line":914},[178,33328,33329],{"class":2008},"# 获得一个batch的数据\n",[178,33331,33332,33334,33337,33339,33342],{"class":180,"line":919},[178,33333,1474],{"class":699},[178,33335,33336],{"class":319}," step,(b_x,b_y) ",[178,33338,994],{"class":699},[178,33340,33341],{"class":195}," enumerate",[178,33343,33344],{"class":319},"(train_loader):\n",[178,33346,33347,33349,33352,33354,33356],{"class":180,"line":935},[178,33348,922],{"class":699},[178,33350,33351],{"class":319}," step ",[178,33353,2899],{"class":699},[178,33355,930],{"class":195},[178,33357,847],{"class":319},[178,33359,33360],{"class":180,"line":952},[178,33361,33362],{"class":699},"        break\n",[178,33364,33365],{"class":180,"line":966},[178,33366,33367],{"class":2008},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[178,33369,33370,33373,33375,33378],{"class":180,"line":980},[178,33371,33372],{"class":319},"batch_x",[178,33374,330],{"class":699},[178,33376,33377],{"class":319},"b_x.squeeze().numpy()  ",[178,33379,33380],{"class":2008},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[178,33382,33383,33386,33388,33391],{"class":180,"line":985},[178,33384,33385],{"class":319},"batch_y",[178,33387,330],{"class":699},[178,33389,33390],{"class":319},"b_y.numpy()   ",[178,33392,33393],{"class":2008},"#将张量转换成功numpy数组\n",[178,33395,33396,33399,33401,33404],{"class":180,"line":1008},[178,33397,33398],{"class":319},"class_label",[178,33400,330],{"class":699},[178,33402,33403],{"class":319},"train_data.classes  ",[178,33405,33406],{"class":2008},"#训练集标签\n",[178,33408,33409],{"class":180,"line":1014},[178,33410,33411],{"class":2008},"# print(class_label)\n",[178,33413,33414],{"class":180,"line":1019},[178,33415,722],{"emptyLinePlaceholder":721},[178,33417,33418],{"class":180,"line":1033},[178,33419,33420],{"class":2008},"# 可视化一个batch的图像\n",[178,33422,33423,33426,33429,33431,33433,33435,33437,33439],{"class":180,"line":1046},[178,33424,33425],{"class":319},"plt.figure(",[178,33427,33428],{"class":6985},"figsize",[178,33430,330],{"class":699},[178,33432,944],{"class":319},[178,33434,2438],{"class":195},[178,33436,2318],{"class":319},[178,33438,2259],{"class":195},[178,33440,32239],{"class":319},[178,33442,33443,33445,33448,33450,33453,33455],{"class":180,"line":1059},[178,33444,1474],{"class":699},[178,33446,33447],{"class":319}," ii ",[178,33449,994],{"class":699},[178,33451,33452],{"class":319}," np.arange(",[178,33454,9127],{"class":195},[178,33456,33457],{"class":319},"(batch_y)):\n",[178,33459,33460,33463,33465,33467,33469,33472,33474,33476],{"class":180,"line":1072},[178,33461,33462],{"class":319},"    plt.subplot(",[178,33464,2233],{"class":195},[178,33466,2318],{"class":319},[178,33468,2541],{"class":195},[178,33470,33471],{"class":319},",ii ",[178,33473,2421],{"class":699},[178,33475,26870],{"class":195},[178,33477,863],{"class":319},[178,33479,33480,33483,33486,33488],{"class":180,"line":1077},[178,33481,33482],{"class":319},"    plt.imshow(batch_x[ii,:,:],",[178,33484,33485],{"class":6985},"cmap",[178,33487,330],{"class":699},[178,33489,33490],{"class":319},"plt.cm.gray)\n",[178,33492,33493,33496,33498,33500,33502],{"class":180,"line":1082},[178,33494,33495],{"class":319},"    plt.title(class_label[batch_y[ii]],",[178,33497,554],{"class":6985},[178,33499,330],{"class":699},[178,33501,2386],{"class":195},[178,33503,863],{"class":319},[178,33505,33506,33509,33512],{"class":180,"line":1099},[178,33507,33508],{"class":319},"    plt.axis(",[178,33510,33511],{"class":188},"\"off\"",[178,33513,863],{"class":319},[178,33515,33516,33519,33522,33524,33527],{"class":180,"line":9806},[178,33517,33518],{"class":319},"    plt.subplots_adjust(",[178,33520,33521],{"class":6985},"wspace",[178,33523,330],{"class":699},[178,33525,33526],{"class":195},"0.05",[178,33528,863],{"class":319},[178,33530,33531],{"class":180,"line":9818},[178,33532,33533],{"class":319},"plt.show()\n",[19,33535,33536],{},"用matplotlib进行展示的过程可以后续再补",[19,33538,33539],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,33541,33542],{},"训练次数就是按照批次过整个训练集数据的次数",[19,33544,33545],{},"模型训练：",[154,33547,33549],{"className":690,"code":33548,"language":692,"meta":160,"style":160},"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",[70,33550,33551,33558,33565,33569,33581,33587,33598,33608,33618,33628,33638,33643,33655,33665,33669,33673,33678,33688,33701,33712,33729,33740,33778,33794,33806,33817,33822,33833,33849,33860,33871,33882,33889,33893,33898,33903,33907,33912,33922,33943,33947,33951,33956,33961,33966,33986,33990,33995,34005,34009,34014,34023,34028,34033,34038,34048,34052,34056,34061,34066,34076,34081,34091,34096,34105,34110,34119,34124,34133,34137,34142,34152,34156,34160,34165,34179,34207,34222,34226,34231,34236,34245,34250,34259,34264,34273,34278,34287,34292,34301,34306,34315,34320,34333,34338,34348,34353,34363,34369,34375,34381,34387,34398,34404,34424,34430,34441,34447,34453,34459,34465,34471,34477,34483,34503,34509,34525,34531,34545,34551,34566,34572,34581,34587,34596,34602,34608,34617,34623,34634,34640,34659,34665,34676,34682,34702,34718,34724,34738,34744,34750,34761,34767,34773,34783,34789,34800,34806,34816,34821,34827,34876,34923,34928,34934,34953,34959,34979,34985,34991,35001,35006,35012,35028,35073,35079,35085,35091,35102,35108,35114,35120,35138,35152,35161,35170,35179,35188,35194,35200,35208,35213,35219,35230,35236,35256,35262,35268,35274,35291,35297,35303,35309,35315,35321,35348,35372,35378,35384,35390,35401,35412,35418,35435,35458,35481,35487,35492,35501,35511,35517,35522,35528,35541,35547,35558,35569,35588],{"__ignoreMap":160},[178,33552,33553,33555],{"class":180,"line":181},[178,33554,700],{"class":699},[178,33556,33557],{"class":319}," copy\n",[178,33559,33560,33562],{"class":180,"line":263},[178,33561,700],{"class":699},[178,33563,33564],{"class":319}," time\n",[178,33566,33567],{"class":180,"line":274},[178,33568,722],{"emptyLinePlaceholder":721},[178,33570,33571,33573,33576,33578],{"class":180,"line":354},[178,33572,700],{"class":699},[178,33574,33575],{"class":319}," pandas ",[178,33577,713],{"class":699},[178,33579,33580],{"class":319}," pd\n",[178,33582,33583,33585],{"class":180,"line":364},[178,33584,700],{"class":699},[178,33586,32138],{"class":319},[178,33588,33589,33591,33593,33595],{"class":180,"line":740},[178,33590,32479],{"class":699},[178,33592,33151],{"class":319},[178,33594,700],{"class":699},[178,33596,33597],{"class":319}," Dataset\n",[178,33599,33600,33602,33604,33606],{"class":180,"line":746},[178,33601,32479],{"class":699},[178,33603,33107],{"class":319},[178,33605,700],{"class":699},[178,33607,33112],{"class":319},[178,33609,33610,33612,33614,33616],{"class":180,"line":752},[178,33611,32479],{"class":699},[178,33613,33134],{"class":319},[178,33615,700],{"class":699},[178,33617,33139],{"class":319},[178,33619,33620,33622,33624,33626],{"class":180,"line":757},[178,33621,700],{"class":699},[178,33623,33151],{"class":319},[178,33625,713],{"class":699},[178,33627,33156],{"class":319},[178,33629,33630,33632,33634,33636],{"class":180,"line":763},[178,33631,700],{"class":699},[178,33633,33168],{"class":319},[178,33635,713],{"class":699},[178,33637,33173],{"class":319},[178,33639,33640],{"class":180,"line":769},[178,33641,33642],{"class":2008},"# 导入模型\n",[178,33644,33645,33647,33650,33652],{"class":180,"line":774},[178,33646,32479],{"class":699},[178,33648,33649],{"class":319}," model ",[178,33651,700],{"class":699},[178,33653,33654],{"class":319}," LeNet\n",[178,33656,33657,33659,33661,33663],{"class":180,"line":780},[178,33658,32479],{"class":699},[178,33660,32482],{"class":319},[178,33662,700],{"class":699},[178,33664,32487],{"class":319},[178,33666,33667],{"class":180,"line":786},[178,33668,722],{"emptyLinePlaceholder":721},[178,33670,33671],{"class":180,"line":792},[178,33672,722],{"emptyLinePlaceholder":721},[178,33674,33675],{"class":180,"line":798},[178,33676,33677],{"class":2008},"# 处理训练集与验证集函数--->划分数据集\n",[178,33679,33680,33682,33685],{"class":180,"line":804},[178,33681,835],{"class":699},[178,33683,33684],{"class":184}," train_val_data_process",[178,33686,33687],{"class":319},"():\n",[178,33689,33690,33693,33695,33697,33699],{"class":180,"line":810},[178,33691,33692],{"class":319},"    train_data",[178,33694,330],{"class":699},[178,33696,33191],{"class":319},[178,33698,33199],{"class":188},[178,33700,33202],{"class":319},[178,33702,33703,33706,33708,33710],{"class":180,"line":816},[178,33704,33705],{"class":6985},"                            train",[178,33707,330],{"class":699},[178,33709,33212],{"class":195},[178,33711,33202],{"class":319},[178,33713,33714,33717,33719,33721,33723,33725,33727],{"class":180,"line":822},[178,33715,33716],{"class":6985},"                            transform",[178,33718,330],{"class":699},[178,33720,33229],{"class":319},[178,33722,554],{"class":6985},[178,33724,330],{"class":699},[178,33726,2841],{"class":195},[178,33728,33239],{"class":319},[178,33730,33731,33734,33736,33738],{"class":180,"line":827},[178,33732,33733],{"class":6985},"                            download",[178,33735,330],{"class":699},[178,33737,33212],{"class":195},[178,33739,863],{"class":319},[178,33741,33742,33745,33747,33750,33753,33755,33758,33760,33762,33765,33767,33769,33771,33773,33775],{"class":180,"line":832},[178,33743,33744],{"class":319},"    train_data,val_data",[178,33746,330],{"class":699},[178,33748,33749],{"class":319},"Data.random_split(train_data,[",[178,33751,33752],{"class":195},"round",[178,33754,944],{"class":319},[178,33756,33757],{"class":195},"0.8",[178,33759,2395],{"class":699},[178,33761,9127],{"class":195},[178,33763,33764],{"class":319},"(train_data)),",[178,33766,33752],{"class":195},[178,33768,944],{"class":319},[178,33770,648],{"class":195},[178,33772,2395],{"class":699},[178,33774,9127],{"class":195},[178,33776,33777],{"class":319},"(train_data))])\n",[178,33779,33780,33783,33785,33788,33790,33792],{"class":180,"line":850},[178,33781,33782],{"class":319},"    train_dataloader ",[178,33784,330],{"class":699},[178,33786,33787],{"class":319}," Data.DataLoader(",[178,33789,33272],{"class":6985},[178,33791,330],{"class":699},[178,33793,33277],{"class":319},[178,33795,33796,33799,33801,33804],{"class":180,"line":866},[178,33797,33798],{"class":6985},"                                       batch_size",[178,33800,330],{"class":699},[178,33802,33803],{"class":195},"128",[178,33805,33202],{"class":319},[178,33807,33808,33811,33813,33815],{"class":180,"line":877},[178,33809,33810],{"class":6985},"                                       shuffle",[178,33812,330],{"class":699},[178,33814,33212],{"class":195},[178,33816,33202],{"class":319},[178,33818,33819],{"class":180,"line":882},[178,33820,33821],{"class":2008},"                                       # 规定8个进程\n",[178,33823,33824,33827,33829,33831],{"class":180,"line":898},[178,33825,33826],{"class":6985},"                                       num_workers",[178,33828,330],{"class":699},[178,33830,2335],{"class":195},[178,33832,863],{"class":319},[178,33834,33835,33838,33840,33842,33844,33846],{"class":180,"line":914},[178,33836,33837],{"class":319},"    val_dataloader",[178,33839,330],{"class":699},[178,33841,33269],{"class":319},[178,33843,33272],{"class":6985},[178,33845,330],{"class":699},[178,33847,33848],{"class":319},"val_data,\n",[178,33850,33851,33854,33856,33858],{"class":180,"line":919},[178,33852,33853],{"class":6985},"                                   batch_size",[178,33855,330],{"class":699},[178,33857,33803],{"class":195},[178,33859,33202],{"class":319},[178,33861,33862,33865,33867,33869],{"class":180,"line":935},[178,33863,33864],{"class":6985},"                                   shuffle",[178,33866,330],{"class":699},[178,33868,33212],{"class":195},[178,33870,33202],{"class":319},[178,33872,33873,33876,33878,33880],{"class":180,"line":952},[178,33874,33875],{"class":6985},"                                   num_workers",[178,33877,330],{"class":699},[178,33879,2335],{"class":195},[178,33881,863],{"class":319},[178,33883,33884,33886],{"class":180,"line":966},[178,33885,5862],{"class":699},[178,33887,33888],{"class":319}," train_dataloader,val_dataloader\n",[178,33890,33891],{"class":180,"line":980},[178,33892,722],{"emptyLinePlaceholder":721},[178,33894,33895],{"class":180,"line":985},[178,33896,33897],{"class":2008},"# 验证是否出错\n",[178,33899,33900],{"class":180,"line":1008},[178,33901,33902],{"class":2008},"# train_val_data_process()\n",[178,33904,33905],{"class":180,"line":1014},[178,33906,722],{"emptyLinePlaceholder":721},[178,33908,33909],{"class":180,"line":1019},[178,33910,33911],{"class":2008},"# 定义模型训练函数\n",[178,33913,33914,33916,33919],{"class":180,"line":1033},[178,33915,835],{"class":699},[178,33917,33918],{"class":184}," train_model_process",[178,33920,33921],{"class":319},"(model,train_dataloader,val_dataloader,num_epochs):\n",[178,33923,33924,33926,33928,33930,33932,33934,33936,33938,33941],{"class":180,"line":1046},[178,33925,32977],{"class":319},[178,33927,330],{"class":699},[178,33929,32193],{"class":319},[178,33931,32984],{"class":188},[178,33933,3499],{"class":699},[178,33935,32989],{"class":319},[178,33937,3496],{"class":699},[178,33939,33940],{"class":188}," 'cpu'",[178,33942,863],{"class":319},[178,33944,33945],{"class":180,"line":1059},[178,33946,722],{"emptyLinePlaceholder":721},[178,33948,33949],{"class":180,"line":1072},[178,33950,722],{"emptyLinePlaceholder":721},[178,33952,33953],{"class":180,"line":1077},[178,33954,33955],{"class":2008},"    # 定义优化器\n",[178,33957,33958],{"class":180,"line":1082},[178,33959,33960],{"class":2008},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[178,33962,33963],{"class":180,"line":1099},[178,33964,33965],{"class":2008},"    # lr为学习率\n",[178,33967,33968,33971,33973,33976,33979,33981,33984],{"class":180,"line":9806},[178,33969,33970],{"class":319},"    optimizer",[178,33972,330],{"class":699},[178,33974,33975],{"class":319},"torch.optim.Adam(model.parameters(),",[178,33977,33978],{"class":6985},"lr",[178,33980,330],{"class":699},[178,33982,33983],{"class":195},"0.001",[178,33985,863],{"class":319},[178,33987,33988],{"class":180,"line":9818},[178,33989,722],{"emptyLinePlaceholder":721},[178,33991,33992],{"class":180,"line":11477},[178,33993,33994],{"class":2008},"    # 定义损失函数使用交叉熵损失函数\n",[178,33996,33997,34000,34002],{"class":180,"line":11502},[178,33998,33999],{"class":319},"    criterion",[178,34001,330],{"class":699},[178,34003,34004],{"class":319},"nn.CrossEntropyLoss()\n",[178,34006,34007],{"class":180,"line":11525},[178,34008,722],{"emptyLinePlaceholder":721},[178,34010,34011],{"class":180,"line":11549},[178,34012,34013],{"class":2008},"    # 将模型放到GPU中进行训练\n",[178,34015,34016,34018,34020],{"class":180,"line":11554},[178,34017,33029],{"class":319},[178,34019,330],{"class":699},[178,34021,34022],{"class":319},"model.to(device)\n",[178,34024,34025],{"class":180,"line":11559},[178,34026,34027],{"class":2008},"    # 复制当前模型的参数\n",[178,34029,34030],{"class":180,"line":11564},[178,34031,34032],{"class":2008},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[178,34034,34035],{"class":180,"line":11573},[178,34036,34037],{"class":2008},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[178,34039,34040,34043,34045],{"class":180,"line":11578},[178,34041,34042],{"class":319},"    best_model_wts",[178,34044,330],{"class":699},[178,34046,34047],{"class":319},"copy.deepcopy(model.state_dict())\n",[178,34049,34050],{"class":180,"line":11584},[178,34051,722],{"emptyLinePlaceholder":721},[178,34053,34054],{"class":180,"line":11605},[178,34055,722],{"emptyLinePlaceholder":721},[178,34057,34058],{"class":180,"line":11611},[178,34059,34060],{"class":2008},"    # 初始化参数\n",[178,34062,34063],{"class":180,"line":11625},[178,34064,34065],{"class":2008},"    # 最高准确度\n",[178,34067,34068,34071,34073],{"class":180,"line":11631},[178,34069,34070],{"class":319},"    best_acc",[178,34072,330],{"class":699},[178,34074,34075],{"class":195},"0.0\n",[178,34077,34078],{"class":180,"line":11658},[178,34079,34080],{"class":2008},"    # 训练集损失列表\n",[178,34082,34083,34086,34088],{"class":180,"line":11667},[178,34084,34085],{"class":319},"    train_loss_all",[178,34087,330],{"class":699},[178,34089,34090],{"class":319},"[]\n",[178,34092,34093],{"class":180,"line":11673},[178,34094,34095],{"class":2008},"    # 验证集函数列表\n",[178,34097,34098,34101,34103],{"class":180,"line":11681},[178,34099,34100],{"class":319},"    val_loss_all",[178,34102,330],{"class":699},[178,34104,34090],{"class":319},[178,34106,34107],{"class":180,"line":11686},[178,34108,34109],{"class":2008},"    # 训练集准确度列表\n",[178,34111,34112,34115,34117],{"class":180,"line":18362},[178,34113,34114],{"class":319},"    train_acc_all",[178,34116,330],{"class":699},[178,34118,34090],{"class":319},[178,34120,34121],{"class":180,"line":18368},[178,34122,34123],{"class":2008},"    # 验证集准确度列表\n",[178,34125,34126,34129,34131],{"class":180,"line":18391},[178,34127,34128],{"class":319},"    val_acc_all",[178,34130,330],{"class":699},[178,34132,34090],{"class":319},[178,34134,34135],{"class":180,"line":18397},[178,34136,722],{"emptyLinePlaceholder":721},[178,34138,34139],{"class":180,"line":18420},[178,34140,34141],{"class":2008},"    # 保存当前时间--->方便看每轮训练的时间\n",[178,34143,34144,34147,34149],{"class":180,"line":18434},[178,34145,34146],{"class":319},"    since",[178,34148,330],{"class":699},[178,34150,34151],{"class":319},"time.time()\n",[178,34153,34154],{"class":180,"line":18454},[178,34155,722],{"emptyLinePlaceholder":721},[178,34157,34158],{"class":180,"line":18460},[178,34159,722],{"emptyLinePlaceholder":721},[178,34161,34162],{"class":180,"line":18471},[178,34163,34164],{"class":2008},"    # 准备工作完成--->开始训练模型\n",[178,34166,34167,34169,34172,34174,34176],{"class":180,"line":18494},[178,34168,988],{"class":699},[178,34170,34171],{"class":319}," epoch ",[178,34173,994],{"class":699},[178,34175,997],{"class":195},[178,34177,34178],{"class":319},"(num_epochs):\n",[178,34180,34181,34184,34186,34189,34192,34194,34196,34198,34201,34203,34205],{"class":180,"line":18516},[178,34182,34183],{"class":195},"        print",[178,34185,944],{"class":319},[178,34187,34188],{"class":188},"\"Epoch ",[178,34190,34191],{"class":195},"{}",[178,34193,2524],{"class":188},[178,34195,34191],{"class":195},[178,34197,2191],{"class":188},[178,34199,34200],{"class":319},".format(epoch,num_epochs",[178,34202,2472],{"class":699},[178,34204,1665],{"class":195},[178,34206,32239],{"class":319},[178,34208,34209,34211,34213,34216,34218,34220],{"class":180,"line":18521},[178,34210,34183],{"class":195},[178,34212,944],{"class":319},[178,34214,34215],{"class":188},"\"-\"",[178,34217,2395],{"class":699},[178,34219,2386],{"class":195},[178,34221,863],{"class":319},[178,34223,34224],{"class":180,"line":18527},[178,34225,722],{"emptyLinePlaceholder":721},[178,34227,34228],{"class":180,"line":18541},[178,34229,34230],{"class":2008},"        # 初始化参数\n",[178,34232,34233],{"class":180,"line":18554},[178,34234,34235],{"class":2008},"        # 训练集损失函数\n",[178,34237,34238,34241,34243],{"class":180,"line":18559},[178,34239,34240],{"class":319},"        train_loss",[178,34242,330],{"class":699},[178,34244,34075],{"class":195},[178,34246,34247],{"class":180,"line":18573},[178,34248,34249],{"class":2008},"        # 训练集准确度\n",[178,34251,34252,34255,34257],{"class":180,"line":18578},[178,34253,34254],{"class":319},"        train_corrects",[178,34256,330],{"class":699},[178,34258,4860],{"class":195},[178,34260,34261],{"class":180,"line":18584},[178,34262,34263],{"class":2008},"        # 验证集损失函数\n",[178,34265,34266,34269,34271],{"class":180,"line":18589},[178,34267,34268],{"class":319},"        val_loss",[178,34270,330],{"class":699},[178,34272,34075],{"class":195},[178,34274,34275],{"class":180,"line":18603},[178,34276,34277],{"class":2008},"        # 验证集准确度\n",[178,34279,34280,34283,34285],{"class":180,"line":18608},[178,34281,34282],{"class":319},"        val_corrects",[178,34284,330],{"class":699},[178,34286,4860],{"class":195},[178,34288,34289],{"class":180,"line":18613},[178,34290,34291],{"class":2008},"        # 训练集样本数量\n",[178,34293,34294,34297,34299],{"class":180,"line":18627},[178,34295,34296],{"class":319},"        train_num",[178,34298,330],{"class":699},[178,34300,4860],{"class":195},[178,34302,34303],{"class":180,"line":18639},[178,34304,34305],{"class":2008},"        # 验证集样本数量\n",[178,34307,34308,34311,34313],{"class":180,"line":18644},[178,34309,34310],{"class":319},"        val_num",[178,34312,330],{"class":699},[178,34314,4860],{"class":195},[178,34316,34317],{"class":180,"line":18657},[178,34318,34319],{"class":2008},"        # 将数据放到设备,并开始训练\n",[178,34321,34322,34324,34326,34328,34330],{"class":180,"line":18662},[178,34323,5176],{"class":699},[178,34325,33336],{"class":319},[178,34327,994],{"class":699},[178,34329,33341],{"class":195},[178,34331,34332],{"class":319},"(train_dataloader):\n",[178,34334,34335],{"class":180,"line":18667},[178,34336,34337],{"class":2008},"            # 将特征放入到训练设备\n",[178,34339,34340,34343,34345],{"class":180,"line":18672},[178,34341,34342],{"class":319},"            b_x",[178,34344,330],{"class":699},[178,34346,34347],{"class":319},"b_x.to(device)\n",[178,34349,34350],{"class":180,"line":18685},[178,34351,34352],{"class":2008},"            # 将标签放入到训练设备当中\n",[178,34354,34355,34358,34360],{"class":180,"line":18690},[178,34356,34357],{"class":319},"            b_y",[178,34359,330],{"class":699},[178,34361,34362],{"class":319},"b_y.to(device)\n",[178,34364,34366],{"class":180,"line":34365},98,[178,34367,34368],{"class":2008},"            # 设置模型为训练模式\n",[178,34370,34372],{"class":180,"line":34371},99,[178,34373,34374],{"class":319},"            model.train()\n",[178,34376,34378],{"class":180,"line":34377},100,[178,34379,34380],{"class":2008},"            # 将数据放到模型当中,开始前向传播\n",[178,34382,34384],{"class":180,"line":34383},101,[178,34385,34386],{"class":2008},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[178,34388,34390,34393,34395],{"class":180,"line":34389},102,[178,34391,34392],{"class":319},"            output",[178,34394,330],{"class":699},[178,34396,34397],{"class":319},"model(b_x)\n",[178,34399,34401],{"class":180,"line":34400},103,[178,34402,34403],{"class":2008},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[178,34405,34407,34410,34412,34415,34418,34420,34422],{"class":180,"line":34406},104,[178,34408,34409],{"class":319},"            pre_lab",[178,34411,330],{"class":699},[178,34413,34414],{"class":319},"torch.argmax(output,",[178,34416,34417],{"class":6985},"dim",[178,34419,330],{"class":699},[178,34421,1665],{"class":195},[178,34423,863],{"class":319},[178,34425,34427],{"class":180,"line":34426},105,[178,34428,34429],{"class":2008},"            # 计算每一个batch的损失函数\n",[178,34431,34433,34436,34438],{"class":180,"line":34432},106,[178,34434,34435],{"class":319},"            loss",[178,34437,330],{"class":699},[178,34439,34440],{"class":319},"criterion(output,b_y)\n",[178,34442,34444],{"class":180,"line":34443},107,[178,34445,34446],{"class":2008},"            # 将梯度初始化为0\n",[178,34448,34450],{"class":180,"line":34449},108,[178,34451,34452],{"class":319},"            optimizer.zero_grad()\n",[178,34454,34456],{"class":180,"line":34455},109,[178,34457,34458],{"class":2008},"            # 梯度置为0后再进行反向传播\n",[178,34460,34462],{"class":180,"line":34461},110,[178,34463,34464],{"class":319},"            loss.backward()\n",[178,34466,34468],{"class":180,"line":34467},111,[178,34469,34470],{"class":2008},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[178,34472,34474],{"class":180,"line":34473},112,[178,34475,34476],{"class":319},"            optimizer.step()\n",[178,34478,34480],{"class":180,"line":34479},113,[178,34481,34482],{"class":2008},"            # loss.item()指的是batch的平均损失\n",[178,34484,34486,34489,34491,34494,34496,34499,34501],{"class":180,"line":34485},114,[178,34487,34488],{"class":319},"            train_loss",[178,34490,11238],{"class":699},[178,34492,34493],{"class":319},"loss.item()",[178,34495,2395],{"class":699},[178,34497,34498],{"class":319},"b_x.size(",[178,34500,2133],{"class":195},[178,34502,863],{"class":319},[178,34504,34506],{"class":180,"line":34505},115,[178,34507,34508],{"class":2008},"            # 计算每个批次中正确预测的数量\n",[178,34510,34512,34515,34517,34520,34522],{"class":180,"line":34511},116,[178,34513,34514],{"class":319},"            train_corrects",[178,34516,11238],{"class":699},[178,34518,34519],{"class":319},"torch.sum(pre_lab",[178,34521,4725],{"class":699},[178,34523,34524],{"class":319},"b_y.data)\n",[178,34526,34528],{"class":180,"line":34527},117,[178,34529,34530],{"class":2008},"            # 计算目前为止一共处理了多少样本\n",[178,34532,34534,34537,34539,34541,34543],{"class":180,"line":34533},118,[178,34535,34536],{"class":319},"            train_num",[178,34538,11238],{"class":699},[178,34540,34498],{"class":319},[178,34542,2133],{"class":195},[178,34544,863],{"class":319},[178,34546,34548],{"class":180,"line":34547},119,[178,34549,34550],{"class":2008},"        # 验证数据\n",[178,34552,34554,34556,34559,34561,34563],{"class":180,"line":34553},120,[178,34555,5176],{"class":699},[178,34557,34558],{"class":319}," step ,(b_x,b_y) ",[178,34560,994],{"class":699},[178,34562,33341],{"class":195},[178,34564,34565],{"class":319},"(val_dataloader):\n",[178,34567,34569],{"class":180,"line":34568},121,[178,34570,34571],{"class":2008},"            # 将特征放到验证设备当中\n",[178,34573,34575,34577,34579],{"class":180,"line":34574},122,[178,34576,34342],{"class":319},[178,34578,330],{"class":699},[178,34580,34347],{"class":319},[178,34582,34584],{"class":180,"line":34583},123,[178,34585,34586],{"class":2008},"            # 将标签放到放到训练设备当中\n",[178,34588,34590,34592,34594],{"class":180,"line":34589},124,[178,34591,34357],{"class":319},[178,34593,330],{"class":699},[178,34595,34362],{"class":319},[178,34597,34599],{"class":180,"line":34598},125,[178,34600,34601],{"class":2008},"            # 开启验证模式，设置模型为评估模式\n",[178,34603,34605],{"class":180,"line":34604},126,[178,34606,34607],{"class":319},"            model.eval()\n",[178,34609,34611,34614],{"class":180,"line":34610},127,[178,34612,34613],{"class":699},"            with",[178,34615,34616],{"class":319}," torch.no_grad():\n",[178,34618,34620],{"class":180,"line":34619},128,[178,34621,34622],{"class":2008},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[178,34624,34626,34629,34631],{"class":180,"line":34625},129,[178,34627,34628],{"class":319},"                output ",[178,34630,330],{"class":699},[178,34632,34633],{"class":319}," model(b_x)\n",[178,34635,34637],{"class":180,"line":34636},130,[178,34638,34639],{"class":2008},"                # 查找每一行中最大值对应的下标\n",[178,34641,34643,34646,34648,34651,34653,34655,34657],{"class":180,"line":34642},131,[178,34644,34645],{"class":319},"                pre_lab ",[178,34647,330],{"class":699},[178,34649,34650],{"class":319}," torch.argmax(output, ",[178,34652,34417],{"class":6985},[178,34654,330],{"class":699},[178,34656,1665],{"class":195},[178,34658,863],{"class":319},[178,34660,34662],{"class":180,"line":34661},132,[178,34663,34664],{"class":2008},"                # 计算验证集上的当前 batch 损失\n",[178,34666,34668,34671,34673],{"class":180,"line":34667},133,[178,34669,34670],{"class":319},"                val_batch_loss ",[178,34672,330],{"class":699},[178,34674,34675],{"class":319}," criterion(output, b_y)\n",[178,34677,34679],{"class":180,"line":34678},134,[178,34680,34681],{"class":2008},"                # 对损失函数进行累加（按样本数加权）\n",[178,34683,34685,34688,34690,34693,34695,34698,34700],{"class":180,"line":34684},135,[178,34686,34687],{"class":319},"                val_loss ",[178,34689,11238],{"class":699},[178,34691,34692],{"class":319}," val_batch_loss.item() ",[178,34694,2395],{"class":699},[178,34696,34697],{"class":319}," b_x.size(",[178,34699,2133],{"class":195},[178,34701,863],{"class":319},[178,34703,34705,34708,34710,34713,34715],{"class":180,"line":34704},136,[178,34706,34707],{"class":319},"                val_corrects ",[178,34709,11238],{"class":699},[178,34711,34712],{"class":319}," torch.sum(pre_lab ",[178,34714,4725],{"class":699},[178,34716,34717],{"class":319}," b_y.data)\n",[178,34719,34721],{"class":180,"line":34720},137,[178,34722,34723],{"class":2008},"                # 当前用于验证的样本数量\n",[178,34725,34727,34730,34732,34734,34736],{"class":180,"line":34726},138,[178,34728,34729],{"class":319},"            val_num ",[178,34731,11238],{"class":699},[178,34733,34697],{"class":319},[178,34735,2133],{"class":195},[178,34737,863],{"class":319},[178,34739,34741],{"class":180,"line":34740},139,[178,34742,34743],{"class":2008},"        # 计算并保存每一次迭代的loss值和准确率\n",[178,34745,34747],{"class":180,"line":34746},140,[178,34748,34749],{"class":2008},"        # 计算并保存训练集的loss值\n",[178,34751,34753,34756,34758],{"class":180,"line":34752},141,[178,34754,34755],{"class":319},"        train_loss_all.append(train_loss",[178,34757,2524],{"class":699},[178,34759,34760],{"class":319},"train_num)\n",[178,34762,34764],{"class":180,"line":34763},142,[178,34765,34766],{"class":2008},"        # 取双精度\n",[178,34768,34770],{"class":180,"line":34769},143,[178,34771,34772],{"class":2008},"        # 计算并保存训练集的准确率\n",[178,34774,34776,34779,34781],{"class":180,"line":34775},144,[178,34777,34778],{"class":319},"        train_acc_all.append(train_corrects.double().item()",[178,34780,2524],{"class":699},[178,34782,34760],{"class":319},[178,34784,34786],{"class":180,"line":34785},145,[178,34787,34788],{"class":2008},"        # 计算并保存验证集的loss值\n",[178,34790,34792,34795,34797],{"class":180,"line":34791},146,[178,34793,34794],{"class":319},"        val_loss_all.append(val_loss",[178,34796,2524],{"class":699},[178,34798,34799],{"class":319},"val_num)\n",[178,34801,34803],{"class":180,"line":34802},147,[178,34804,34805],{"class":2008},"        # 计算并保存验证集的准确率\n",[178,34807,34809,34812,34814],{"class":180,"line":34808},148,[178,34810,34811],{"class":319},"        val_acc_all.append(val_corrects.double().item()",[178,34813,2524],{"class":699},[178,34815,34799],{"class":319},[178,34817,34819],{"class":180,"line":34818},149,[178,34820,722],{"emptyLinePlaceholder":721},[178,34822,34824],{"class":180,"line":34823},150,[178,34825,34826],{"class":2008},"        # 打印训练一轮的loss值和准确率\n",[178,34828,34830,34832,34834,34836,34838,34841,34843,34846,34848,34851,34853,34855,34857,34859,34862,34864,34866,34869,34871,34873],{"class":180,"line":34829},151,[178,34831,34183],{"class":195},[178,34833,944],{"class":319},[178,34835,5365],{"class":188},[178,34837,34191],{"class":195},[178,34839,34840],{"class":188},"train loss:",[178,34842,2836],{"class":195},[178,34844,34845],{"class":699},":.4f",[178,34847,2885],{"class":195},[178,34849,34850],{"class":188}," train acc:",[178,34852,2836],{"class":195},[178,34854,34845],{"class":699},[178,34856,2885],{"class":195},[178,34858,5365],{"class":188},[178,34860,34861],{"class":319},".format(epoch,train_loss_all[",[178,34863,2472],{"class":699},[178,34865,1665],{"class":195},[178,34867,34868],{"class":319},"],train_acc_all[",[178,34870,2472],{"class":699},[178,34872,1665],{"class":195},[178,34874,34875],{"class":319},"]))\n",[178,34877,34879,34881,34883,34885,34887,34890,34892,34894,34896,34899,34901,34903,34905,34907,34910,34912,34914,34917,34919,34921],{"class":180,"line":34878},152,[178,34880,34183],{"class":195},[178,34882,944],{"class":319},[178,34884,5365],{"class":188},[178,34886,34191],{"class":195},[178,34888,34889],{"class":188},"val loss:",[178,34891,2836],{"class":195},[178,34893,34845],{"class":699},[178,34895,2885],{"class":195},[178,34897,34898],{"class":188}," val acc:",[178,34900,2836],{"class":195},[178,34902,34845],{"class":699},[178,34904,2885],{"class":195},[178,34906,5365],{"class":188},[178,34908,34909],{"class":319},".format(epoch,val_loss_all[",[178,34911,2472],{"class":699},[178,34913,1665],{"class":195},[178,34915,34916],{"class":319},"],val_acc_all[",[178,34918,2472],{"class":699},[178,34920,1665],{"class":195},[178,34922,34875],{"class":319},[178,34924,34926],{"class":180,"line":34925},153,[178,34927,722],{"emptyLinePlaceholder":721},[178,34929,34931],{"class":180,"line":34930},154,[178,34932,34933],{"class":2008},"        # 判断准确度--->保存最优模型\n",[178,34935,34937,34939,34942,34944,34946,34948,34950],{"class":180,"line":34936},155,[178,34938,4280],{"class":699},[178,34940,34941],{"class":319}," val_acc_all[",[178,34943,2472],{"class":699},[178,34945,1665],{"class":195},[178,34947,2879],{"class":319},[178,34949,2899],{"class":699},[178,34951,34952],{"class":319},"best_acc:\n",[178,34954,34956],{"class":180,"line":34955},156,[178,34957,34958],{"class":2008},"            # 保存当前模型准确度\n",[178,34960,34962,34965,34967,34969,34972,34974,34976],{"class":180,"line":34961},157,[178,34963,34964],{"class":319},"            best_acc:",[178,34966,1991],{"class":195},[178,34968,330],{"class":699},[178,34970,34971],{"class":319},"val_acc_all[",[178,34973,2472],{"class":699},[178,34975,1665],{"class":195},[178,34977,34978],{"class":319},"]\n",[178,34980,34982],{"class":180,"line":34981},158,[178,34983,34984],{"class":2008},"            # 保存当前的准确度\n",[178,34986,34988],{"class":180,"line":34987},159,[178,34989,34990],{"class":2008},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[178,34992,34994,34997,34999],{"class":180,"line":34993},160,[178,34995,34996],{"class":319},"            best_model_wts",[178,34998,330],{"class":699},[178,35000,34047],{"class":319},[178,35002,35004],{"class":180,"line":35003},161,[178,35005,722],{"emptyLinePlaceholder":721},[178,35007,35009],{"class":180,"line":35008},162,[178,35010,35011],{"class":2008},"        # 计算耗时\n",[178,35013,35015,35018,35020,35023,35025],{"class":180,"line":35014},163,[178,35016,35017],{"class":319},"        time_use",[178,35019,330],{"class":699},[178,35021,35022],{"class":319},"time.time()",[178,35024,2472],{"class":699},[178,35026,35027],{"class":319},"since\n",[178,35029,35031,35033,35035,35038,35040,35043,35045,35047,35049,35051,35053,35056,35059,35062,35064,35067,35069,35071],{"class":180,"line":35030},164,[178,35032,34183],{"class":195},[178,35034,944],{"class":319},[178,35036,35037],{"class":188},"'训练和验证耗费的时间",[178,35039,2836],{"class":195},[178,35041,35042],{"class":699},":.0f",[178,35044,2885],{"class":195},[178,35046,2484],{"class":188},[178,35048,2836],{"class":195},[178,35050,35042],{"class":699},[178,35052,2885],{"class":195},[178,35054,35055],{"class":188},"s'",[178,35057,35058],{"class":319},".format(time_use",[178,35060,35061],{"class":699},"\u002F\u002F",[178,35063,2847],{"class":195},[178,35065,35066],{"class":319},",time_use",[178,35068,2268],{"class":699},[178,35070,2847],{"class":195},[178,35072,32239],{"class":319},[178,35074,35076],{"class":180,"line":35075},165,[178,35077,35078],{"class":2008},"    # 选择最优参数\n",[178,35080,35082],{"class":180,"line":35081},166,[178,35083,35084],{"class":2008},"    # 加载最高准确率下的模型参数\n",[178,35086,35088],{"class":180,"line":35087},167,[178,35089,35090],{"class":2008},"    # model.load_state_dict(best_model_wts)\n",[178,35092,35094,35097,35100],{"class":180,"line":35093},168,[178,35095,35096],{"class":319},"    torch.save(model.state_dict(best_model_wts), ",[178,35098,35099],{"class":188},"'.\u002Fbest_model.pth'",[178,35101,863],{"class":319},[178,35103,35105],{"class":180,"line":35104},169,[178,35106,35107],{"class":2008},"    # 或者写成\n",[178,35109,35111],{"class":180,"line":35110},170,[178,35112,35113],{"class":2008},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[178,35115,35117],{"class":180,"line":35116},171,[178,35118,35119],{"class":2008},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[178,35121,35123,35126,35128,35131,35134,35136],{"class":180,"line":35122},172,[178,35124,35125],{"class":319},"    train_process",[178,35127,330],{"class":699},[178,35129,35130],{"class":319},"pd.DataFrame(",[178,35132,35133],{"class":6985},"data",[178,35135,330],{"class":699},[178,35137,3352],{"class":319},[178,35139,35141,35144,35146,35149],{"class":180,"line":35140},173,[178,35142,35143],{"class":188},"        \"epoch\"",[178,35145,2799],{"class":319},[178,35147,35148],{"class":195},"range",[178,35150,35151],{"class":319},"(num_epochs),\n",[178,35153,35155,35158],{"class":180,"line":35154},174,[178,35156,35157],{"class":188},"        \"train_loss_all\"",[178,35159,35160],{"class":319},":train_loss_all,\n",[178,35162,35164,35167],{"class":180,"line":35163},175,[178,35165,35166],{"class":188},"        \"val_loss_all\"",[178,35168,35169],{"class":319},":val_loss_all,\n",[178,35171,35173,35176],{"class":180,"line":35172},176,[178,35174,35175],{"class":188},"        \"train_acc_all\"",[178,35177,35178],{"class":319},":train_acc_all,\n",[178,35180,35182,35185],{"class":180,"line":35181},177,[178,35183,35184],{"class":188},"        \"val_acc_all\"",[178,35186,35187],{"class":319},":val_acc_all\n",[178,35189,35191],{"class":180,"line":35190},178,[178,35192,35193],{"class":319},"    })\n",[178,35195,35197],{"class":180,"line":35196},179,[178,35198,35199],{"class":2008},"    # 返回训练保存的过程\n",[178,35201,35203,35205],{"class":180,"line":35202},180,[178,35204,5862],{"class":699},[178,35206,35207],{"class":319}," train_process\n",[178,35209,35211],{"class":180,"line":35210},181,[178,35212,722],{"emptyLinePlaceholder":721},[178,35214,35216],{"class":180,"line":35215},182,[178,35217,35218],{"class":2008},"# 将loss值和精度按照图片的形式展示出来\n",[178,35220,35222,35224,35227],{"class":180,"line":35221},183,[178,35223,835],{"class":699},[178,35225,35226],{"class":184}," matplot_acc_loss",[178,35228,35229],{"class":319},"(train_process):\n",[178,35231,35233],{"class":180,"line":35232},184,[178,35234,35235],{"class":2008},"    # 设置图的大小\n",[178,35237,35239,35242,35244,35246,35248,35250,35252,35254],{"class":180,"line":35238},185,[178,35240,35241],{"class":319},"    plt.figure(",[178,35243,33428],{"class":6985},[178,35245,330],{"class":699},[178,35247,944],{"class":319},[178,35249,2438],{"class":195},[178,35251,2318],{"class":319},[178,35253,2233],{"class":195},[178,35255,32239],{"class":319},[178,35257,35259],{"class":180,"line":35258},186,[178,35260,35261],{"class":2008},"    # 设置图中有几张图\n",[178,35263,35265],{"class":180,"line":35264},187,[178,35266,35267],{"class":2008},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[178,35269,35271],{"class":180,"line":35270},188,[178,35272,35273],{"class":2008},"    # ①loss图\n",[178,35275,35277,35279,35281,35283,35285,35287,35289],{"class":180,"line":35276},189,[178,35278,33462],{"class":319},[178,35280,1665],{"class":195},[178,35282,2318],{"class":319},[178,35284,1669],{"class":195},[178,35286,2318],{"class":319},[178,35288,1665],{"class":195},[178,35290,863],{"class":319},[178,35292,35294],{"class":180,"line":35293},190,[178,35295,35296],{"class":2008},"    # 补充:\n",[178,35298,35300],{"class":180,"line":35299},191,[178,35301,35302],{"class":2008},"    # plt.subplot(nrows, ncols, index)\n",[178,35304,35306],{"class":180,"line":35305},192,[178,35307,35308],{"class":2008},"    # nrows：行数\n",[178,35310,35312],{"class":180,"line":35311},193,[178,35313,35314],{"class":2008},"    # ncols：列数\n",[178,35316,35318],{"class":180,"line":35317},194,[178,35319,35320],{"class":2008},"    # index：目前选中第几个子图（从1开始）\n",[178,35322,35324,35327,35330,35333,35336,35338,35341,35343,35346],{"class":180,"line":35323},195,[178,35325,35326],{"class":319},"    plt.plot(train_process[",[178,35328,35329],{"class":188},"\"epoch\"",[178,35331,35332],{"class":319},"],train_process.train_loss_all,",[178,35334,35335],{"class":188},"'ro-'",[178,35337,2318],{"class":319},[178,35339,35340],{"class":6985},"label",[178,35342,330],{"class":699},[178,35344,35345],{"class":188},"'train loss'",[178,35347,863],{"class":319},[178,35349,35351,35353,35355,35358,35361,35363,35365,35367,35370],{"class":180,"line":35350},196,[178,35352,35326],{"class":319},[178,35354,35329],{"class":188},[178,35356,35357],{"class":319},"],train_process.val_loss_all,",[178,35359,35360],{"class":188},"'bs--'",[178,35362,2318],{"class":319},[178,35364,35340],{"class":6985},[178,35366,330],{"class":699},[178,35368,35369],{"class":188},"'val loss'",[178,35371,863],{"class":319},[178,35373,35375],{"class":180,"line":35374},197,[178,35376,35377],{"class":2008},"    # 添加一个图例\n",[178,35379,35381],{"class":180,"line":35380},198,[178,35382,35383],{"class":319},"    plt.legend()\n",[178,35385,35387],{"class":180,"line":35386},199,[178,35388,35389],{"class":2008},"    # 给轴添加标签\n",[178,35391,35393,35396,35399],{"class":180,"line":35392},200,[178,35394,35395],{"class":319},"    plt.xlabel(",[178,35397,35398],{"class":188},"'epoch'",[178,35400,863],{"class":319},[178,35402,35404,35407,35410],{"class":180,"line":35403},201,[178,35405,35406],{"class":319},"    plt.ylabel(",[178,35408,35409],{"class":188},"'loss'",[178,35411,863],{"class":319},[178,35413,35415],{"class":180,"line":35414},202,[178,35416,35417],{"class":2008},"    # ②准确度图\n",[178,35419,35421,35423,35425,35427,35429,35431,35433],{"class":180,"line":35420},203,[178,35422,33462],{"class":319},[178,35424,1665],{"class":195},[178,35426,2318],{"class":319},[178,35428,1669],{"class":195},[178,35430,2318],{"class":319},[178,35432,1669],{"class":195},[178,35434,863],{"class":319},[178,35436,35438,35440,35442,35445,35447,35449,35451,35453,35456],{"class":180,"line":35437},204,[178,35439,35326],{"class":319},[178,35441,35329],{"class":188},[178,35443,35444],{"class":319},"],train_process.train_acc_all,",[178,35446,35335],{"class":188},[178,35448,2318],{"class":319},[178,35450,35340],{"class":6985},[178,35452,330],{"class":699},[178,35454,35455],{"class":188},"'train acc'",[178,35457,863],{"class":319},[178,35459,35461,35463,35465,35468,35470,35472,35474,35476,35479],{"class":180,"line":35460},205,[178,35462,35326],{"class":319},[178,35464,35329],{"class":188},[178,35466,35467],{"class":319},"],train_process.val_acc_all,",[178,35469,35360],{"class":188},[178,35471,2318],{"class":319},[178,35473,35340],{"class":6985},[178,35475,330],{"class":699},[178,35477,35478],{"class":188},"'val acc'",[178,35480,863],{"class":319},[178,35482,35484],{"class":180,"line":35483},206,[178,35485,35486],{"class":2008},"    # 添加图例\n",[178,35488,35490],{"class":180,"line":35489},207,[178,35491,35383],{"class":319},[178,35493,35495,35497,35499],{"class":180,"line":35494},208,[178,35496,35395],{"class":319},[178,35498,35329],{"class":188},[178,35500,863],{"class":319},[178,35502,35504,35506,35509],{"class":180,"line":35503},209,[178,35505,35406],{"class":319},[178,35507,35508],{"class":188},"\"acc\"",[178,35510,863],{"class":319},[178,35512,35514],{"class":180,"line":35513},210,[178,35515,35516],{"class":319},"    plt.show()\n",[178,35518,35520],{"class":180,"line":35519},211,[178,35521,722],{"emptyLinePlaceholder":721},[178,35523,35525],{"class":180,"line":35524},212,[178,35526,35527],{"class":2008},"# 正式开始训练:\n",[178,35529,35531,35533,35535,35537,35539],{"class":180,"line":35530},213,[178,35532,1085],{"class":699},[178,35534,1088],{"class":195},[178,35536,4725],{"class":699},[178,35538,32965],{"class":188},[178,35540,847],{"class":319},[178,35542,35544],{"class":180,"line":35543},214,[178,35545,35546],{"class":2008},"    # 将模型实例化\n",[178,35548,35550,35553,35555],{"class":180,"line":35549},215,[178,35551,35552],{"class":319},"    LeNet",[178,35554,330],{"class":699},[178,35556,35557],{"class":319},"LeNet()\n",[178,35559,35561,35564,35566],{"class":180,"line":35560},216,[178,35562,35563],{"class":319},"    train_dataloader,val_dataloader",[178,35565,330],{"class":699},[178,35567,35568],{"class":319},"train_val_data_process()\n",[178,35570,35572,35574,35576,35579,35582,35584,35586],{"class":180,"line":35571},217,[178,35573,35125],{"class":319},[178,35575,330],{"class":699},[178,35577,35578],{"class":319},"train_model_process(LeNet,train_dataloader,val_dataloader,",[178,35580,35581],{"class":6985},"num_epochs",[178,35583,330],{"class":699},[178,35585,2640],{"class":195},[178,35587,863],{"class":319},[178,35589,35591],{"class":180,"line":35590},218,[178,35592,35593],{"class":319},"    matplot_acc_loss(train_process)\n",[19,35595,35596],{},"画图的补充点学习：",[19,35598,35599],{},[3269,35600],{"alt":160,"src":35601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-014.png",[26,35603,35604],{"start":274},[29,35605,35606],{},"测试",[154,35608,35610],{"className":690,"code":35609,"language":692,"meta":160,"style":160},"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",[70,35611,35612,35618,35628,35640,35650,35655,35665,35675,35679,35684,35693,35710,35722,35739,35750,35766,35771,35782,35793,35804,35811,35815,35820,35830,35835,35852,35860,35864,35869,35878,35887,35891,35896,35901,35906,35913,35918,35930,35940,35950,35955,35959,35964,35973,35978,35994,35999,36004,36009,36023,36028,36042,36046,36051,36066,36071,36083,36087,36092,36104,36109,36117,36122,36127,36137,36142,36151,36156,36161,36165,36170,36175,36191,36199,36204,36209,36268,36274,36279,36290,36298,36306,36310,36315,36319,36324,36332,36337,36353,36358,36368,36378],{"__ignoreMap":160},[178,35613,35614,35616],{"class":180,"line":181},[178,35615,700],{"class":699},[178,35617,32138],{"class":319},[178,35619,35620,35622,35624,35626],{"class":180,"line":263},[178,35621,700],{"class":699},[178,35623,33151],{"class":319},[178,35625,713],{"class":699},[178,35627,33156],{"class":319},[178,35629,35630,35632,35635,35637],{"class":180,"line":274},[178,35631,32479],{"class":699},[178,35633,35634],{"class":319}," jupyter_client.consoleapp ",[178,35636,700],{"class":699},[178,35638,35639],{"class":319}," classes\n",[178,35641,35642,35644,35646,35648],{"class":180,"line":354},[178,35643,32479],{"class":699},[178,35645,33134],{"class":319},[178,35647,700],{"class":699},[178,35649,33139],{"class":319},[178,35651,35652],{"class":180,"line":364},[178,35653,35654],{"class":2008},"# 导入数据集\n",[178,35656,35657,35659,35661,35663],{"class":180,"line":740},[178,35658,32479],{"class":699},[178,35660,33107],{"class":319},[178,35662,700],{"class":699},[178,35664,33112],{"class":319},[178,35666,35667,35669,35671,35673],{"class":180,"line":746},[178,35668,32479],{"class":699},[178,35670,33649],{"class":319},[178,35672,700],{"class":699},[178,35674,33654],{"class":319},[178,35676,35677],{"class":180,"line":752},[178,35678,722],{"emptyLinePlaceholder":721},[178,35680,35681],{"class":180,"line":757},[178,35682,35683],{"class":2008},"# 测试数据处理\n",[178,35685,35686,35688,35691],{"class":180,"line":763},[178,35687,835],{"class":699},[178,35689,35690],{"class":184}," test_data_process",[178,35692,33687],{"class":319},[178,35694,35695,35698,35700,35702,35704,35706,35708],{"class":180,"line":769},[178,35696,35697],{"class":319},"    test_data",[178,35699,330],{"class":699},[178,35701,33191],{"class":319},[178,35703,33194],{"class":6985},[178,35705,330],{"class":699},[178,35707,33199],{"class":188},[178,35709,33202],{"class":319},[178,35711,35712,35715,35717,35720],{"class":180,"line":774},[178,35713,35714],{"class":6985},"                           train",[178,35716,330],{"class":699},[178,35718,35719],{"class":195},"False",[178,35721,33202],{"class":319},[178,35723,35724,35727,35729,35731,35733,35735,35737],{"class":180,"line":780},[178,35725,35726],{"class":6985},"                           transform",[178,35728,330],{"class":699},[178,35730,33229],{"class":319},[178,35732,554],{"class":6985},[178,35734,330],{"class":699},[178,35736,2841],{"class":195},[178,35738,33239],{"class":319},[178,35740,35741,35744,35746,35748],{"class":180,"line":786},[178,35742,35743],{"class":6985},"                           download",[178,35745,330],{"class":699},[178,35747,33212],{"class":195},[178,35749,863],{"class":319},[178,35751,35752,35755,35757,35759,35761,35763],{"class":180,"line":792},[178,35753,35754],{"class":319},"    test_dataloader",[178,35756,330],{"class":699},[178,35758,33269],{"class":319},[178,35760,33272],{"class":6985},[178,35762,330],{"class":699},[178,35764,35765],{"class":319},"test_data,\n",[178,35767,35768],{"class":180,"line":798},[178,35769,35770],{"class":2008},"                                    # 这里是一张一张进行测试\n",[178,35772,35773,35776,35778,35780],{"class":180,"line":804},[178,35774,35775],{"class":6985},"                                    batch_size",[178,35777,330],{"class":699},[178,35779,1665],{"class":195},[178,35781,33202],{"class":319},[178,35783,35784,35787,35789,35791],{"class":180,"line":810},[178,35785,35786],{"class":6985},"                                    shuffle",[178,35788,330],{"class":699},[178,35790,33212],{"class":195},[178,35792,33202],{"class":319},[178,35794,35795,35798,35800,35802],{"class":180,"line":816},[178,35796,35797],{"class":6985},"                                    num_workers",[178,35799,330],{"class":699},[178,35801,2133],{"class":195},[178,35803,863],{"class":319},[178,35805,35806,35808],{"class":180,"line":822},[178,35807,5862],{"class":699},[178,35809,35810],{"class":319}," test_dataloader\n",[178,35812,35813],{"class":180,"line":827},[178,35814,722],{"emptyLinePlaceholder":721},[178,35816,35817],{"class":180,"line":832},[178,35818,35819],{"class":2008},"# 定义模型测试函数\n",[178,35821,35822,35824,35827],{"class":180,"line":850},[178,35823,835],{"class":699},[178,35825,35826],{"class":184}," test_model_process",[178,35828,35829],{"class":319},"(model,test_dataloader):\n",[178,35831,35832],{"class":180,"line":866},[178,35833,35834],{"class":2008},"    # 将模型放到设备当中，先进行判断\n",[178,35836,35837,35839,35841,35843,35845,35847,35849],{"class":180,"line":877},[178,35838,32977],{"class":319},[178,35840,330],{"class":699},[178,35842,32984],{"class":188},[178,35844,3499],{"class":699},[178,35846,32989],{"class":319},[178,35848,3496],{"class":699},[178,35850,35851],{"class":188}," \"cpu\"\n",[178,35853,35854,35856,35858],{"class":180,"line":882},[178,35855,33029],{"class":319},[178,35857,330],{"class":699},[178,35859,34022],{"class":319},[178,35861,35862],{"class":180,"line":898},[178,35863,722],{"emptyLinePlaceholder":721},[178,35865,35866],{"class":180,"line":914},[178,35867,35868],{"class":2008},"    # 设置初始化参数\n",[178,35870,35871,35874,35876],{"class":180,"line":919},[178,35872,35873],{"class":319},"    test_corrects",[178,35875,330],{"class":699},[178,35877,34075],{"class":195},[178,35879,35880,35883,35885],{"class":180,"line":935},[178,35881,35882],{"class":319},"    test_num",[178,35884,330],{"class":699},[178,35886,4860],{"class":195},[178,35888,35889],{"class":180,"line":952},[178,35890,722],{"emptyLinePlaceholder":721},[178,35892,35893],{"class":180,"line":966},[178,35894,35895],{"class":2008},"    # 进行模型测试\n",[178,35897,35898],{"class":180,"line":980},[178,35899,35900],{"class":2008},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[178,35902,35903],{"class":180,"line":985},[178,35904,35905],{"class":2008},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[178,35907,35908,35911],{"class":180,"line":1008},[178,35909,35910],{"class":699},"    with",[178,35912,34616],{"class":319},[178,35914,35915],{"class":180,"line":1014},[178,35916,35917],{"class":2008},"        # 从数据中进行\n",[178,35919,35920,35922,35925,35927],{"class":180,"line":1019},[178,35921,5176],{"class":699},[178,35923,35924],{"class":319}," test_data_x,test_data_y ",[178,35926,994],{"class":699},[178,35928,35929],{"class":319}," test_dataloader:\n",[178,35931,35932,35935,35937],{"class":180,"line":1033},[178,35933,35934],{"class":319},"            test_data_x",[178,35936,330],{"class":699},[178,35938,35939],{"class":319},"test_data_x.to(device)\n",[178,35941,35942,35945,35947],{"class":180,"line":1046},[178,35943,35944],{"class":319},"            test_data_y",[178,35946,330],{"class":699},[178,35948,35949],{"class":319},"test_data_y.to(device)\n",[178,35951,35952],{"class":180,"line":1059},[178,35953,35954],{"class":2008},"            # 设置为验证模式\n",[178,35956,35957],{"class":180,"line":1072},[178,35958,34607],{"class":319},[178,35960,35961],{"class":180,"line":1077},[178,35962,35963],{"class":2008},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[178,35965,35966,35968,35970],{"class":180,"line":1082},[178,35967,34392],{"class":319},[178,35969,330],{"class":699},[178,35971,35972],{"class":319},"model(test_data_x)\n",[178,35974,35975],{"class":180,"line":1099},[178,35976,35977],{"class":2008},"            # 查找每一行中最大值对应的下标\n",[178,35979,35980,35982,35984,35986,35988,35990,35992],{"class":180,"line":9806},[178,35981,34409],{"class":319},[178,35983,330],{"class":699},[178,35985,34414],{"class":319},[178,35987,34417],{"class":6985},[178,35989,330],{"class":699},[178,35991,1665],{"class":195},[178,35993,863],{"class":319},[178,35995,35996],{"class":180,"line":9818},[178,35997,35998],{"class":2008},"            # 计算正确率\n",[178,36000,36001],{"class":180,"line":11477},[178,36002,36003],{"class":2008},"            # .data表示是一个不带梯度信息的tensor\n",[178,36005,36006],{"class":180,"line":11502},[178,36007,36008],{"class":2008},"            # 如果预测正确，则准确度test_corrects加1\n",[178,36010,36011,36014,36016,36018,36020],{"class":180,"line":11525},[178,36012,36013],{"class":319},"            test_corrects",[178,36015,11238],{"class":699},[178,36017,34519],{"class":319},[178,36019,4725],{"class":699},[178,36021,36022],{"class":319},"test_data_y.data)\n",[178,36024,36025],{"class":180,"line":11549},[178,36026,36027],{"class":2008},"            # 将所有的测试样本进行累计\n",[178,36029,36030,36033,36035,36038,36040],{"class":180,"line":11554},[178,36031,36032],{"class":319},"            test_num",[178,36034,11238],{"class":699},[178,36036,36037],{"class":319},"test_data_x.size(",[178,36039,2133],{"class":195},[178,36041,863],{"class":319},[178,36043,36044],{"class":180,"line":11559},[178,36045,722],{"emptyLinePlaceholder":721},[178,36047,36048],{"class":180,"line":11564},[178,36049,36050],{"class":2008},"        # 计算准确度\n",[178,36052,36053,36056,36058,36061,36063],{"class":180,"line":11573},[178,36054,36055],{"class":319},"        test_acc",[178,36057,330],{"class":699},[178,36059,36060],{"class":319},"test_corrects.double().item()",[178,36062,2524],{"class":699},[178,36064,36065],{"class":319},"test_num\n",[178,36067,36068],{"class":180,"line":11578},[178,36069,36070],{"class":2008},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[178,36072,36073,36075,36077,36080],{"class":180,"line":11584},[178,36074,34183],{"class":195},[178,36076,944],{"class":319},[178,36078,36079],{"class":188},"\"测试的准确率：\"",[178,36081,36082],{"class":319},",test_acc)\n",[178,36084,36085],{"class":180,"line":11605},[178,36086,722],{"emptyLinePlaceholder":721},[178,36088,36089],{"class":180,"line":11611},[178,36090,36091],{"class":2008},"# 实现模型的测试功能\n",[178,36093,36094,36096,36098,36100,36102],{"class":180,"line":11625},[178,36095,1085],{"class":699},[178,36097,1088],{"class":195},[178,36099,4725],{"class":699},[178,36101,32965],{"class":188},[178,36103,847],{"class":319},[178,36105,36106],{"class":180,"line":11631},[178,36107,36108],{"class":2008},"    # 加载模型\n",[178,36110,36111,36113,36115],{"class":180,"line":11658},[178,36112,33029],{"class":319},[178,36114,330],{"class":699},[178,36116,35557],{"class":319},[178,36118,36119],{"class":180,"line":11667},[178,36120,36121],{"class":2008},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[178,36123,36124],{"class":180,"line":11673},[178,36125,36126],{"class":2008},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[178,36128,36129,36132,36135],{"class":180,"line":11681},[178,36130,36131],{"class":319},"    model.load_state_dict(torch.load(",[178,36133,36134],{"class":188},"'best_model.pth'",[178,36136,32239],{"class":319},[178,36138,36139],{"class":180,"line":11686},[178,36140,36141],{"class":2008},"    # 数据加载\n",[178,36143,36144,36146,36148],{"class":180,"line":18362},[178,36145,35754],{"class":319},[178,36147,330],{"class":699},[178,36149,36150],{"class":319},"test_data_process()\n",[178,36152,36153],{"class":180,"line":18368},[178,36154,36155],{"class":2008},"    # 加载模型测试的函数\n",[178,36157,36158],{"class":180,"line":18391},[178,36159,36160],{"class":319},"    test_model_process(model,test_dataloader)\n",[178,36162,36163],{"class":180,"line":18397},[178,36164,722],{"emptyLinePlaceholder":721},[178,36166,36167],{"class":180,"line":18420},[178,36168,36169],{"class":2008},"    # 验证集推理实现：\n",[178,36171,36172],{"class":180,"line":18434},[178,36173,36174],{"class":2008},"    # 加载数据加载的更详细一些\n",[178,36176,36177,36179,36181,36183,36185,36187,36189],{"class":180,"line":18454},[178,36178,32977],{"class":319},[178,36180,330],{"class":699},[178,36182,32984],{"class":188},[178,36184,3499],{"class":699},[178,36186,32989],{"class":319},[178,36188,3496],{"class":699},[178,36190,35851],{"class":188},[178,36192,36193,36195,36197],{"class":180,"line":18460},[178,36194,33029],{"class":319},[178,36196,330],{"class":699},[178,36198,34022],{"class":319},[178,36200,36201],{"class":180,"line":18471},[178,36202,36203],{"class":2008},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[178,36205,36206],{"class":180,"line":18494},[178,36207,36208],{"class":2008},"    # 顺序不可改变\n",[178,36210,36211,36214,36216,36218,36221,36223,36226,36228,36231,36233,36236,36238,36241,36243,36246,36248,36251,36253,36256,36258,36261,36263,36266],{"class":180,"line":18516},[178,36212,36213],{"class":319},"    classes",[178,36215,330],{"class":699},[178,36217,2830],{"class":319},[178,36219,36220],{"class":188},"'T-shirt\u002Ftop'",[178,36222,2318],{"class":319},[178,36224,36225],{"class":188},"'Trouser'",[178,36227,2318],{"class":319},[178,36229,36230],{"class":188},"'Pullover'",[178,36232,2318],{"class":319},[178,36234,36235],{"class":188},"'Dress'",[178,36237,2318],{"class":319},[178,36239,36240],{"class":188},"'Coat'",[178,36242,2318],{"class":319},[178,36244,36245],{"class":188},"'Sandal'",[178,36247,2318],{"class":319},[178,36249,36250],{"class":188},"'Shirt'",[178,36252,2318],{"class":319},[178,36254,36255],{"class":188},"'Sneaker'",[178,36257,2318],{"class":319},[178,36259,36260],{"class":188},"'Bag'",[178,36262,2318],{"class":319},[178,36264,36265],{"class":188},"'Ankle boot'",[178,36267,34978],{"class":319},[178,36269,36270,36272],{"class":180,"line":18521},[178,36271,35910],{"class":699},[178,36273,34616],{"class":319},[178,36275,36276],{"class":180,"line":18527},[178,36277,36278],{"class":2008},"        # 将数据和标签都放到设备当中\n",[178,36280,36281,36283,36286,36288],{"class":180,"line":18541},[178,36282,5176],{"class":699},[178,36284,36285],{"class":319}," b_x,b_y ",[178,36287,994],{"class":699},[178,36289,35929],{"class":319},[178,36291,36292,36294,36296],{"class":180,"line":18554},[178,36293,34342],{"class":319},[178,36295,330],{"class":699},[178,36297,34347],{"class":319},[178,36299,36300,36302,36304],{"class":180,"line":18559},[178,36301,34357],{"class":319},[178,36303,330],{"class":699},[178,36305,34362],{"class":319},[178,36307,36308],{"class":180,"line":18573},[178,36309,722],{"emptyLinePlaceholder":721},[178,36311,36312],{"class":180,"line":18578},[178,36313,36314],{"class":2008},"            # 设置模型为验证模式\n",[178,36316,36317],{"class":180,"line":18584},[178,36318,34607],{"class":319},[178,36320,36321],{"class":180,"line":18589},[178,36322,36323],{"class":2008},"            # 模型推理结果\n",[178,36325,36326,36328,36330],{"class":180,"line":18603},[178,36327,34392],{"class":319},[178,36329,330],{"class":699},[178,36331,34397],{"class":319},[178,36333,36334],{"class":180,"line":18608},[178,36335,36336],{"class":2008},"            # 获取最大下标，最大下标就是类别号\n",[178,36338,36339,36341,36343,36345,36347,36349,36351],{"class":180,"line":18613},[178,36340,34409],{"class":319},[178,36342,330],{"class":699},[178,36344,34414],{"class":319},[178,36346,34417],{"class":6985},[178,36348,330],{"class":699},[178,36350,1665],{"class":195},[178,36352,863],{"class":319},[178,36354,36355],{"class":180,"line":18627},[178,36356,36357],{"class":2008},"            # 取出张量中的数值\n",[178,36359,36360,36363,36365],{"class":180,"line":18639},[178,36361,36362],{"class":319},"            result",[178,36364,330],{"class":699},[178,36366,36367],{"class":319},"pre_lab.item()\n",[178,36369,36370,36373,36375],{"class":180,"line":18644},[178,36371,36372],{"class":319},"            label",[178,36374,330],{"class":699},[178,36376,36377],{"class":319},"b_y.item()\n",[178,36379,36380,36383,36385,36388,36391,36394,36396,36399],{"class":180,"line":18657},[178,36381,36382],{"class":195},"            print",[178,36384,944],{"class":319},[178,36386,36387],{"class":188},"\"预测值：\"",[178,36389,36390],{"class":319},",classes[result],",[178,36392,36393],{"class":188},"\"------\"",[178,36395,2318],{"class":319},[178,36397,36398],{"class":188},"\"真实值：\"",[178,36400,36401],{"class":319},",classes[label])\n",[19,36403,36404],{},"（2）AlexNet",[26,36406,36407],{},[29,36408,36409],{},"神经网络构建",[154,36411,36413],{"className":690,"code":36412,"language":692,"meta":160,"style":160},"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",[70,36414,36415,36421,36431,36441,36453,36457,36474,36482,36497,36509,36551,36578,36621,36647,36691,36734,36777,36804,36808,36818,36823,36851,36870,36889,36893,36898,36906,36921,36931,36945,36955,36970,36985,37000,37011,37015,37020,37030,37045,37050,37064,37079,37091,37096,37107,37112,37118,37123,37135,37155,37160,37169],{"__ignoreMap":160},[178,36416,36417,36419],{"class":180,"line":181},[178,36418,700],{"class":699},[178,36420,32138],{"class":319},[178,36422,36423,36425,36427,36429],{"class":180,"line":263},[178,36424,32479],{"class":699},[178,36426,32482],{"class":319},[178,36428,700],{"class":699},[178,36430,32487],{"class":319},[178,36432,36433,36435,36437,36439],{"class":180,"line":274},[178,36434,32479],{"class":699},[178,36436,32499],{"class":319},[178,36438,700],{"class":699},[178,36440,32504],{"class":319},[178,36442,36443,36445,36448,36450],{"class":180,"line":354},[178,36444,700],{"class":699},[178,36446,36447],{"class":319}," torch.nn.functional ",[178,36449,713],{"class":699},[178,36451,36452],{"class":319}," F\n",[178,36454,36455],{"class":180,"line":364},[178,36456,722],{"emptyLinePlaceholder":721},[178,36458,36459,36461,36464,36466,36468,36470,36472],{"class":180,"line":740},[178,36460,16453],{"class":699},[178,36462,36463],{"class":184}," AlexNet",[178,36465,944],{"class":319},[178,36467,32520],{"class":184},[178,36469,2498],{"class":319},[178,36471,32525],{"class":184},[178,36473,1005],{"class":319},[178,36475,36476,36478,36480],{"class":180,"line":746},[178,36477,32542],{"class":699},[178,36479,32545],{"class":195},[178,36481,32548],{"class":319},[178,36483,36484,36486,36489,36491,36493,36495],{"class":180,"line":752},[178,36485,32558],{"class":195},[178,36487,36488],{"class":319},"(AlexNet,",[178,36490,32564],{"class":195},[178,36492,32567],{"class":319},[178,36494,32570],{"class":195},[178,36496,3760],{"class":319},[178,36498,36499,36501,36504,36506],{"class":180,"line":757},[178,36500,32586],{"class":195},[178,36502,36503],{"class":319},".ReLu",[178,36505,330],{"class":699},[178,36507,36508],{"class":319},"nn.ReLU()\n",[178,36510,36511,36513,36515,36517,36519,36521,36523,36525,36527,36529,36531,36533,36535,36537,36539,36541,36543,36545,36547,36549],{"class":180,"line":763},[178,36512,32586],{"class":195},[178,36514,32589],{"class":319},[178,36516,330],{"class":699},[178,36518,32594],{"class":319},[178,36520,32597],{"class":6985},[178,36522,330],{"class":699},[178,36524,1665],{"class":195},[178,36526,2318],{"class":319},[178,36528,32606],{"class":6985},[178,36530,330],{"class":699},[178,36532,2151],{"class":195},[178,36534,2318],{"class":319},[178,36536,32615],{"class":6985},[178,36538,330],{"class":699},[178,36540,2412],{"class":195},[178,36542,2318],{"class":319},[178,36544,32670],{"class":6985},[178,36546,330],{"class":699},[178,36548,2233],{"class":195},[178,36550,863],{"class":319},[178,36552,36553,36555,36557,36559,36562,36564,36566,36568,36570,36572,36574,36576],{"class":180,"line":769},[178,36554,32586],{"class":195},[178,36556,32654],{"class":319},[178,36558,330],{"class":699},[178,36560,36561],{"class":319},"nn.MaxPool2d(",[178,36563,32615],{"class":6985},[178,36565,330],{"class":699},[178,36567,2021],{"class":195},[178,36569,2318],{"class":319},[178,36571,32670],{"class":6985},[178,36573,330],{"class":699},[178,36575,1669],{"class":195},[178,36577,863],{"class":319},[178,36579,36580,36582,36584,36586,36588,36590,36592,36594,36596,36598,36600,36603,36605,36607,36609,36611,36613,36615,36617,36619],{"class":180,"line":774},[178,36581,32586],{"class":195},[178,36583,32683],{"class":319},[178,36585,330],{"class":699},[178,36587,32594],{"class":319},[178,36589,32597],{"class":6985},[178,36591,330],{"class":699},[178,36593,2151],{"class":195},[178,36595,2318],{"class":319},[178,36597,32606],{"class":6985},[178,36599,330],{"class":699},[178,36601,36602],{"class":195},"256",[178,36604,2318],{"class":319},[178,36606,32615],{"class":6985},[178,36608,330],{"class":699},[178,36610,2259],{"class":195},[178,36612,2318],{"class":319},[178,36614,32624],{"class":6985},[178,36616,330],{"class":699},[178,36618,1669],{"class":195},[178,36620,863],{"class":319},[178,36622,36623,36625,36627,36629,36631,36633,36635,36637,36639,36641,36643,36645],{"class":180,"line":780},[178,36624,32586],{"class":195},[178,36626,32718],{"class":319},[178,36628,330],{"class":699},[178,36630,36561],{"class":319},[178,36632,32615],{"class":6985},[178,36634,330],{"class":699},[178,36636,2021],{"class":195},[178,36638,2318],{"class":319},[178,36640,32670],{"class":6985},[178,36642,330],{"class":699},[178,36644,1669],{"class":195},[178,36646,863],{"class":319},[178,36648,36649,36651,36654,36656,36658,36660,36662,36664,36666,36668,36670,36673,36675,36677,36679,36681,36683,36685,36687,36689],{"class":180,"line":786},[178,36650,32586],{"class":195},[178,36652,36653],{"class":319},".c5",[178,36655,330],{"class":699},[178,36657,32594],{"class":319},[178,36659,32597],{"class":6985},[178,36661,330],{"class":699},[178,36663,36602],{"class":195},[178,36665,2318],{"class":319},[178,36667,32606],{"class":6985},[178,36669,330],{"class":699},[178,36671,36672],{"class":195},"384",[178,36674,2318],{"class":319},[178,36676,32615],{"class":6985},[178,36678,330],{"class":699},[178,36680,2021],{"class":195},[178,36682,2318],{"class":319},[178,36684,32624],{"class":6985},[178,36686,330],{"class":699},[178,36688,1665],{"class":195},[178,36690,863],{"class":319},[178,36692,36693,36695,36698,36700,36702,36704,36706,36708,36710,36712,36714,36716,36718,36720,36722,36724,36726,36728,36730,36732],{"class":180,"line":792},[178,36694,32586],{"class":195},[178,36696,36697],{"class":319},".c6",[178,36699,330],{"class":699},[178,36701,32594],{"class":319},[178,36703,32597],{"class":6985},[178,36705,330],{"class":699},[178,36707,36672],{"class":195},[178,36709,2318],{"class":319},[178,36711,32606],{"class":6985},[178,36713,330],{"class":699},[178,36715,36672],{"class":195},[178,36717,2318],{"class":319},[178,36719,32615],{"class":6985},[178,36721,330],{"class":699},[178,36723,2021],{"class":195},[178,36725,2318],{"class":319},[178,36727,32624],{"class":6985},[178,36729,330],{"class":699},[178,36731,1665],{"class":195},[178,36733,863],{"class":319},[178,36735,36736,36738,36741,36743,36745,36747,36749,36751,36753,36755,36757,36759,36761,36763,36765,36767,36769,36771,36773,36775],{"class":180,"line":798},[178,36737,32586],{"class":195},[178,36739,36740],{"class":319},".c7",[178,36742,330],{"class":699},[178,36744,32594],{"class":319},[178,36746,32597],{"class":6985},[178,36748,330],{"class":699},[178,36750,36672],{"class":195},[178,36752,2318],{"class":319},[178,36754,32606],{"class":6985},[178,36756,330],{"class":699},[178,36758,36602],{"class":195},[178,36760,2318],{"class":319},[178,36762,32615],{"class":6985},[178,36764,330],{"class":699},[178,36766,2021],{"class":195},[178,36768,2318],{"class":319},[178,36770,32624],{"class":6985},[178,36772,330],{"class":699},[178,36774,1665],{"class":195},[178,36776,863],{"class":319},[178,36778,36779,36781,36784,36786,36788,36790,36792,36794,36796,36798,36800,36802],{"class":180,"line":804},[178,36780,32586],{"class":195},[178,36782,36783],{"class":319},".s8",[178,36785,330],{"class":699},[178,36787,36561],{"class":319},[178,36789,32615],{"class":6985},[178,36791,330],{"class":699},[178,36793,2021],{"class":195},[178,36795,2318],{"class":319},[178,36797,32670],{"class":6985},[178,36799,330],{"class":699},[178,36801,1669],{"class":195},[178,36803,863],{"class":319},[178,36805,36806],{"class":180,"line":810},[178,36807,32743],{"class":2008},[178,36809,36810,36812,36814,36816],{"class":180,"line":816},[178,36811,32586],{"class":195},[178,36813,32750],{"class":319},[178,36815,330],{"class":699},[178,36817,32755],{"class":319},[178,36819,36820],{"class":180,"line":822},[178,36821,36822],{"class":2008},"       # 定义全连接层\n",[178,36824,36825,36827,36830,36832,36834,36836,36838,36840,36842,36844,36846,36849],{"class":180,"line":827},[178,36826,32586],{"class":195},[178,36828,36829],{"class":319},".f1",[178,36831,330],{"class":699},[178,36833,32772],{"class":319},[178,36835,2284],{"class":195},[178,36837,2395],{"class":699},[178,36839,2284],{"class":195},[178,36841,2395],{"class":699},[178,36843,36602],{"class":195},[178,36845,2318],{"class":319},[178,36847,36848],{"class":195},"4096",[178,36850,863],{"class":319},[178,36852,36853,36855,36858,36860,36862,36864,36866,36868],{"class":180,"line":832},[178,36854,32586],{"class":195},[178,36856,36857],{"class":319},".f2",[178,36859,330],{"class":699},[178,36861,32772],{"class":319},[178,36863,36848],{"class":195},[178,36865,2318],{"class":319},[178,36867,36848],{"class":195},[178,36869,863],{"class":319},[178,36871,36872,36874,36877,36879,36881,36883,36885,36887],{"class":180,"line":850},[178,36873,32586],{"class":195},[178,36875,36876],{"class":319},".f3",[178,36878,330],{"class":699},[178,36880,32772],{"class":319},[178,36882,36848],{"class":195},[178,36884,2318],{"class":319},[178,36886,2386],{"class":195},[178,36888,863],{"class":319},[178,36890,36891],{"class":180,"line":866},[178,36892,722],{"emptyLinePlaceholder":721},[178,36894,36895],{"class":180,"line":877},[178,36896,36897],{"class":2008},"    # 定义前向传播\n",[178,36899,36900,36902,36904],{"class":180,"line":882},[178,36901,32542],{"class":699},[178,36903,32834],{"class":184},[178,36905,32837],{"class":319},[178,36907,36908,36910,36912,36914,36917,36919],{"class":180,"line":898},[178,36909,32842],{"class":319},[178,36911,330],{"class":699},[178,36913,32564],{"class":195},[178,36915,36916],{"class":319},".ReLu(",[178,36918,32564],{"class":195},[178,36920,32854],{"class":319},[178,36922,36923,36925,36927,36929],{"class":180,"line":914},[178,36924,32842],{"class":319},[178,36926,330],{"class":699},[178,36928,32564],{"class":195},[178,36930,32865],{"class":319},[178,36932,36933,36935,36937,36939,36941,36943],{"class":180,"line":919},[178,36934,32842],{"class":319},[178,36936,330],{"class":699},[178,36938,32564],{"class":195},[178,36940,36916],{"class":319},[178,36942,32564],{"class":195},[178,36944,32880],{"class":319},[178,36946,36947,36949,36951,36953],{"class":180,"line":935},[178,36948,32842],{"class":319},[178,36950,330],{"class":699},[178,36952,32564],{"class":195},[178,36954,32891],{"class":319},[178,36956,36957,36959,36961,36963,36965,36967],{"class":180,"line":952},[178,36958,32842],{"class":319},[178,36960,330],{"class":699},[178,36962,32564],{"class":195},[178,36964,36916],{"class":319},[178,36966,32564],{"class":195},[178,36968,36969],{"class":319},".c5(x))\n",[178,36971,36972,36974,36976,36978,36980,36982],{"class":180,"line":966},[178,36973,32842],{"class":319},[178,36975,330],{"class":699},[178,36977,32564],{"class":195},[178,36979,36916],{"class":319},[178,36981,32564],{"class":195},[178,36983,36984],{"class":319},".c6(x))\n",[178,36986,36987,36989,36991,36993,36995,36997],{"class":180,"line":980},[178,36988,32842],{"class":319},[178,36990,330],{"class":699},[178,36992,32564],{"class":195},[178,36994,36916],{"class":319},[178,36996,32564],{"class":195},[178,36998,36999],{"class":319},".c7(x))\n",[178,37001,37002,37004,37006,37008],{"class":180,"line":985},[178,37003,32842],{"class":319},[178,37005,330],{"class":699},[178,37007,32564],{"class":195},[178,37009,37010],{"class":319},".s8(x)\n",[178,37012,37013],{"class":180,"line":1008},[178,37014,722],{"emptyLinePlaceholder":721},[178,37016,37017],{"class":180,"line":1014},[178,37018,37019],{"class":2008},"        # 展平加线性全连接层\n",[178,37021,37022,37024,37026,37028],{"class":180,"line":1019},[178,37023,32842],{"class":319},[178,37025,330],{"class":699},[178,37027,32564],{"class":195},[178,37029,32902],{"class":319},[178,37031,37032,37034,37036,37038,37040,37042],{"class":180,"line":1033},[178,37033,32842],{"class":319},[178,37035,330],{"class":699},[178,37037,32564],{"class":195},[178,37039,36916],{"class":319},[178,37041,32564],{"class":195},[178,37043,37044],{"class":319},".f1(x))\n",[178,37046,37047],{"class":180,"line":1046},[178,37048,37049],{"class":2008},"        # 还需要dropout对神经元随机进行失活\n",[178,37051,37052,37054,37056,37059,37062],{"class":180,"line":1059},[178,37053,32842],{"class":319},[178,37055,330],{"class":699},[178,37057,37058],{"class":319},"F.dropout(x,",[178,37060,37061],{"class":195},"0.5",[178,37063,863],{"class":319},[178,37065,37066,37068,37070,37072,37074,37076],{"class":180,"line":1072},[178,37067,32842],{"class":319},[178,37069,330],{"class":699},[178,37071,32564],{"class":195},[178,37073,36916],{"class":319},[178,37075,32564],{"class":195},[178,37077,37078],{"class":319},".f2(x))\n",[178,37080,37081,37083,37085,37087,37089],{"class":180,"line":1077},[178,37082,32842],{"class":319},[178,37084,330],{"class":699},[178,37086,37058],{"class":319},[178,37088,37061],{"class":195},[178,37090,863],{"class":319},[178,37092,37093],{"class":180,"line":1082},[178,37094,37095],{"class":2008},"        # 直接输出\n",[178,37097,37098,37100,37102,37104],{"class":180,"line":1099},[178,37099,32842],{"class":319},[178,37101,330],{"class":699},[178,37103,32564],{"class":195},[178,37105,37106],{"class":319},".f3(x)\n",[178,37108,37109],{"class":180,"line":9806},[178,37110,37111],{"class":2008},"        # 前向传播输出\n",[178,37113,37114,37116],{"class":180,"line":9818},[178,37115,16511],{"class":699},[178,37117,32950],{"class":319},[178,37119,37120],{"class":180,"line":11477},[178,37121,37122],{"class":2008},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[178,37124,37125,37127,37129,37131,37133],{"class":180,"line":11502},[178,37126,1085],{"class":699},[178,37128,1088],{"class":195},[178,37130,4725],{"class":699},[178,37132,32965],{"class":188},[178,37134,847],{"class":319},[178,37136,37137,37139,37141,37143,37145,37147,37149,37151,37153],{"class":180,"line":11525},[178,37138,32977],{"class":319},[178,37140,330],{"class":699},[178,37142,32193],{"class":319},[178,37144,32984],{"class":188},[178,37146,3499],{"class":699},[178,37148,32989],{"class":319},[178,37150,3496],{"class":699},[178,37152,32218],{"class":188},[178,37154,863],{"class":319},[178,37156,37157],{"class":180,"line":11549},[178,37158,37159],{"class":2008},"    # 模型实例化，然后将实例化的模型放到设备中\n",[178,37161,37162,37164,37166],{"class":180,"line":11554},[178,37163,33029],{"class":319},[178,37165,330],{"class":699},[178,37167,37168],{"class":319},"AlexNet().to(device)\n",[178,37170,37171,37173,37175,37177,37179,37182,37184,37186],{"class":180,"line":11559},[178,37172,1022],{"class":195},[178,37174,33041],{"class":319},[178,37176,1665],{"class":195},[178,37178,2318],{"class":319},[178,37180,37181],{"class":195},"227",[178,37183,2318],{"class":319},[178,37185,37181],{"class":195},[178,37187,33054],{"class":319},[26,37189,37190],{"start":263},[29,37191,33067],{},[154,37193,37195],{"className":690,"code":37194,"language":692,"meta":160,"style":160},"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",[70,37196,37197,37203,37209,37219,37225,37235,37245,37255,37265,37275,37279,37290,37300,37304,37308,37312,37320,37332,37342,37358,37368,37400,37414,37424,37434,37438,37448,37462,37472,37482,37492,37498,37502,37506,37510,37514,37518,37526,37546,37550,37554,37558,37562,37566,37582,37586,37590,37598,37602,37606,37614,37618,37622,37626,37634,37638,37642,37646,37650,37658,37662,37670,37674,37682,37686,37694,37698,37706,37710,37714,37722,37726,37730,37734,37746,37770,37784,37788,37792,37796,37804,37808,37816,37820,37828,37832,37840,37844,37852,37856,37864,37868,37880,37884,37892,37896,37904,37908,37912,37916,37920,37928,37932,37948,37952,37960,37964,37968,37972,37976,37980,37984,37988,38004,38008,38020,38024,38036,38040,38052,38056,38064,38068,38076,38080,38084,38089,38095,38099,38108,38112,38129,38133,38142,38146,38164,38177,38182,38195,38199,38203,38211,38215,38219,38227,38231,38239,38243,38251,38255,38259,38301,38343,38347,38351,38367,38371,38387,38391,38395,38403,38407,38411,38423,38461,38466,38471,38480,38484,38498,38508,38514,38520,38526,38532,38536,38540,38546,38550,38554,38562,38566,38584,38588,38592,38596,38612,38616,38620,38624,38628,38632,38652,38672,38676,38680,38684,38692,38700,38704,38720,38740,38760,38764,38768,38776,38784,38788,38792,38796,38808,38812,38822,38830,38847],{"__ignoreMap":160},[178,37198,37199,37201],{"class":180,"line":181},[178,37200,700],{"class":699},[178,37202,33557],{"class":319},[178,37204,37205,37207],{"class":180,"line":263},[178,37206,700],{"class":699},[178,37208,33564],{"class":319},[178,37210,37211,37213,37215,37217],{"class":180,"line":274},[178,37212,700],{"class":699},[178,37214,33575],{"class":319},[178,37216,713],{"class":699},[178,37218,33580],{"class":319},[178,37220,37221,37223],{"class":180,"line":354},[178,37222,700],{"class":699},[178,37224,32138],{"class":319},[178,37226,37227,37229,37231,37233],{"class":180,"line":364},[178,37228,32479],{"class":699},[178,37230,33151],{"class":319},[178,37232,700],{"class":699},[178,37234,33597],{"class":319},[178,37236,37237,37239,37241,37243],{"class":180,"line":740},[178,37238,32479],{"class":699},[178,37240,33107],{"class":319},[178,37242,700],{"class":699},[178,37244,33112],{"class":319},[178,37246,37247,37249,37251,37253],{"class":180,"line":746},[178,37248,32479],{"class":699},[178,37250,33134],{"class":319},[178,37252,700],{"class":699},[178,37254,33139],{"class":319},[178,37256,37257,37259,37261,37263],{"class":180,"line":752},[178,37258,700],{"class":699},[178,37260,33151],{"class":319},[178,37262,713],{"class":699},[178,37264,33156],{"class":319},[178,37266,37267,37269,37271,37273],{"class":180,"line":757},[178,37268,700],{"class":699},[178,37270,33168],{"class":319},[178,37272,713],{"class":699},[178,37274,33173],{"class":319},[178,37276,37277],{"class":180,"line":763},[178,37278,33642],{"class":2008},[178,37280,37281,37283,37285,37287],{"class":180,"line":769},[178,37282,32479],{"class":699},[178,37284,33649],{"class":319},[178,37286,700],{"class":699},[178,37288,37289],{"class":319}," AlexNet\n",[178,37291,37292,37294,37296,37298],{"class":180,"line":774},[178,37293,32479],{"class":699},[178,37295,32482],{"class":319},[178,37297,700],{"class":699},[178,37299,32487],{"class":319},[178,37301,37302],{"class":180,"line":780},[178,37303,722],{"emptyLinePlaceholder":721},[178,37305,37306],{"class":180,"line":786},[178,37307,722],{"emptyLinePlaceholder":721},[178,37309,37310],{"class":180,"line":792},[178,37311,33677],{"class":2008},[178,37313,37314,37316,37318],{"class":180,"line":798},[178,37315,835],{"class":699},[178,37317,33684],{"class":184},[178,37319,33687],{"class":319},[178,37321,37322,37324,37326,37328,37330],{"class":180,"line":804},[178,37323,33692],{"class":319},[178,37325,330],{"class":699},[178,37327,33191],{"class":319},[178,37329,33199],{"class":188},[178,37331,33202],{"class":319},[178,37333,37334,37336,37338,37340],{"class":180,"line":810},[178,37335,33705],{"class":6985},[178,37337,330],{"class":699},[178,37339,33212],{"class":195},[178,37341,33202],{"class":319},[178,37343,37344,37346,37348,37350,37352,37354,37356],{"class":180,"line":816},[178,37345,33716],{"class":6985},[178,37347,330],{"class":699},[178,37349,33229],{"class":319},[178,37351,554],{"class":6985},[178,37353,330],{"class":699},[178,37355,37181],{"class":195},[178,37357,33239],{"class":319},[178,37359,37360,37362,37364,37366],{"class":180,"line":822},[178,37361,33733],{"class":6985},[178,37363,330],{"class":699},[178,37365,33212],{"class":195},[178,37367,863],{"class":319},[178,37369,37370,37372,37374,37376,37378,37380,37382,37384,37386,37388,37390,37392,37394,37396,37398],{"class":180,"line":827},[178,37371,33744],{"class":319},[178,37373,330],{"class":699},[178,37375,33749],{"class":319},[178,37377,33752],{"class":195},[178,37379,944],{"class":319},[178,37381,33757],{"class":195},[178,37383,2395],{"class":699},[178,37385,9127],{"class":195},[178,37387,33764],{"class":319},[178,37389,33752],{"class":195},[178,37391,944],{"class":319},[178,37393,648],{"class":195},[178,37395,2395],{"class":699},[178,37397,9127],{"class":195},[178,37399,33777],{"class":319},[178,37401,37402,37404,37406,37408,37410,37412],{"class":180,"line":832},[178,37403,33782],{"class":319},[178,37405,330],{"class":699},[178,37407,33787],{"class":319},[178,37409,33272],{"class":6985},[178,37411,330],{"class":699},[178,37413,33277],{"class":319},[178,37415,37416,37418,37420,37422],{"class":180,"line":850},[178,37417,33798],{"class":6985},[178,37419,330],{"class":699},[178,37421,33803],{"class":195},[178,37423,33202],{"class":319},[178,37425,37426,37428,37430,37432],{"class":180,"line":866},[178,37427,33810],{"class":6985},[178,37429,330],{"class":699},[178,37431,33212],{"class":195},[178,37433,33202],{"class":319},[178,37435,37436],{"class":180,"line":877},[178,37437,33821],{"class":2008},[178,37439,37440,37442,37444,37446],{"class":180,"line":882},[178,37441,33826],{"class":6985},[178,37443,330],{"class":699},[178,37445,2335],{"class":195},[178,37447,863],{"class":319},[178,37449,37450,37452,37454,37456,37458,37460],{"class":180,"line":898},[178,37451,33837],{"class":319},[178,37453,330],{"class":699},[178,37455,33269],{"class":319},[178,37457,33272],{"class":6985},[178,37459,330],{"class":699},[178,37461,33848],{"class":319},[178,37463,37464,37466,37468,37470],{"class":180,"line":914},[178,37465,33853],{"class":6985},[178,37467,330],{"class":699},[178,37469,33803],{"class":195},[178,37471,33202],{"class":319},[178,37473,37474,37476,37478,37480],{"class":180,"line":919},[178,37475,33864],{"class":6985},[178,37477,330],{"class":699},[178,37479,33212],{"class":195},[178,37481,33202],{"class":319},[178,37483,37484,37486,37488,37490],{"class":180,"line":935},[178,37485,33875],{"class":6985},[178,37487,330],{"class":699},[178,37489,2335],{"class":195},[178,37491,863],{"class":319},[178,37493,37494,37496],{"class":180,"line":952},[178,37495,5862],{"class":699},[178,37497,33888],{"class":319},[178,37499,37500],{"class":180,"line":966},[178,37501,722],{"emptyLinePlaceholder":721},[178,37503,37504],{"class":180,"line":980},[178,37505,33897],{"class":2008},[178,37507,37508],{"class":180,"line":985},[178,37509,33902],{"class":2008},[178,37511,37512],{"class":180,"line":1008},[178,37513,722],{"emptyLinePlaceholder":721},[178,37515,37516],{"class":180,"line":1014},[178,37517,33911],{"class":2008},[178,37519,37520,37522,37524],{"class":180,"line":1019},[178,37521,835],{"class":699},[178,37523,33918],{"class":184},[178,37525,33921],{"class":319},[178,37527,37528,37530,37532,37534,37536,37538,37540,37542,37544],{"class":180,"line":1033},[178,37529,32977],{"class":319},[178,37531,330],{"class":699},[178,37533,32193],{"class":319},[178,37535,32984],{"class":188},[178,37537,3499],{"class":699},[178,37539,32989],{"class":319},[178,37541,3496],{"class":699},[178,37543,33940],{"class":188},[178,37545,863],{"class":319},[178,37547,37548],{"class":180,"line":1046},[178,37549,722],{"emptyLinePlaceholder":721},[178,37551,37552],{"class":180,"line":1059},[178,37553,722],{"emptyLinePlaceholder":721},[178,37555,37556],{"class":180,"line":1072},[178,37557,33955],{"class":2008},[178,37559,37560],{"class":180,"line":1077},[178,37561,33960],{"class":2008},[178,37563,37564],{"class":180,"line":1082},[178,37565,33965],{"class":2008},[178,37567,37568,37570,37572,37574,37576,37578,37580],{"class":180,"line":1099},[178,37569,33970],{"class":319},[178,37571,330],{"class":699},[178,37573,33975],{"class":319},[178,37575,33978],{"class":6985},[178,37577,330],{"class":699},[178,37579,33983],{"class":195},[178,37581,863],{"class":319},[178,37583,37584],{"class":180,"line":9806},[178,37585,722],{"emptyLinePlaceholder":721},[178,37587,37588],{"class":180,"line":9818},[178,37589,33994],{"class":2008},[178,37591,37592,37594,37596],{"class":180,"line":11477},[178,37593,33999],{"class":319},[178,37595,330],{"class":699},[178,37597,34004],{"class":319},[178,37599,37600],{"class":180,"line":11502},[178,37601,722],{"emptyLinePlaceholder":721},[178,37603,37604],{"class":180,"line":11525},[178,37605,34013],{"class":2008},[178,37607,37608,37610,37612],{"class":180,"line":11549},[178,37609,33029],{"class":319},[178,37611,330],{"class":699},[178,37613,34022],{"class":319},[178,37615,37616],{"class":180,"line":11554},[178,37617,34027],{"class":2008},[178,37619,37620],{"class":180,"line":11559},[178,37621,34032],{"class":2008},[178,37623,37624],{"class":180,"line":11564},[178,37625,34037],{"class":2008},[178,37627,37628,37630,37632],{"class":180,"line":11573},[178,37629,34042],{"class":319},[178,37631,330],{"class":699},[178,37633,34047],{"class":319},[178,37635,37636],{"class":180,"line":11578},[178,37637,722],{"emptyLinePlaceholder":721},[178,37639,37640],{"class":180,"line":11584},[178,37641,722],{"emptyLinePlaceholder":721},[178,37643,37644],{"class":180,"line":11605},[178,37645,34060],{"class":2008},[178,37647,37648],{"class":180,"line":11611},[178,37649,34065],{"class":2008},[178,37651,37652,37654,37656],{"class":180,"line":11625},[178,37653,34070],{"class":319},[178,37655,330],{"class":699},[178,37657,34075],{"class":195},[178,37659,37660],{"class":180,"line":11631},[178,37661,34080],{"class":2008},[178,37663,37664,37666,37668],{"class":180,"line":11658},[178,37665,34085],{"class":319},[178,37667,330],{"class":699},[178,37669,34090],{"class":319},[178,37671,37672],{"class":180,"line":11667},[178,37673,34095],{"class":2008},[178,37675,37676,37678,37680],{"class":180,"line":11673},[178,37677,34100],{"class":319},[178,37679,330],{"class":699},[178,37681,34090],{"class":319},[178,37683,37684],{"class":180,"line":11681},[178,37685,34109],{"class":2008},[178,37687,37688,37690,37692],{"class":180,"line":11686},[178,37689,34114],{"class":319},[178,37691,330],{"class":699},[178,37693,34090],{"class":319},[178,37695,37696],{"class":180,"line":18362},[178,37697,34123],{"class":2008},[178,37699,37700,37702,37704],{"class":180,"line":18368},[178,37701,34128],{"class":319},[178,37703,330],{"class":699},[178,37705,34090],{"class":319},[178,37707,37708],{"class":180,"line":18391},[178,37709,722],{"emptyLinePlaceholder":721},[178,37711,37712],{"class":180,"line":18397},[178,37713,34141],{"class":2008},[178,37715,37716,37718,37720],{"class":180,"line":18420},[178,37717,34146],{"class":319},[178,37719,330],{"class":699},[178,37721,34151],{"class":319},[178,37723,37724],{"class":180,"line":18434},[178,37725,722],{"emptyLinePlaceholder":721},[178,37727,37728],{"class":180,"line":18454},[178,37729,722],{"emptyLinePlaceholder":721},[178,37731,37732],{"class":180,"line":18460},[178,37733,34164],{"class":2008},[178,37735,37736,37738,37740,37742,37744],{"class":180,"line":18471},[178,37737,988],{"class":699},[178,37739,34171],{"class":319},[178,37741,994],{"class":699},[178,37743,997],{"class":195},[178,37745,34178],{"class":319},[178,37747,37748,37750,37752,37754,37756,37758,37760,37762,37764,37766,37768],{"class":180,"line":18494},[178,37749,34183],{"class":195},[178,37751,944],{"class":319},[178,37753,34188],{"class":188},[178,37755,34191],{"class":195},[178,37757,2524],{"class":188},[178,37759,34191],{"class":195},[178,37761,2191],{"class":188},[178,37763,34200],{"class":319},[178,37765,2472],{"class":699},[178,37767,1665],{"class":195},[178,37769,32239],{"class":319},[178,37771,37772,37774,37776,37778,37780,37782],{"class":180,"line":18516},[178,37773,34183],{"class":195},[178,37775,944],{"class":319},[178,37777,34215],{"class":188},[178,37779,2395],{"class":699},[178,37781,2386],{"class":195},[178,37783,863],{"class":319},[178,37785,37786],{"class":180,"line":18521},[178,37787,722],{"emptyLinePlaceholder":721},[178,37789,37790],{"class":180,"line":18527},[178,37791,34230],{"class":2008},[178,37793,37794],{"class":180,"line":18541},[178,37795,34235],{"class":2008},[178,37797,37798,37800,37802],{"class":180,"line":18554},[178,37799,34240],{"class":319},[178,37801,330],{"class":699},[178,37803,34075],{"class":195},[178,37805,37806],{"class":180,"line":18559},[178,37807,34249],{"class":2008},[178,37809,37810,37812,37814],{"class":180,"line":18573},[178,37811,34254],{"class":319},[178,37813,330],{"class":699},[178,37815,4860],{"class":195},[178,37817,37818],{"class":180,"line":18578},[178,37819,34263],{"class":2008},[178,37821,37822,37824,37826],{"class":180,"line":18584},[178,37823,34268],{"class":319},[178,37825,330],{"class":699},[178,37827,34075],{"class":195},[178,37829,37830],{"class":180,"line":18589},[178,37831,34277],{"class":2008},[178,37833,37834,37836,37838],{"class":180,"line":18603},[178,37835,34282],{"class":319},[178,37837,330],{"class":699},[178,37839,4860],{"class":195},[178,37841,37842],{"class":180,"line":18608},[178,37843,34291],{"class":2008},[178,37845,37846,37848,37850],{"class":180,"line":18613},[178,37847,34296],{"class":319},[178,37849,330],{"class":699},[178,37851,4860],{"class":195},[178,37853,37854],{"class":180,"line":18627},[178,37855,34305],{"class":2008},[178,37857,37858,37860,37862],{"class":180,"line":18639},[178,37859,34310],{"class":319},[178,37861,330],{"class":699},[178,37863,4860],{"class":195},[178,37865,37866],{"class":180,"line":18644},[178,37867,34319],{"class":2008},[178,37869,37870,37872,37874,37876,37878],{"class":180,"line":18657},[178,37871,5176],{"class":699},[178,37873,33336],{"class":319},[178,37875,994],{"class":699},[178,37877,33341],{"class":195},[178,37879,34332],{"class":319},[178,37881,37882],{"class":180,"line":18662},[178,37883,34337],{"class":2008},[178,37885,37886,37888,37890],{"class":180,"line":18667},[178,37887,34342],{"class":319},[178,37889,330],{"class":699},[178,37891,34347],{"class":319},[178,37893,37894],{"class":180,"line":18672},[178,37895,34352],{"class":2008},[178,37897,37898,37900,37902],{"class":180,"line":18685},[178,37899,34357],{"class":319},[178,37901,330],{"class":699},[178,37903,34362],{"class":319},[178,37905,37906],{"class":180,"line":18690},[178,37907,34368],{"class":2008},[178,37909,37910],{"class":180,"line":34365},[178,37911,34374],{"class":319},[178,37913,37914],{"class":180,"line":34371},[178,37915,34380],{"class":2008},[178,37917,37918],{"class":180,"line":34377},[178,37919,34386],{"class":2008},[178,37921,37922,37924,37926],{"class":180,"line":34383},[178,37923,34392],{"class":319},[178,37925,330],{"class":699},[178,37927,34397],{"class":319},[178,37929,37930],{"class":180,"line":34389},[178,37931,34403],{"class":2008},[178,37933,37934,37936,37938,37940,37942,37944,37946],{"class":180,"line":34400},[178,37935,34409],{"class":319},[178,37937,330],{"class":699},[178,37939,34414],{"class":319},[178,37941,34417],{"class":6985},[178,37943,330],{"class":699},[178,37945,1665],{"class":195},[178,37947,863],{"class":319},[178,37949,37950],{"class":180,"line":34406},[178,37951,34429],{"class":2008},[178,37953,37954,37956,37958],{"class":180,"line":34426},[178,37955,34435],{"class":319},[178,37957,330],{"class":699},[178,37959,34440],{"class":319},[178,37961,37962],{"class":180,"line":34432},[178,37963,34446],{"class":2008},[178,37965,37966],{"class":180,"line":34443},[178,37967,34452],{"class":319},[178,37969,37970],{"class":180,"line":34449},[178,37971,34458],{"class":2008},[178,37973,37974],{"class":180,"line":34455},[178,37975,34464],{"class":319},[178,37977,37978],{"class":180,"line":34461},[178,37979,34470],{"class":2008},[178,37981,37982],{"class":180,"line":34467},[178,37983,34476],{"class":319},[178,37985,37986],{"class":180,"line":34473},[178,37987,34482],{"class":2008},[178,37989,37990,37992,37994,37996,37998,38000,38002],{"class":180,"line":34479},[178,37991,34488],{"class":319},[178,37993,11238],{"class":699},[178,37995,34493],{"class":319},[178,37997,2395],{"class":699},[178,37999,34498],{"class":319},[178,38001,2133],{"class":195},[178,38003,863],{"class":319},[178,38005,38006],{"class":180,"line":34485},[178,38007,34508],{"class":2008},[178,38009,38010,38012,38014,38016,38018],{"class":180,"line":34505},[178,38011,34514],{"class":319},[178,38013,11238],{"class":699},[178,38015,34519],{"class":319},[178,38017,4725],{"class":699},[178,38019,34524],{"class":319},[178,38021,38022],{"class":180,"line":34511},[178,38023,34530],{"class":2008},[178,38025,38026,38028,38030,38032,38034],{"class":180,"line":34527},[178,38027,34536],{"class":319},[178,38029,11238],{"class":699},[178,38031,34498],{"class":319},[178,38033,2133],{"class":195},[178,38035,863],{"class":319},[178,38037,38038],{"class":180,"line":34533},[178,38039,34550],{"class":2008},[178,38041,38042,38044,38046,38048,38050],{"class":180,"line":34547},[178,38043,5176],{"class":699},[178,38045,34558],{"class":319},[178,38047,994],{"class":699},[178,38049,33341],{"class":195},[178,38051,34565],{"class":319},[178,38053,38054],{"class":180,"line":34553},[178,38055,34571],{"class":2008},[178,38057,38058,38060,38062],{"class":180,"line":34568},[178,38059,34342],{"class":319},[178,38061,330],{"class":699},[178,38063,34347],{"class":319},[178,38065,38066],{"class":180,"line":34574},[178,38067,34586],{"class":2008},[178,38069,38070,38072,38074],{"class":180,"line":34583},[178,38071,34357],{"class":319},[178,38073,330],{"class":699},[178,38075,34362],{"class":319},[178,38077,38078],{"class":180,"line":34589},[178,38079,34601],{"class":2008},[178,38081,38082],{"class":180,"line":34598},[178,38083,34607],{"class":319},[178,38085,38086],{"class":180,"line":34604},[178,38087,38088],{"class":2008},"            # 验证时不计算梯度以节省内存\u002F计算\n",[178,38090,38091,38093],{"class":180,"line":34610},[178,38092,34613],{"class":699},[178,38094,34616],{"class":319},[178,38096,38097],{"class":180,"line":34619},[178,38098,34622],{"class":2008},[178,38100,38101,38104,38106],{"class":180,"line":34625},[178,38102,38103],{"class":319},"                output",[178,38105,330],{"class":699},[178,38107,34397],{"class":319},[178,38109,38110],{"class":180,"line":34636},[178,38111,34639],{"class":2008},[178,38113,38114,38117,38119,38121,38123,38125,38127],{"class":180,"line":34642},[178,38115,38116],{"class":319},"                pre_lab",[178,38118,330],{"class":699},[178,38120,34414],{"class":319},[178,38122,34417],{"class":6985},[178,38124,330],{"class":699},[178,38126,1665],{"class":195},[178,38128,863],{"class":319},[178,38130,38131],{"class":180,"line":34661},[178,38132,34664],{"class":2008},[178,38134,38135,38138,38140],{"class":180,"line":34667},[178,38136,38137],{"class":319},"                val_batch_loss",[178,38139,330],{"class":699},[178,38141,34440],{"class":319},[178,38143,38144],{"class":180,"line":34678},[178,38145,34681],{"class":2008},[178,38147,38148,38151,38153,38156,38158,38160,38162],{"class":180,"line":34684},[178,38149,38150],{"class":319},"                val_loss",[178,38152,11238],{"class":699},[178,38154,38155],{"class":319},"val_batch_loss.item()",[178,38157,2395],{"class":699},[178,38159,34498],{"class":319},[178,38161,2133],{"class":195},[178,38163,863],{"class":319},[178,38165,38166,38169,38171,38173,38175],{"class":180,"line":34704},[178,38167,38168],{"class":319},"                val_corrects",[178,38170,11238],{"class":699},[178,38172,34519],{"class":319},[178,38174,4725],{"class":699},[178,38176,34524],{"class":319},[178,38178,38179],{"class":180,"line":34720},[178,38180,38181],{"class":2008},"            # 当前用于验证的样本数量\n",[178,38183,38184,38187,38189,38191,38193],{"class":180,"line":34726},[178,38185,38186],{"class":319},"            val_num",[178,38188,11238],{"class":699},[178,38190,34498],{"class":319},[178,38192,2133],{"class":195},[178,38194,863],{"class":319},[178,38196,38197],{"class":180,"line":34740},[178,38198,34743],{"class":2008},[178,38200,38201],{"class":180,"line":34746},[178,38202,34749],{"class":2008},[178,38204,38205,38207,38209],{"class":180,"line":34752},[178,38206,34755],{"class":319},[178,38208,2524],{"class":699},[178,38210,34760],{"class":319},[178,38212,38213],{"class":180,"line":34763},[178,38214,34766],{"class":2008},[178,38216,38217],{"class":180,"line":34769},[178,38218,34772],{"class":2008},[178,38220,38221,38223,38225],{"class":180,"line":34775},[178,38222,34778],{"class":319},[178,38224,2524],{"class":699},[178,38226,34760],{"class":319},[178,38228,38229],{"class":180,"line":34785},[178,38230,34788],{"class":2008},[178,38232,38233,38235,38237],{"class":180,"line":34791},[178,38234,34794],{"class":319},[178,38236,2524],{"class":699},[178,38238,34799],{"class":319},[178,38240,38241],{"class":180,"line":34802},[178,38242,34805],{"class":2008},[178,38244,38245,38247,38249],{"class":180,"line":34808},[178,38246,34811],{"class":319},[178,38248,2524],{"class":699},[178,38250,34799],{"class":319},[178,38252,38253],{"class":180,"line":34818},[178,38254,722],{"emptyLinePlaceholder":721},[178,38256,38257],{"class":180,"line":34823},[178,38258,34826],{"class":2008},[178,38260,38261,38263,38265,38267,38269,38271,38273,38275,38277,38279,38281,38283,38285,38287,38289,38291,38293,38295,38297,38299],{"class":180,"line":34829},[178,38262,34183],{"class":195},[178,38264,944],{"class":319},[178,38266,5365],{"class":188},[178,38268,34191],{"class":195},[178,38270,34840],{"class":188},[178,38272,2836],{"class":195},[178,38274,34845],{"class":699},[178,38276,2885],{"class":195},[178,38278,34850],{"class":188},[178,38280,2836],{"class":195},[178,38282,34845],{"class":699},[178,38284,2885],{"class":195},[178,38286,5365],{"class":188},[178,38288,34861],{"class":319},[178,38290,2472],{"class":699},[178,38292,1665],{"class":195},[178,38294,34868],{"class":319},[178,38296,2472],{"class":699},[178,38298,1665],{"class":195},[178,38300,34875],{"class":319},[178,38302,38303,38305,38307,38309,38311,38313,38315,38317,38319,38321,38323,38325,38327,38329,38331,38333,38335,38337,38339,38341],{"class":180,"line":34878},[178,38304,34183],{"class":195},[178,38306,944],{"class":319},[178,38308,5365],{"class":188},[178,38310,34191],{"class":195},[178,38312,34889],{"class":188},[178,38314,2836],{"class":195},[178,38316,34845],{"class":699},[178,38318,2885],{"class":195},[178,38320,34898],{"class":188},[178,38322,2836],{"class":195},[178,38324,34845],{"class":699},[178,38326,2885],{"class":195},[178,38328,5365],{"class":188},[178,38330,34909],{"class":319},[178,38332,2472],{"class":699},[178,38334,1665],{"class":195},[178,38336,34916],{"class":319},[178,38338,2472],{"class":699},[178,38340,1665],{"class":195},[178,38342,34875],{"class":319},[178,38344,38345],{"class":180,"line":34925},[178,38346,722],{"emptyLinePlaceholder":721},[178,38348,38349],{"class":180,"line":34930},[178,38350,34933],{"class":2008},[178,38352,38353,38355,38357,38359,38361,38363,38365],{"class":180,"line":34936},[178,38354,4280],{"class":699},[178,38356,34941],{"class":319},[178,38358,2472],{"class":699},[178,38360,1665],{"class":195},[178,38362,2879],{"class":319},[178,38364,2899],{"class":699},[178,38366,34952],{"class":319},[178,38368,38369],{"class":180,"line":34955},[178,38370,34958],{"class":2008},[178,38372,38373,38375,38377,38379,38381,38383,38385],{"class":180,"line":34961},[178,38374,34964],{"class":319},[178,38376,1991],{"class":195},[178,38378,330],{"class":699},[178,38380,34971],{"class":319},[178,38382,2472],{"class":699},[178,38384,1665],{"class":195},[178,38386,34978],{"class":319},[178,38388,38389],{"class":180,"line":34981},[178,38390,34984],{"class":2008},[178,38392,38393],{"class":180,"line":34987},[178,38394,34990],{"class":2008},[178,38396,38397,38399,38401],{"class":180,"line":34993},[178,38398,34996],{"class":319},[178,38400,330],{"class":699},[178,38402,34047],{"class":319},[178,38404,38405],{"class":180,"line":35003},[178,38406,722],{"emptyLinePlaceholder":721},[178,38408,38409],{"class":180,"line":35008},[178,38410,35011],{"class":2008},[178,38412,38413,38415,38417,38419,38421],{"class":180,"line":35014},[178,38414,35017],{"class":319},[178,38416,330],{"class":699},[178,38418,35022],{"class":319},[178,38420,2472],{"class":699},[178,38422,35027],{"class":319},[178,38424,38425,38427,38429,38431,38433,38435,38437,38439,38441,38443,38445,38447,38449,38451,38453,38455,38457,38459],{"class":180,"line":35030},[178,38426,34183],{"class":195},[178,38428,944],{"class":319},[178,38430,35037],{"class":188},[178,38432,2836],{"class":195},[178,38434,35042],{"class":699},[178,38436,2885],{"class":195},[178,38438,2484],{"class":188},[178,38440,2836],{"class":195},[178,38442,35042],{"class":699},[178,38444,2885],{"class":195},[178,38446,35055],{"class":188},[178,38448,35058],{"class":319},[178,38450,35061],{"class":699},[178,38452,2847],{"class":195},[178,38454,35066],{"class":319},[178,38456,2268],{"class":699},[178,38458,2847],{"class":195},[178,38460,32239],{"class":319},[178,38462,38463],{"class":180,"line":35075},[178,38464,38465],{"class":2008},"    # 选择最优参数并保存\n",[178,38467,38468],{"class":180,"line":35081},[178,38469,38470],{"class":2008},"    # 保存最佳模型权重字典\n",[178,38472,38473,38476,38478],{"class":180,"line":35087},[178,38474,38475],{"class":319},"    torch.save(best_model_wts,",[178,38477,35099],{"class":188},[178,38479,863],{"class":319},[178,38481,38482],{"class":180,"line":35093},[178,38483,35119],{"class":2008},[178,38485,38486,38488,38490,38492,38494,38496],{"class":180,"line":35104},[178,38487,35125],{"class":319},[178,38489,330],{"class":699},[178,38491,35130],{"class":319},[178,38493,35133],{"class":6985},[178,38495,330],{"class":699},[178,38497,3352],{"class":319},[178,38499,38500,38502,38504,38506],{"class":180,"line":35110},[178,38501,35143],{"class":188},[178,38503,2799],{"class":319},[178,38505,35148],{"class":195},[178,38507,35151],{"class":319},[178,38509,38510,38512],{"class":180,"line":35116},[178,38511,35157],{"class":188},[178,38513,35160],{"class":319},[178,38515,38516,38518],{"class":180,"line":35122},[178,38517,35166],{"class":188},[178,38519,35169],{"class":319},[178,38521,38522,38524],{"class":180,"line":35140},[178,38523,35175],{"class":188},[178,38525,35178],{"class":319},[178,38527,38528,38530],{"class":180,"line":35154},[178,38529,35184],{"class":188},[178,38531,35187],{"class":319},[178,38533,38534],{"class":180,"line":35163},[178,38535,35193],{"class":319},[178,38537,38538],{"class":180,"line":35172},[178,38539,35199],{"class":2008},[178,38541,38542,38544],{"class":180,"line":35181},[178,38543,5862],{"class":699},[178,38545,35207],{"class":319},[178,38547,38548],{"class":180,"line":35190},[178,38549,722],{"emptyLinePlaceholder":721},[178,38551,38552],{"class":180,"line":35196},[178,38553,35218],{"class":2008},[178,38555,38556,38558,38560],{"class":180,"line":35202},[178,38557,835],{"class":699},[178,38559,35226],{"class":184},[178,38561,35229],{"class":319},[178,38563,38564],{"class":180,"line":35210},[178,38565,35235],{"class":2008},[178,38567,38568,38570,38572,38574,38576,38578,38580,38582],{"class":180,"line":35215},[178,38569,35241],{"class":319},[178,38571,33428],{"class":6985},[178,38573,330],{"class":699},[178,38575,944],{"class":319},[178,38577,2438],{"class":195},[178,38579,2318],{"class":319},[178,38581,2233],{"class":195},[178,38583,32239],{"class":319},[178,38585,38586],{"class":180,"line":35221},[178,38587,35261],{"class":2008},[178,38589,38590],{"class":180,"line":35232},[178,38591,35267],{"class":2008},[178,38593,38594],{"class":180,"line":35238},[178,38595,35273],{"class":2008},[178,38597,38598,38600,38602,38604,38606,38608,38610],{"class":180,"line":35258},[178,38599,33462],{"class":319},[178,38601,1665],{"class":195},[178,38603,2318],{"class":319},[178,38605,1669],{"class":195},[178,38607,2318],{"class":319},[178,38609,1665],{"class":195},[178,38611,863],{"class":319},[178,38613,38614],{"class":180,"line":35264},[178,38615,35296],{"class":2008},[178,38617,38618],{"class":180,"line":35270},[178,38619,35302],{"class":2008},[178,38621,38622],{"class":180,"line":35276},[178,38623,35308],{"class":2008},[178,38625,38626],{"class":180,"line":35293},[178,38627,35314],{"class":2008},[178,38629,38630],{"class":180,"line":35299},[178,38631,35320],{"class":2008},[178,38633,38634,38636,38638,38640,38642,38644,38646,38648,38650],{"class":180,"line":35305},[178,38635,35326],{"class":319},[178,38637,35329],{"class":188},[178,38639,35332],{"class":319},[178,38641,35335],{"class":188},[178,38643,2318],{"class":319},[178,38645,35340],{"class":6985},[178,38647,330],{"class":699},[178,38649,35345],{"class":188},[178,38651,863],{"class":319},[178,38653,38654,38656,38658,38660,38662,38664,38666,38668,38670],{"class":180,"line":35311},[178,38655,35326],{"class":319},[178,38657,35329],{"class":188},[178,38659,35357],{"class":319},[178,38661,35360],{"class":188},[178,38663,2318],{"class":319},[178,38665,35340],{"class":6985},[178,38667,330],{"class":699},[178,38669,35369],{"class":188},[178,38671,863],{"class":319},[178,38673,38674],{"class":180,"line":35317},[178,38675,35377],{"class":2008},[178,38677,38678],{"class":180,"line":35323},[178,38679,35383],{"class":319},[178,38681,38682],{"class":180,"line":35350},[178,38683,35389],{"class":2008},[178,38685,38686,38688,38690],{"class":180,"line":35374},[178,38687,35395],{"class":319},[178,38689,35398],{"class":188},[178,38691,863],{"class":319},[178,38693,38694,38696,38698],{"class":180,"line":35380},[178,38695,35406],{"class":319},[178,38697,35409],{"class":188},[178,38699,863],{"class":319},[178,38701,38702],{"class":180,"line":35386},[178,38703,35417],{"class":2008},[178,38705,38706,38708,38710,38712,38714,38716,38718],{"class":180,"line":35392},[178,38707,33462],{"class":319},[178,38709,1665],{"class":195},[178,38711,2318],{"class":319},[178,38713,1669],{"class":195},[178,38715,2318],{"class":319},[178,38717,1669],{"class":195},[178,38719,863],{"class":319},[178,38721,38722,38724,38726,38728,38730,38732,38734,38736,38738],{"class":180,"line":35403},[178,38723,35326],{"class":319},[178,38725,35329],{"class":188},[178,38727,35444],{"class":319},[178,38729,35335],{"class":188},[178,38731,2318],{"class":319},[178,38733,35340],{"class":6985},[178,38735,330],{"class":699},[178,38737,35455],{"class":188},[178,38739,863],{"class":319},[178,38741,38742,38744,38746,38748,38750,38752,38754,38756,38758],{"class":180,"line":35414},[178,38743,35326],{"class":319},[178,38745,35329],{"class":188},[178,38747,35467],{"class":319},[178,38749,35360],{"class":188},[178,38751,2318],{"class":319},[178,38753,35340],{"class":6985},[178,38755,330],{"class":699},[178,38757,35478],{"class":188},[178,38759,863],{"class":319},[178,38761,38762],{"class":180,"line":35420},[178,38763,35486],{"class":2008},[178,38765,38766],{"class":180,"line":35437},[178,38767,35383],{"class":319},[178,38769,38770,38772,38774],{"class":180,"line":35460},[178,38771,35395],{"class":319},[178,38773,35329],{"class":188},[178,38775,863],{"class":319},[178,38777,38778,38780,38782],{"class":180,"line":35483},[178,38779,35406],{"class":319},[178,38781,35508],{"class":188},[178,38783,863],{"class":319},[178,38785,38786],{"class":180,"line":35489},[178,38787,35516],{"class":319},[178,38789,38790],{"class":180,"line":35494},[178,38791,722],{"emptyLinePlaceholder":721},[178,38793,38794],{"class":180,"line":35503},[178,38795,35527],{"class":2008},[178,38797,38798,38800,38802,38804,38806],{"class":180,"line":35513},[178,38799,1085],{"class":699},[178,38801,1088],{"class":195},[178,38803,4725],{"class":699},[178,38805,32965],{"class":188},[178,38807,847],{"class":319},[178,38809,38810],{"class":180,"line":35519},[178,38811,35546],{"class":2008},[178,38813,38814,38817,38819],{"class":180,"line":35524},[178,38815,38816],{"class":319},"    AlexNet",[178,38818,330],{"class":699},[178,38820,38821],{"class":319},"AlexNet()\n",[178,38823,38824,38826,38828],{"class":180,"line":35530},[178,38825,35563],{"class":319},[178,38827,330],{"class":699},[178,38829,35568],{"class":319},[178,38831,38832,38834,38836,38839,38841,38843,38845],{"class":180,"line":35543},[178,38833,35125],{"class":319},[178,38835,330],{"class":699},[178,38837,38838],{"class":319},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[178,38840,35581],{"class":6985},[178,38842,330],{"class":699},[178,38844,2640],{"class":195},[178,38846,863],{"class":319},[178,38848,38849],{"class":180,"line":35549},[178,38850,35593],{"class":319},[26,38852,38853],{"start":274},[29,38854,35606],{},[154,38856,38858],{"className":690,"code":38857,"language":692,"meta":160,"style":160},"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",[70,38859,38860,38866,38876,38886,38896,38900,38910,38920,38931,38935,38939,38943,38951,38967,38977,38993,39003,39017,39021,39031,39041,39051,39057,39061,39065,39073,39077,39093,39101,39105,39109,39117,39125,39129,39133,39137,39141,39147,39151,39161,39169,39177,39181,39185,39189,39197,39201,39217,39221,39225,39229,39241,39245,39257,39261,39265,39277,39281,39291,39295,39299,39311,39315,39323,39327,39331,39339,39343,39351,39355,39359,39363,39367,39371,39387,39395,39399,39403,39451,39457,39461,39471,39479,39487,39491,39495,39499,39503,39511,39515,39531,39535,39543,39551],{"__ignoreMap":160},[178,38861,38862,38864],{"class":180,"line":181},[178,38863,700],{"class":699},[178,38865,32138],{"class":319},[178,38867,38868,38870,38872,38874],{"class":180,"line":263},[178,38869,700],{"class":699},[178,38871,33151],{"class":319},[178,38873,713],{"class":699},[178,38875,33156],{"class":319},[178,38877,38878,38880,38882,38884],{"class":180,"line":274},[178,38879,32479],{"class":699},[178,38881,35634],{"class":319},[178,38883,700],{"class":699},[178,38885,35639],{"class":319},[178,38887,38888,38890,38892,38894],{"class":180,"line":354},[178,38889,32479],{"class":699},[178,38891,33134],{"class":319},[178,38893,700],{"class":699},[178,38895,33139],{"class":319},[178,38897,38898],{"class":180,"line":364},[178,38899,35654],{"class":2008},[178,38901,38902,38904,38906,38908],{"class":180,"line":740},[178,38903,32479],{"class":699},[178,38905,33107],{"class":319},[178,38907,700],{"class":699},[178,38909,33112],{"class":319},[178,38911,38912,38914,38916,38918],{"class":180,"line":746},[178,38913,32479],{"class":699},[178,38915,33649],{"class":319},[178,38917,700],{"class":699},[178,38919,37289],{"class":319},[178,38921,38922,38924,38927,38929],{"class":180,"line":752},[178,38923,32479],{"class":699},[178,38925,38926],{"class":319}," 练习.AlexNet.model ",[178,38928,700],{"class":699},[178,38930,37289],{"class":319},[178,38932,38933],{"class":180,"line":757},[178,38934,722],{"emptyLinePlaceholder":721},[178,38936,38937],{"class":180,"line":763},[178,38938,722],{"emptyLinePlaceholder":721},[178,38940,38941],{"class":180,"line":769},[178,38942,35683],{"class":2008},[178,38944,38945,38947,38949],{"class":180,"line":774},[178,38946,835],{"class":699},[178,38948,35690],{"class":184},[178,38950,33687],{"class":319},[178,38952,38953,38955,38957,38959,38961,38963,38965],{"class":180,"line":780},[178,38954,35697],{"class":319},[178,38956,330],{"class":699},[178,38958,33191],{"class":319},[178,38960,33194],{"class":6985},[178,38962,330],{"class":699},[178,38964,33199],{"class":188},[178,38966,33202],{"class":319},[178,38968,38969,38971,38973,38975],{"class":180,"line":786},[178,38970,35714],{"class":6985},[178,38972,330],{"class":699},[178,38974,35719],{"class":195},[178,38976,33202],{"class":319},[178,38978,38979,38981,38983,38985,38987,38989,38991],{"class":180,"line":792},[178,38980,35726],{"class":6985},[178,38982,330],{"class":699},[178,38984,33229],{"class":319},[178,38986,554],{"class":6985},[178,38988,330],{"class":699},[178,38990,37181],{"class":195},[178,38992,33239],{"class":319},[178,38994,38995,38997,38999,39001],{"class":180,"line":798},[178,38996,35743],{"class":6985},[178,38998,330],{"class":699},[178,39000,33212],{"class":195},[178,39002,863],{"class":319},[178,39004,39005,39007,39009,39011,39013,39015],{"class":180,"line":804},[178,39006,35754],{"class":319},[178,39008,330],{"class":699},[178,39010,33269],{"class":319},[178,39012,33272],{"class":6985},[178,39014,330],{"class":699},[178,39016,35765],{"class":319},[178,39018,39019],{"class":180,"line":810},[178,39020,35770],{"class":2008},[178,39022,39023,39025,39027,39029],{"class":180,"line":816},[178,39024,35775],{"class":6985},[178,39026,330],{"class":699},[178,39028,1665],{"class":195},[178,39030,33202],{"class":319},[178,39032,39033,39035,39037,39039],{"class":180,"line":822},[178,39034,35786],{"class":6985},[178,39036,330],{"class":699},[178,39038,33212],{"class":195},[178,39040,33202],{"class":319},[178,39042,39043,39045,39047,39049],{"class":180,"line":827},[178,39044,35797],{"class":6985},[178,39046,330],{"class":699},[178,39048,2133],{"class":195},[178,39050,863],{"class":319},[178,39052,39053,39055],{"class":180,"line":832},[178,39054,5862],{"class":699},[178,39056,35810],{"class":319},[178,39058,39059],{"class":180,"line":850},[178,39060,722],{"emptyLinePlaceholder":721},[178,39062,39063],{"class":180,"line":866},[178,39064,35819],{"class":2008},[178,39066,39067,39069,39071],{"class":180,"line":877},[178,39068,835],{"class":699},[178,39070,35826],{"class":184},[178,39072,35829],{"class":319},[178,39074,39075],{"class":180,"line":882},[178,39076,35834],{"class":2008},[178,39078,39079,39081,39083,39085,39087,39089,39091],{"class":180,"line":898},[178,39080,32977],{"class":319},[178,39082,330],{"class":699},[178,39084,32984],{"class":188},[178,39086,3499],{"class":699},[178,39088,32989],{"class":319},[178,39090,3496],{"class":699},[178,39092,35851],{"class":188},[178,39094,39095,39097,39099],{"class":180,"line":914},[178,39096,33029],{"class":319},[178,39098,330],{"class":699},[178,39100,34022],{"class":319},[178,39102,39103],{"class":180,"line":919},[178,39104,722],{"emptyLinePlaceholder":721},[178,39106,39107],{"class":180,"line":935},[178,39108,35868],{"class":2008},[178,39110,39111,39113,39115],{"class":180,"line":952},[178,39112,35873],{"class":319},[178,39114,330],{"class":699},[178,39116,34075],{"class":195},[178,39118,39119,39121,39123],{"class":180,"line":966},[178,39120,35882],{"class":319},[178,39122,330],{"class":699},[178,39124,4860],{"class":195},[178,39126,39127],{"class":180,"line":980},[178,39128,722],{"emptyLinePlaceholder":721},[178,39130,39131],{"class":180,"line":985},[178,39132,35895],{"class":2008},[178,39134,39135],{"class":180,"line":1008},[178,39136,35900],{"class":2008},[178,39138,39139],{"class":180,"line":1014},[178,39140,35905],{"class":2008},[178,39142,39143,39145],{"class":180,"line":1019},[178,39144,35910],{"class":699},[178,39146,34616],{"class":319},[178,39148,39149],{"class":180,"line":1033},[178,39150,35917],{"class":2008},[178,39152,39153,39155,39157,39159],{"class":180,"line":1046},[178,39154,5176],{"class":699},[178,39156,35924],{"class":319},[178,39158,994],{"class":699},[178,39160,35929],{"class":319},[178,39162,39163,39165,39167],{"class":180,"line":1059},[178,39164,35934],{"class":319},[178,39166,330],{"class":699},[178,39168,35939],{"class":319},[178,39170,39171,39173,39175],{"class":180,"line":1072},[178,39172,35944],{"class":319},[178,39174,330],{"class":699},[178,39176,35949],{"class":319},[178,39178,39179],{"class":180,"line":1077},[178,39180,35954],{"class":2008},[178,39182,39183],{"class":180,"line":1082},[178,39184,34607],{"class":319},[178,39186,39187],{"class":180,"line":1099},[178,39188,35963],{"class":2008},[178,39190,39191,39193,39195],{"class":180,"line":9806},[178,39192,34392],{"class":319},[178,39194,330],{"class":699},[178,39196,35972],{"class":319},[178,39198,39199],{"class":180,"line":9818},[178,39200,35977],{"class":2008},[178,39202,39203,39205,39207,39209,39211,39213,39215],{"class":180,"line":11477},[178,39204,34409],{"class":319},[178,39206,330],{"class":699},[178,39208,34414],{"class":319},[178,39210,34417],{"class":6985},[178,39212,330],{"class":699},[178,39214,1665],{"class":195},[178,39216,863],{"class":319},[178,39218,39219],{"class":180,"line":11502},[178,39220,35998],{"class":2008},[178,39222,39223],{"class":180,"line":11525},[178,39224,36003],{"class":2008},[178,39226,39227],{"class":180,"line":11549},[178,39228,36008],{"class":2008},[178,39230,39231,39233,39235,39237,39239],{"class":180,"line":11554},[178,39232,36013],{"class":319},[178,39234,11238],{"class":699},[178,39236,34519],{"class":319},[178,39238,4725],{"class":699},[178,39240,36022],{"class":319},[178,39242,39243],{"class":180,"line":11559},[178,39244,36027],{"class":2008},[178,39246,39247,39249,39251,39253,39255],{"class":180,"line":11564},[178,39248,36032],{"class":319},[178,39250,11238],{"class":699},[178,39252,36037],{"class":319},[178,39254,2133],{"class":195},[178,39256,863],{"class":319},[178,39258,39259],{"class":180,"line":11573},[178,39260,722],{"emptyLinePlaceholder":721},[178,39262,39263],{"class":180,"line":11578},[178,39264,36050],{"class":2008},[178,39266,39267,39269,39271,39273,39275],{"class":180,"line":11584},[178,39268,36055],{"class":319},[178,39270,330],{"class":699},[178,39272,36060],{"class":319},[178,39274,2524],{"class":699},[178,39276,36065],{"class":319},[178,39278,39279],{"class":180,"line":11605},[178,39280,36070],{"class":2008},[178,39282,39283,39285,39287,39289],{"class":180,"line":11611},[178,39284,34183],{"class":195},[178,39286,944],{"class":319},[178,39288,36079],{"class":188},[178,39290,36082],{"class":319},[178,39292,39293],{"class":180,"line":11625},[178,39294,722],{"emptyLinePlaceholder":721},[178,39296,39297],{"class":180,"line":11631},[178,39298,36091],{"class":2008},[178,39300,39301,39303,39305,39307,39309],{"class":180,"line":11658},[178,39302,1085],{"class":699},[178,39304,1088],{"class":195},[178,39306,4725],{"class":699},[178,39308,32965],{"class":188},[178,39310,847],{"class":319},[178,39312,39313],{"class":180,"line":11667},[178,39314,36108],{"class":2008},[178,39316,39317,39319,39321],{"class":180,"line":11673},[178,39318,33029],{"class":319},[178,39320,330],{"class":699},[178,39322,38821],{"class":319},[178,39324,39325],{"class":180,"line":11681},[178,39326,36121],{"class":2008},[178,39328,39329],{"class":180,"line":11686},[178,39330,36126],{"class":2008},[178,39332,39333,39335,39337],{"class":180,"line":18362},[178,39334,36131],{"class":319},[178,39336,36134],{"class":188},[178,39338,32239],{"class":319},[178,39340,39341],{"class":180,"line":18368},[178,39342,36141],{"class":2008},[178,39344,39345,39347,39349],{"class":180,"line":18391},[178,39346,35754],{"class":319},[178,39348,330],{"class":699},[178,39350,36150],{"class":319},[178,39352,39353],{"class":180,"line":18397},[178,39354,36155],{"class":2008},[178,39356,39357],{"class":180,"line":18420},[178,39358,36160],{"class":319},[178,39360,39361],{"class":180,"line":18434},[178,39362,722],{"emptyLinePlaceholder":721},[178,39364,39365],{"class":180,"line":18454},[178,39366,36169],{"class":2008},[178,39368,39369],{"class":180,"line":18460},[178,39370,36174],{"class":2008},[178,39372,39373,39375,39377,39379,39381,39383,39385],{"class":180,"line":18471},[178,39374,32977],{"class":319},[178,39376,330],{"class":699},[178,39378,32984],{"class":188},[178,39380,3499],{"class":699},[178,39382,32989],{"class":319},[178,39384,3496],{"class":699},[178,39386,35851],{"class":188},[178,39388,39389,39391,39393],{"class":180,"line":18494},[178,39390,33029],{"class":319},[178,39392,330],{"class":699},[178,39394,34022],{"class":319},[178,39396,39397],{"class":180,"line":18516},[178,39398,36203],{"class":2008},[178,39400,39401],{"class":180,"line":18521},[178,39402,36208],{"class":2008},[178,39404,39405,39407,39409,39411,39413,39415,39417,39419,39421,39423,39425,39427,39429,39431,39433,39435,39437,39439,39441,39443,39445,39447,39449],{"class":180,"line":18527},[178,39406,36213],{"class":319},[178,39408,330],{"class":699},[178,39410,2830],{"class":319},[178,39412,36220],{"class":188},[178,39414,2318],{"class":319},[178,39416,36225],{"class":188},[178,39418,2318],{"class":319},[178,39420,36230],{"class":188},[178,39422,2318],{"class":319},[178,39424,36235],{"class":188},[178,39426,2318],{"class":319},[178,39428,36240],{"class":188},[178,39430,2318],{"class":319},[178,39432,36245],{"class":188},[178,39434,2318],{"class":319},[178,39436,36250],{"class":188},[178,39438,2318],{"class":319},[178,39440,36255],{"class":188},[178,39442,2318],{"class":319},[178,39444,36260],{"class":188},[178,39446,2318],{"class":319},[178,39448,36265],{"class":188},[178,39450,34978],{"class":319},[178,39452,39453,39455],{"class":180,"line":18541},[178,39454,35910],{"class":699},[178,39456,34616],{"class":319},[178,39458,39459],{"class":180,"line":18554},[178,39460,36278],{"class":2008},[178,39462,39463,39465,39467,39469],{"class":180,"line":18559},[178,39464,5176],{"class":699},[178,39466,36285],{"class":319},[178,39468,994],{"class":699},[178,39470,35929],{"class":319},[178,39472,39473,39475,39477],{"class":180,"line":18573},[178,39474,34342],{"class":319},[178,39476,330],{"class":699},[178,39478,34347],{"class":319},[178,39480,39481,39483,39485],{"class":180,"line":18578},[178,39482,34357],{"class":319},[178,39484,330],{"class":699},[178,39486,34362],{"class":319},[178,39488,39489],{"class":180,"line":18584},[178,39490,722],{"emptyLinePlaceholder":721},[178,39492,39493],{"class":180,"line":18589},[178,39494,36314],{"class":2008},[178,39496,39497],{"class":180,"line":18603},[178,39498,34607],{"class":319},[178,39500,39501],{"class":180,"line":18608},[178,39502,36323],{"class":2008},[178,39504,39505,39507,39509],{"class":180,"line":18613},[178,39506,34392],{"class":319},[178,39508,330],{"class":699},[178,39510,34397],{"class":319},[178,39512,39513],{"class":180,"line":18627},[178,39514,36336],{"class":2008},[178,39516,39517,39519,39521,39523,39525,39527,39529],{"class":180,"line":18639},[178,39518,34409],{"class":319},[178,39520,330],{"class":699},[178,39522,34414],{"class":319},[178,39524,34417],{"class":6985},[178,39526,330],{"class":699},[178,39528,1665],{"class":195},[178,39530,863],{"class":319},[178,39532,39533],{"class":180,"line":18644},[178,39534,36357],{"class":2008},[178,39536,39537,39539,39541],{"class":180,"line":18657},[178,39538,36362],{"class":319},[178,39540,330],{"class":699},[178,39542,36367],{"class":319},[178,39544,39545,39547,39549],{"class":180,"line":18662},[178,39546,36372],{"class":319},[178,39548,330],{"class":699},[178,39550,36377],{"class":319},[178,39552,39553,39555,39557,39559,39561,39563,39565,39567],{"class":180,"line":18667},[178,39554,36382],{"class":195},[178,39556,944],{"class":319},[178,39558,36387],{"class":188},[178,39560,36390],{"class":319},[178,39562,36393],{"class":188},[178,39564,2318],{"class":319},[178,39566,36398],{"class":188},[178,39568,36401],{"class":319},[387,39570,39572],{"id":39571},"_22vgg","2.2.VGG",[23756,39574,39576],{"id":39575},"_221原理","2.2.1.原理",[19,39578,39579],{},[3269,39580],{"alt":160,"src":39581},"\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,39583,39584],{},[3269,39585],{"alt":160,"src":39586},"\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,39588,39589],{},[3269,39590],{"alt":160,"src":39591},"\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,39593,39594],{},"参数详细描述：",[19,39596,39597],{},[3269,39598],{"alt":160,"src":39599},"\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,39601,39602],{},[3269,39603],{"alt":160,"src":39604},"\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,39606,39607],{},[3269,39608],{"alt":160,"src":39609},"\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,39611,39612],{},[3269,39613],{"alt":160,"src":39614},"\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,39616,39617],{},[3269,39618],{"alt":160,"src":39619},"\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",[23756,39621,39623],{"id":39622},"_222代码实现","2.2.2.代码实现",[26,39625,39626],{},[29,39627,39628],{},"网络搭建",[154,39630,39632],{"className":690,"code":39631,"language":692,"meta":160,"style":160},"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",[70,39633,39634,39640,39652,39662,39672,39676,39693,39701,39720,39725,39730,39742,39780,39785,39821,39825,39854,39859,39864,39875,39911,39915,39951,39955,39983,39987,39992,40003,40039,40043,40079,40083,40119,40123,40151,40155,40160,40171,40208,40212,40248,40252,40288,40292,40320,40324,40329,40340,40376,40380,40416,40420,40456,40460,40488,40492,40497,40508,40513,40518,40523,40544,40548,40560,40564,40576,40580,40584,40589,40594,40609,40614,40624,40629,40644,40649,40668,40673,40682,40687,40697,40702,40707,40721,40726,40740,40748,40752,40756,40764,40775,40786,40797,40808,40819,40830,40836,40840,40845,40858,40878,40884,40893],{"__ignoreMap":160},[178,39635,39636,39638],{"class":180,"line":181},[178,39637,700],{"class":699},[178,39639,32138],{"class":319},[178,39641,39642,39644,39647,39649],{"class":180,"line":263},[178,39643,32479],{"class":699},[178,39645,39646],{"class":319}," sympy.core.sympify ",[178,39648,700],{"class":699},[178,39650,39651],{"class":319}," kernS\n",[178,39653,39654,39656,39658,39660],{"class":180,"line":274},[178,39655,32479],{"class":699},[178,39657,32482],{"class":319},[178,39659,700],{"class":699},[178,39661,32487],{"class":319},[178,39663,39664,39666,39668,39670],{"class":180,"line":354},[178,39665,32479],{"class":699},[178,39667,32499],{"class":319},[178,39669,700],{"class":699},[178,39671,32504],{"class":319},[178,39673,39674],{"class":180,"line":364},[178,39675,722],{"emptyLinePlaceholder":721},[178,39677,39678,39680,39683,39685,39687,39689,39691],{"class":180,"line":740},[178,39679,16453],{"class":699},[178,39681,39682],{"class":184}," VGG16",[178,39684,944],{"class":319},[178,39686,32520],{"class":184},[178,39688,2498],{"class":319},[178,39690,32525],{"class":184},[178,39692,1005],{"class":319},[178,39694,39695,39697,39699],{"class":180,"line":746},[178,39696,32542],{"class":699},[178,39698,32545],{"class":195},[178,39700,32548],{"class":319},[178,39702,39703,39705,39707,39710,39712,39714,39716,39718],{"class":180,"line":752},[178,39704,32558],{"class":195},[178,39706,944],{"class":319},[178,39708,39709],{"class":195},"VGG16",[178,39711,14196],{"class":319},[178,39713,32564],{"class":195},[178,39715,32567],{"class":319},[178,39717,32570],{"class":195},[178,39719,3760],{"class":319},[178,39721,39722],{"class":180,"line":757},[178,39723,39724],{"class":2008},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[178,39726,39727],{"class":180,"line":763},[178,39728,39729],{"class":2008},"        # 这里用的是灰度图\n",[178,39731,39732,39734,39737,39739],{"class":180,"line":769},[178,39733,32586],{"class":195},[178,39735,39736],{"class":319},".block1",[178,39738,330],{"class":699},[178,39740,39741],{"class":319},"nn.Sequential(\n",[178,39743,39744,39747,39749,39751,39753,39755,39757,39759,39761,39763,39765,39767,39769,39771,39773,39775,39777],{"class":180,"line":774},[178,39745,39746],{"class":319},"            nn.Conv2d(",[178,39748,32597],{"class":6985},[178,39750,330],{"class":699},[178,39752,1665],{"class":195},[178,39754,2318],{"class":319},[178,39756,32606],{"class":6985},[178,39758,330],{"class":699},[178,39760,2145],{"class":195},[178,39762,2318],{"class":319},[178,39764,32615],{"class":6985},[178,39766,330],{"class":699},[178,39768,2021],{"class":195},[178,39770,2318],{"class":319},[178,39772,32624],{"class":6985},[178,39774,330],{"class":699},[178,39776,1665],{"class":195},[178,39778,39779],{"class":319},"),\n",[178,39781,39782],{"class":180,"line":780},[178,39783,39784],{"class":319},"            nn.ReLU(),\n",[178,39786,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805,39807,39809,39811,39813,39815,39817,39819],{"class":180,"line":786},[178,39788,39746],{"class":319},[178,39790,32597],{"class":6985},[178,39792,330],{"class":699},[178,39794,2145],{"class":195},[178,39796,2318],{"class":319},[178,39798,32606],{"class":6985},[178,39800,330],{"class":699},[178,39802,2145],{"class":195},[178,39804,2318],{"class":319},[178,39806,32615],{"class":6985},[178,39808,330],{"class":699},[178,39810,2021],{"class":195},[178,39812,2318],{"class":319},[178,39814,32624],{"class":6985},[178,39816,330],{"class":699},[178,39818,1665],{"class":195},[178,39820,39779],{"class":319},[178,39822,39823],{"class":180,"line":792},[178,39824,39784],{"class":319},[178,39826,39827,39830,39832,39834,39836,39838,39840,39842,39844,39846,39848,39850,39852],{"class":180,"line":798},[178,39828,39829],{"class":319},"            nn.MaxPool2d(",[178,39831,32615],{"class":6985},[178,39833,330],{"class":699},[178,39835,1669],{"class":195},[178,39837,2318],{"class":319},[178,39839,32670],{"class":6985},[178,39841,330],{"class":699},[178,39843,1669],{"class":195},[178,39845,2318],{"class":319},[178,39847,32624],{"class":6985},[178,39849,330],{"class":699},[178,39851,2133],{"class":195},[178,39853,863],{"class":319},[178,39855,39856],{"class":180,"line":804},[178,39857,39858],{"class":319},"        )\n",[178,39860,39861],{"class":180,"line":810},[178,39862,39863],{"class":2008},"        # 第二层\n",[178,39865,39866,39868,39871,39873],{"class":180,"line":816},[178,39867,32586],{"class":195},[178,39869,39870],{"class":319},".block2",[178,39872,330],{"class":699},[178,39874,39741],{"class":319},[178,39876,39877,39879,39881,39883,39885,39887,39889,39891,39893,39895,39897,39899,39901,39903,39905,39907,39909],{"class":180,"line":822},[178,39878,39746],{"class":319},[178,39880,32597],{"class":6985},[178,39882,330],{"class":699},[178,39884,2145],{"class":195},[178,39886,2318],{"class":319},[178,39888,32606],{"class":6985},[178,39890,330],{"class":699},[178,39892,33803],{"class":195},[178,39894,2318],{"class":319},[178,39896,32615],{"class":6985},[178,39898,330],{"class":699},[178,39900,2021],{"class":195},[178,39902,2318],{"class":319},[178,39904,32624],{"class":6985},[178,39906,330],{"class":699},[178,39908,1665],{"class":195},[178,39910,39779],{"class":319},[178,39912,39913],{"class":180,"line":827},[178,39914,39784],{"class":319},[178,39916,39917,39919,39921,39923,39925,39927,39929,39931,39933,39935,39937,39939,39941,39943,39945,39947,39949],{"class":180,"line":832},[178,39918,39746],{"class":319},[178,39920,32597],{"class":6985},[178,39922,330],{"class":699},[178,39924,33803],{"class":195},[178,39926,2318],{"class":319},[178,39928,32606],{"class":6985},[178,39930,330],{"class":699},[178,39932,33803],{"class":195},[178,39934,2318],{"class":319},[178,39936,32615],{"class":6985},[178,39938,330],{"class":699},[178,39940,2021],{"class":195},[178,39942,2318],{"class":319},[178,39944,32624],{"class":6985},[178,39946,330],{"class":699},[178,39948,1665],{"class":195},[178,39950,39779],{"class":319},[178,39952,39953],{"class":180,"line":850},[178,39954,39784],{"class":319},[178,39956,39957,39959,39961,39963,39965,39967,39969,39971,39973,39975,39977,39979,39981],{"class":180,"line":866},[178,39958,39829],{"class":319},[178,39960,32615],{"class":6985},[178,39962,330],{"class":699},[178,39964,1669],{"class":195},[178,39966,2318],{"class":319},[178,39968,32670],{"class":6985},[178,39970,330],{"class":699},[178,39972,1669],{"class":195},[178,39974,2318],{"class":319},[178,39976,32624],{"class":6985},[178,39978,330],{"class":699},[178,39980,2133],{"class":195},[178,39982,863],{"class":319},[178,39984,39985],{"class":180,"line":877},[178,39986,39858],{"class":319},[178,39988,39989],{"class":180,"line":882},[178,39990,39991],{"class":2008},"        # 第三层\n",[178,39993,39994,39996,39999,40001],{"class":180,"line":898},[178,39995,32586],{"class":195},[178,39997,39998],{"class":319},".block3",[178,40000,330],{"class":699},[178,40002,39741],{"class":319},[178,40004,40005,40007,40009,40011,40013,40015,40017,40019,40021,40023,40025,40027,40029,40031,40033,40035,40037],{"class":180,"line":914},[178,40006,39746],{"class":319},[178,40008,32597],{"class":6985},[178,40010,330],{"class":699},[178,40012,33803],{"class":195},[178,40014,2318],{"class":319},[178,40016,32606],{"class":6985},[178,40018,330],{"class":699},[178,40020,36602],{"class":195},[178,40022,2318],{"class":319},[178,40024,32615],{"class":6985},[178,40026,330],{"class":699},[178,40028,2021],{"class":195},[178,40030,2318],{"class":319},[178,40032,32624],{"class":6985},[178,40034,330],{"class":699},[178,40036,1665],{"class":195},[178,40038,39779],{"class":319},[178,40040,40041],{"class":180,"line":919},[178,40042,39784],{"class":319},[178,40044,40045,40047,40049,40051,40053,40055,40057,40059,40061,40063,40065,40067,40069,40071,40073,40075,40077],{"class":180,"line":935},[178,40046,39746],{"class":319},[178,40048,32597],{"class":6985},[178,40050,330],{"class":699},[178,40052,36602],{"class":195},[178,40054,2318],{"class":319},[178,40056,32606],{"class":6985},[178,40058,330],{"class":699},[178,40060,36602],{"class":195},[178,40062,2318],{"class":319},[178,40064,32615],{"class":6985},[178,40066,330],{"class":699},[178,40068,2021],{"class":195},[178,40070,2318],{"class":319},[178,40072,32624],{"class":6985},[178,40074,330],{"class":699},[178,40076,1665],{"class":195},[178,40078,39779],{"class":319},[178,40080,40081],{"class":180,"line":952},[178,40082,39784],{"class":319},[178,40084,40085,40087,40089,40091,40093,40095,40097,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117],{"class":180,"line":966},[178,40086,39746],{"class":319},[178,40088,32597],{"class":6985},[178,40090,330],{"class":699},[178,40092,36602],{"class":195},[178,40094,2318],{"class":319},[178,40096,32606],{"class":6985},[178,40098,330],{"class":699},[178,40100,36602],{"class":195},[178,40102,2318],{"class":319},[178,40104,32615],{"class":6985},[178,40106,330],{"class":699},[178,40108,2021],{"class":195},[178,40110,2318],{"class":319},[178,40112,32624],{"class":6985},[178,40114,330],{"class":699},[178,40116,1665],{"class":195},[178,40118,39779],{"class":319},[178,40120,40121],{"class":180,"line":980},[178,40122,39784],{"class":319},[178,40124,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149],{"class":180,"line":985},[178,40126,39829],{"class":319},[178,40128,32615],{"class":6985},[178,40130,330],{"class":699},[178,40132,1669],{"class":195},[178,40134,2318],{"class":319},[178,40136,32670],{"class":6985},[178,40138,330],{"class":699},[178,40140,1669],{"class":195},[178,40142,2318],{"class":319},[178,40144,32624],{"class":6985},[178,40146,330],{"class":699},[178,40148,2133],{"class":195},[178,40150,863],{"class":319},[178,40152,40153],{"class":180,"line":1008},[178,40154,39858],{"class":319},[178,40156,40157],{"class":180,"line":1014},[178,40158,40159],{"class":2008},"        # 第四层\n",[178,40161,40162,40164,40167,40169],{"class":180,"line":1019},[178,40163,32586],{"class":195},[178,40165,40166],{"class":319},".block4",[178,40168,330],{"class":699},[178,40170,39741],{"class":319},[178,40172,40173,40175,40177,40179,40181,40183,40185,40187,40190,40192,40194,40196,40198,40200,40202,40204,40206],{"class":180,"line":1033},[178,40174,39746],{"class":319},[178,40176,32597],{"class":6985},[178,40178,330],{"class":699},[178,40180,36602],{"class":195},[178,40182,2318],{"class":319},[178,40184,32606],{"class":6985},[178,40186,330],{"class":699},[178,40188,40189],{"class":195},"512",[178,40191,2318],{"class":319},[178,40193,32615],{"class":6985},[178,40195,330],{"class":699},[178,40197,2021],{"class":195},[178,40199,2318],{"class":319},[178,40201,32624],{"class":6985},[178,40203,330],{"class":699},[178,40205,1665],{"class":195},[178,40207,39779],{"class":319},[178,40209,40210],{"class":180,"line":1046},[178,40211,39784],{"class":319},[178,40213,40214,40216,40218,40220,40222,40224,40226,40228,40230,40232,40234,40236,40238,40240,40242,40244,40246],{"class":180,"line":1059},[178,40215,39746],{"class":319},[178,40217,32597],{"class":6985},[178,40219,330],{"class":699},[178,40221,40189],{"class":195},[178,40223,2318],{"class":319},[178,40225,32606],{"class":6985},[178,40227,330],{"class":699},[178,40229,40189],{"class":195},[178,40231,2318],{"class":319},[178,40233,32615],{"class":6985},[178,40235,330],{"class":699},[178,40237,2021],{"class":195},[178,40239,2318],{"class":319},[178,40241,32624],{"class":6985},[178,40243,330],{"class":699},[178,40245,1665],{"class":195},[178,40247,39779],{"class":319},[178,40249,40250],{"class":180,"line":1072},[178,40251,39784],{"class":319},[178,40253,40254,40256,40258,40260,40262,40264,40266,40268,40270,40272,40274,40276,40278,40280,40282,40284,40286],{"class":180,"line":1077},[178,40255,39746],{"class":319},[178,40257,32597],{"class":6985},[178,40259,330],{"class":699},[178,40261,40189],{"class":195},[178,40263,2318],{"class":319},[178,40265,32606],{"class":6985},[178,40267,330],{"class":699},[178,40269,40189],{"class":195},[178,40271,2318],{"class":319},[178,40273,32615],{"class":6985},[178,40275,330],{"class":699},[178,40277,2021],{"class":195},[178,40279,2318],{"class":319},[178,40281,32624],{"class":6985},[178,40283,330],{"class":699},[178,40285,1665],{"class":195},[178,40287,39779],{"class":319},[178,40289,40290],{"class":180,"line":1082},[178,40291,39784],{"class":319},[178,40293,40294,40296,40298,40300,40302,40304,40306,40308,40310,40312,40314,40316,40318],{"class":180,"line":1099},[178,40295,39829],{"class":319},[178,40297,32615],{"class":6985},[178,40299,330],{"class":699},[178,40301,1669],{"class":195},[178,40303,2318],{"class":319},[178,40305,32670],{"class":6985},[178,40307,330],{"class":699},[178,40309,1669],{"class":195},[178,40311,2318],{"class":319},[178,40313,32624],{"class":6985},[178,40315,330],{"class":699},[178,40317,2133],{"class":195},[178,40319,863],{"class":319},[178,40321,40322],{"class":180,"line":9806},[178,40323,39858],{"class":319},[178,40325,40326],{"class":180,"line":9818},[178,40327,40328],{"class":2008},"        # 第五层\n",[178,40330,40331,40333,40336,40338],{"class":180,"line":11477},[178,40332,32586],{"class":195},[178,40334,40335],{"class":319},".block5",[178,40337,330],{"class":699},[178,40339,39741],{"class":319},[178,40341,40342,40344,40346,40348,40350,40352,40354,40356,40358,40360,40362,40364,40366,40368,40370,40372,40374],{"class":180,"line":11502},[178,40343,39746],{"class":319},[178,40345,32597],{"class":6985},[178,40347,330],{"class":699},[178,40349,40189],{"class":195},[178,40351,2318],{"class":319},[178,40353,32606],{"class":6985},[178,40355,330],{"class":699},[178,40357,40189],{"class":195},[178,40359,2318],{"class":319},[178,40361,32615],{"class":6985},[178,40363,330],{"class":699},[178,40365,2021],{"class":195},[178,40367,2318],{"class":319},[178,40369,32624],{"class":6985},[178,40371,330],{"class":699},[178,40373,1665],{"class":195},[178,40375,39779],{"class":319},[178,40377,40378],{"class":180,"line":11525},[178,40379,39784],{"class":319},[178,40381,40382,40384,40386,40388,40390,40392,40394,40396,40398,40400,40402,40404,40406,40408,40410,40412,40414],{"class":180,"line":11549},[178,40383,39746],{"class":319},[178,40385,32597],{"class":6985},[178,40387,330],{"class":699},[178,40389,40189],{"class":195},[178,40391,2318],{"class":319},[178,40393,32606],{"class":6985},[178,40395,330],{"class":699},[178,40397,40189],{"class":195},[178,40399,2318],{"class":319},[178,40401,32615],{"class":6985},[178,40403,330],{"class":699},[178,40405,2021],{"class":195},[178,40407,2318],{"class":319},[178,40409,32624],{"class":6985},[178,40411,330],{"class":699},[178,40413,1665],{"class":195},[178,40415,39779],{"class":319},[178,40417,40418],{"class":180,"line":11554},[178,40419,39784],{"class":319},[178,40421,40422,40424,40426,40428,40430,40432,40434,40436,40438,40440,40442,40444,40446,40448,40450,40452,40454],{"class":180,"line":11559},[178,40423,39746],{"class":319},[178,40425,32597],{"class":6985},[178,40427,330],{"class":699},[178,40429,40189],{"class":195},[178,40431,2318],{"class":319},[178,40433,32606],{"class":6985},[178,40435,330],{"class":699},[178,40437,40189],{"class":195},[178,40439,2318],{"class":319},[178,40441,32615],{"class":6985},[178,40443,330],{"class":699},[178,40445,2021],{"class":195},[178,40447,2318],{"class":319},[178,40449,32624],{"class":6985},[178,40451,330],{"class":699},[178,40453,1665],{"class":195},[178,40455,39779],{"class":319},[178,40457,40458],{"class":180,"line":11564},[178,40459,39784],{"class":319},[178,40461,40462,40464,40466,40468,40470,40472,40474,40476,40478,40480,40482,40484,40486],{"class":180,"line":11573},[178,40463,39829],{"class":319},[178,40465,32615],{"class":6985},[178,40467,330],{"class":699},[178,40469,1669],{"class":195},[178,40471,2318],{"class":319},[178,40473,32670],{"class":6985},[178,40475,330],{"class":699},[178,40477,1669],{"class":195},[178,40479,2318],{"class":319},[178,40481,32624],{"class":6985},[178,40483,330],{"class":699},[178,40485,2133],{"class":195},[178,40487,863],{"class":319},[178,40489,40490],{"class":180,"line":11578},[178,40491,39858],{"class":319},[178,40493,40494],{"class":180,"line":11584},[178,40495,40496],{"class":2008},"        # 全连接层\n",[178,40498,40499,40501,40504,40506],{"class":180,"line":11605},[178,40500,32586],{"class":195},[178,40502,40503],{"class":319},".block6",[178,40505,330],{"class":699},[178,40507,39741],{"class":319},[178,40509,40510],{"class":180,"line":11611},[178,40511,40512],{"class":2008},"            # 平展操作\n",[178,40514,40515],{"class":180,"line":11625},[178,40516,40517],{"class":2008},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[178,40519,40520],{"class":180,"line":11631},[178,40521,40522],{"class":319},"            nn.Flatten(),\n",[178,40524,40525,40528,40530,40532,40534,40536,40538,40540,40542],{"class":180,"line":11658},[178,40526,40527],{"class":319},"            nn.Linear(",[178,40529,2309],{"class":195},[178,40531,2395],{"class":699},[178,40533,2309],{"class":195},[178,40535,2395],{"class":699},[178,40537,40189],{"class":195},[178,40539,2318],{"class":319},[178,40541,36602],{"class":195},[178,40543,39779],{"class":319},[178,40545,40546],{"class":180,"line":11667},[178,40547,39784],{"class":319},[178,40549,40550,40552,40554,40556,40558],{"class":180,"line":11673},[178,40551,40527],{"class":319},[178,40553,36602],{"class":195},[178,40555,2318],{"class":319},[178,40557,33803],{"class":195},[178,40559,39779],{"class":319},[178,40561,40562],{"class":180,"line":11681},[178,40563,39784],{"class":319},[178,40565,40566,40568,40570,40572,40574],{"class":180,"line":11686},[178,40567,40527],{"class":319},[178,40569,33803],{"class":195},[178,40571,2318],{"class":319},[178,40573,2386],{"class":195},[178,40575,863],{"class":319},[178,40577,40578],{"class":180,"line":18362},[178,40579,39858],{"class":319},[178,40581,40582],{"class":180,"line":18368},[178,40583,722],{"emptyLinePlaceholder":721},[178,40585,40586],{"class":180,"line":18391},[178,40587,40588],{"class":2008},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[178,40590,40591],{"class":180,"line":18397},[178,40592,40593],{"class":2008},"        # 循环遍历模型\n",[178,40595,40596,40598,40601,40603,40606],{"class":180,"line":18420},[178,40597,5176],{"class":699},[178,40599,40600],{"class":319}," m ",[178,40602,994],{"class":699},[178,40604,40605],{"class":195}," self",[178,40607,40608],{"class":319},".modules():\n",[178,40610,40611],{"class":180,"line":18434},[178,40612,40613],{"class":2008},"            # print(m)\n",[178,40615,40616,40618,40621],{"class":180,"line":18454},[178,40617,6413],{"class":699},[178,40619,40620],{"class":195}," isinstance",[178,40622,40623],{"class":319},"(m,nn.Conv2d):\n",[178,40625,40626],{"class":180,"line":18460},[178,40627,40628],{"class":2008},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[178,40630,40631,40634,40637,40639,40642],{"class":180,"line":18471},[178,40632,40633],{"class":319},"                nn.init.kaiming_normal_(m.weight,",[178,40635,40636],{"class":6985},"nonlinearity",[178,40638,330],{"class":699},[178,40640,40641],{"class":188},"'relu'",[178,40643,863],{"class":319},[178,40645,40646],{"class":180,"line":18494},[178,40647,40648],{"class":2008},"                # 判断b参数是否存在\n",[178,40650,40651,40654,40657,40660,40663,40666],{"class":180,"line":18516},[178,40652,40653],{"class":699},"                if",[178,40655,40656],{"class":319}," m.bias ",[178,40658,40659],{"class":699},"is",[178,40661,40662],{"class":699}," not",[178,40664,40665],{"class":195}," None",[178,40667,847],{"class":319},[178,40669,40670],{"class":180,"line":18521},[178,40671,40672],{"class":2008},"                    # 如果参数不存在的化初始化b=0\n",[178,40674,40675,40678,40680],{"class":180,"line":18527},[178,40676,40677],{"class":319},"                    nn.init.constant_(m.bias,",[178,40679,2133],{"class":195},[178,40681,863],{"class":319},[178,40683,40684],{"class":180,"line":18541},[178,40685,40686],{"class":2008},"            # 全连接层初始化\n",[178,40688,40689,40692,40694],{"class":180,"line":18554},[178,40690,40691],{"class":699},"            elif",[178,40693,40620],{"class":195},[178,40695,40696],{"class":319},"(m,nn.Linear):\n",[178,40698,40699],{"class":180,"line":18559},[178,40700,40701],{"class":2008},"                # 这个初始化方法是利用的是正太分布的方式\n",[178,40703,40704],{"class":180,"line":18573},[178,40705,40706],{"class":2008},"                # 均值为0，方差为0.01\n",[178,40708,40709,40712,40714,40716,40719],{"class":180,"line":18578},[178,40710,40711],{"class":319},"                nn.init.normal_(m.weight,",[178,40713,2133],{"class":195},[178,40715,2318],{"class":319},[178,40717,40718],{"class":195},"0.01",[178,40720,863],{"class":319},[178,40722,40723],{"class":180,"line":18584},[178,40724,40725],{"class":2008},"                # 初始化b参数\n",[178,40727,40728,40730,40732,40734,40736,40738],{"class":180,"line":18589},[178,40729,40653],{"class":699},[178,40731,40656],{"class":319},[178,40733,40659],{"class":699},[178,40735,40662],{"class":699},[178,40737,40665],{"class":195},[178,40739,847],{"class":319},[178,40741,40742,40744,40746],{"class":180,"line":18603},[178,40743,40677],{"class":319},[178,40745,2133],{"class":195},[178,40747,863],{"class":319},[178,40749,40750],{"class":180,"line":18608},[178,40751,722],{"emptyLinePlaceholder":721},[178,40753,40754],{"class":180,"line":18613},[178,40755,36897],{"class":2008},[178,40757,40758,40760,40762],{"class":180,"line":18627},[178,40759,32542],{"class":699},[178,40761,32834],{"class":184},[178,40763,32837],{"class":319},[178,40765,40766,40768,40770,40772],{"class":180,"line":18639},[178,40767,32842],{"class":319},[178,40769,330],{"class":699},[178,40771,32564],{"class":195},[178,40773,40774],{"class":319},".block1(x)\n",[178,40776,40777,40779,40781,40783],{"class":180,"line":18644},[178,40778,32842],{"class":319},[178,40780,330],{"class":699},[178,40782,32564],{"class":195},[178,40784,40785],{"class":319},".block2(x)\n",[178,40787,40788,40790,40792,40794],{"class":180,"line":18657},[178,40789,32842],{"class":319},[178,40791,330],{"class":699},[178,40793,32564],{"class":195},[178,40795,40796],{"class":319},".block3(x)\n",[178,40798,40799,40801,40803,40805],{"class":180,"line":18662},[178,40800,32842],{"class":319},[178,40802,330],{"class":699},[178,40804,32564],{"class":195},[178,40806,40807],{"class":319},".block4(x)\n",[178,40809,40810,40812,40814,40816],{"class":180,"line":18667},[178,40811,32842],{"class":319},[178,40813,330],{"class":699},[178,40815,32564],{"class":195},[178,40817,40818],{"class":319},".block5(x)\n",[178,40820,40821,40823,40825,40827],{"class":180,"line":18672},[178,40822,32842],{"class":319},[178,40824,330],{"class":699},[178,40826,32564],{"class":195},[178,40828,40829],{"class":319},".block6(x)\n",[178,40831,40832,40834],{"class":180,"line":18685},[178,40833,16511],{"class":699},[178,40835,32950],{"class":319},[178,40837,40838],{"class":180,"line":18690},[178,40839,722],{"emptyLinePlaceholder":721},[178,40841,40842],{"class":180,"line":34365},[178,40843,40844],{"class":2008},"# 验证模型\n",[178,40846,40847,40849,40851,40853,40856],{"class":180,"line":34371},[178,40848,1085],{"class":699},[178,40850,1088],{"class":195},[178,40852,4725],{"class":699},[178,40854,40855],{"class":188},"'__main__'",[178,40857,847],{"class":319},[178,40859,40860,40862,40864,40866,40868,40870,40872,40874,40876],{"class":180,"line":34377},[178,40861,32977],{"class":319},[178,40863,330],{"class":699},[178,40865,32193],{"class":319},[178,40867,32984],{"class":188},[178,40869,3499],{"class":699},[178,40871,32989],{"class":319},[178,40873,3496],{"class":699},[178,40875,32218],{"class":188},[178,40877,863],{"class":319},[178,40879,40880,40882],{"class":180,"line":34383},[178,40881,1022],{"class":195},[178,40883,32227],{"class":319},[178,40885,40886,40888,40890],{"class":180,"line":34389},[178,40887,33029],{"class":319},[178,40889,330],{"class":699},[178,40891,40892],{"class":319},"VGG16().to(device)\n",[178,40894,40895,40897,40899,40901,40903,40905,40907,40909],{"class":180,"line":34400},[178,40896,1022],{"class":195},[178,40898,33041],{"class":319},[178,40900,1665],{"class":195},[178,40902,2318],{"class":319},[178,40904,33236],{"class":195},[178,40906,2318],{"class":319},[178,40908,33236],{"class":195},[178,40910,33054],{"class":319},[26,40912,40913],{"start":263},[29,40914,40915],{},"训练代码",[19,40917,40918],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,40920,40921],{},"解决方式:",[19,40923,40924],{},"①权重初始化",[154,40926,40928],{"className":690,"code":40927,"language":692,"meta":160,"style":160},"# 权重初始化,保证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",[70,40929,40930,40935,40940,40952,40957,40965,40970,40983,40988,41002,41007,41016,41021,41030,41035,41040,41053,41058,41072],{"__ignoreMap":160},[178,40931,40932],{"class":180,"line":181},[178,40933,40934],{"class":2008},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[178,40936,40937],{"class":180,"line":263},[178,40938,40939],{"class":2008},"# 循环遍历模型\n",[178,40941,40942,40944,40946,40948,40950],{"class":180,"line":274},[178,40943,1474],{"class":699},[178,40945,40600],{"class":319},[178,40947,994],{"class":699},[178,40949,40605],{"class":195},[178,40951,40608],{"class":319},[178,40953,40954],{"class":180,"line":354},[178,40955,40956],{"class":2008},"    # print(m)\n",[178,40958,40959,40961,40963],{"class":180,"line":364},[178,40960,922],{"class":699},[178,40962,40620],{"class":195},[178,40964,40623],{"class":319},[178,40966,40967],{"class":180,"line":740},[178,40968,40969],{"class":2008},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[178,40971,40972,40975,40977,40979,40981],{"class":180,"line":746},[178,40973,40974],{"class":319},"        nn.init.kaiming_normal_(m.weight,",[178,40976,40636],{"class":6985},[178,40978,330],{"class":699},[178,40980,40641],{"class":188},[178,40982,863],{"class":319},[178,40984,40985],{"class":180,"line":752},[178,40986,40987],{"class":2008},"        # 判断b参数是否存在\n",[178,40989,40990,40992,40994,40996,40998,41000],{"class":180,"line":757},[178,40991,4280],{"class":699},[178,40993,40656],{"class":319},[178,40995,40659],{"class":699},[178,40997,40662],{"class":699},[178,40999,40665],{"class":195},[178,41001,847],{"class":319},[178,41003,41004],{"class":180,"line":763},[178,41005,41006],{"class":2008},"            # 如果参数不存在的化初始化b=0\n",[178,41008,41009,41012,41014],{"class":180,"line":769},[178,41010,41011],{"class":319},"            nn.init.constant_(m.bias,",[178,41013,2133],{"class":195},[178,41015,863],{"class":319},[178,41017,41018],{"class":180,"line":774},[178,41019,41020],{"class":2008},"    # 全连接层初始化\n",[178,41022,41023,41026,41028],{"class":180,"line":780},[178,41024,41025],{"class":699},"    elif",[178,41027,40620],{"class":195},[178,41029,40696],{"class":319},[178,41031,41032],{"class":180,"line":786},[178,41033,41034],{"class":2008},"        # 这个初始化方法是利用的是正太分布的方式\n",[178,41036,41037],{"class":180,"line":792},[178,41038,41039],{"class":2008},"        # 均值为0，方差为0.01\n",[178,41041,41042,41045,41047,41049,41051],{"class":180,"line":798},[178,41043,41044],{"class":319},"        nn.init.normal_(m.weight,",[178,41046,2133],{"class":195},[178,41048,2318],{"class":319},[178,41050,40718],{"class":195},[178,41052,863],{"class":319},[178,41054,41055],{"class":180,"line":804},[178,41056,41057],{"class":2008},"        # 初始化b参数\n",[178,41059,41060,41062,41064,41066,41068,41070],{"class":180,"line":810},[178,41061,4280],{"class":699},[178,41063,40656],{"class":319},[178,41065,40659],{"class":699},[178,41067,40662],{"class":699},[178,41069,40665],{"class":195},[178,41071,847],{"class":319},[178,41073,41074,41076,41078],{"class":180,"line":816},[178,41075,41011],{"class":319},[178,41077,2133],{"class":195},[178,41079,863],{"class":319},[19,41081,41082],{},"②尽可能地增加批次",[19,41084,41085],{},"训练完整代码：",[154,41087,41088],{"className":690,"code":39631,"language":692,"meta":160,"style":160},[70,41089,41090,41096,41106,41116,41126,41130,41146,41154,41172,41176,41180,41190,41226,41230,41266,41270,41298,41302,41306,41316,41352,41356,41392,41396,41424,41428,41432,41442,41478,41482,41518,41522,41558,41562,41590,41594,41598,41608,41644,41648,41684,41688,41724,41728,41756,41760,41764,41774,41810,41814,41850,41854,41890,41894,41922,41926,41930,41940,41944,41948,41952,41972,41976,41988,41992,42004,42008,42012,42016,42020,42032,42036,42044,42048,42060,42064,42078,42082,42090,42094,42102,42106,42110,42122,42126,42140,42148,42152,42156,42164,42174,42184,42194,42204,42214,42224,42230,42234,42238,42250,42270,42276,42284],{"__ignoreMap":160},[178,41091,41092,41094],{"class":180,"line":181},[178,41093,700],{"class":699},[178,41095,32138],{"class":319},[178,41097,41098,41100,41102,41104],{"class":180,"line":263},[178,41099,32479],{"class":699},[178,41101,39646],{"class":319},[178,41103,700],{"class":699},[178,41105,39651],{"class":319},[178,41107,41108,41110,41112,41114],{"class":180,"line":274},[178,41109,32479],{"class":699},[178,41111,32482],{"class":319},[178,41113,700],{"class":699},[178,41115,32487],{"class":319},[178,41117,41118,41120,41122,41124],{"class":180,"line":354},[178,41119,32479],{"class":699},[178,41121,32499],{"class":319},[178,41123,700],{"class":699},[178,41125,32504],{"class":319},[178,41127,41128],{"class":180,"line":364},[178,41129,722],{"emptyLinePlaceholder":721},[178,41131,41132,41134,41136,41138,41140,41142,41144],{"class":180,"line":740},[178,41133,16453],{"class":699},[178,41135,39682],{"class":184},[178,41137,944],{"class":319},[178,41139,32520],{"class":184},[178,41141,2498],{"class":319},[178,41143,32525],{"class":184},[178,41145,1005],{"class":319},[178,41147,41148,41150,41152],{"class":180,"line":746},[178,41149,32542],{"class":699},[178,41151,32545],{"class":195},[178,41153,32548],{"class":319},[178,41155,41156,41158,41160,41162,41164,41166,41168,41170],{"class":180,"line":752},[178,41157,32558],{"class":195},[178,41159,944],{"class":319},[178,41161,39709],{"class":195},[178,41163,14196],{"class":319},[178,41165,32564],{"class":195},[178,41167,32567],{"class":319},[178,41169,32570],{"class":195},[178,41171,3760],{"class":319},[178,41173,41174],{"class":180,"line":757},[178,41175,39724],{"class":2008},[178,41177,41178],{"class":180,"line":763},[178,41179,39729],{"class":2008},[178,41181,41182,41184,41186,41188],{"class":180,"line":769},[178,41183,32586],{"class":195},[178,41185,39736],{"class":319},[178,41187,330],{"class":699},[178,41189,39741],{"class":319},[178,41191,41192,41194,41196,41198,41200,41202,41204,41206,41208,41210,41212,41214,41216,41218,41220,41222,41224],{"class":180,"line":774},[178,41193,39746],{"class":319},[178,41195,32597],{"class":6985},[178,41197,330],{"class":699},[178,41199,1665],{"class":195},[178,41201,2318],{"class":319},[178,41203,32606],{"class":6985},[178,41205,330],{"class":699},[178,41207,2145],{"class":195},[178,41209,2318],{"class":319},[178,41211,32615],{"class":6985},[178,41213,330],{"class":699},[178,41215,2021],{"class":195},[178,41217,2318],{"class":319},[178,41219,32624],{"class":6985},[178,41221,330],{"class":699},[178,41223,1665],{"class":195},[178,41225,39779],{"class":319},[178,41227,41228],{"class":180,"line":780},[178,41229,39784],{"class":319},[178,41231,41232,41234,41236,41238,41240,41242,41244,41246,41248,41250,41252,41254,41256,41258,41260,41262,41264],{"class":180,"line":786},[178,41233,39746],{"class":319},[178,41235,32597],{"class":6985},[178,41237,330],{"class":699},[178,41239,2145],{"class":195},[178,41241,2318],{"class":319},[178,41243,32606],{"class":6985},[178,41245,330],{"class":699},[178,41247,2145],{"class":195},[178,41249,2318],{"class":319},[178,41251,32615],{"class":6985},[178,41253,330],{"class":699},[178,41255,2021],{"class":195},[178,41257,2318],{"class":319},[178,41259,32624],{"class":6985},[178,41261,330],{"class":699},[178,41263,1665],{"class":195},[178,41265,39779],{"class":319},[178,41267,41268],{"class":180,"line":792},[178,41269,39784],{"class":319},[178,41271,41272,41274,41276,41278,41280,41282,41284,41286,41288,41290,41292,41294,41296],{"class":180,"line":798},[178,41273,39829],{"class":319},[178,41275,32615],{"class":6985},[178,41277,330],{"class":699},[178,41279,1669],{"class":195},[178,41281,2318],{"class":319},[178,41283,32670],{"class":6985},[178,41285,330],{"class":699},[178,41287,1669],{"class":195},[178,41289,2318],{"class":319},[178,41291,32624],{"class":6985},[178,41293,330],{"class":699},[178,41295,2133],{"class":195},[178,41297,863],{"class":319},[178,41299,41300],{"class":180,"line":804},[178,41301,39858],{"class":319},[178,41303,41304],{"class":180,"line":810},[178,41305,39863],{"class":2008},[178,41307,41308,41310,41312,41314],{"class":180,"line":816},[178,41309,32586],{"class":195},[178,41311,39870],{"class":319},[178,41313,330],{"class":699},[178,41315,39741],{"class":319},[178,41317,41318,41320,41322,41324,41326,41328,41330,41332,41334,41336,41338,41340,41342,41344,41346,41348,41350],{"class":180,"line":822},[178,41319,39746],{"class":319},[178,41321,32597],{"class":6985},[178,41323,330],{"class":699},[178,41325,2145],{"class":195},[178,41327,2318],{"class":319},[178,41329,32606],{"class":6985},[178,41331,330],{"class":699},[178,41333,33803],{"class":195},[178,41335,2318],{"class":319},[178,41337,32615],{"class":6985},[178,41339,330],{"class":699},[178,41341,2021],{"class":195},[178,41343,2318],{"class":319},[178,41345,32624],{"class":6985},[178,41347,330],{"class":699},[178,41349,1665],{"class":195},[178,41351,39779],{"class":319},[178,41353,41354],{"class":180,"line":827},[178,41355,39784],{"class":319},[178,41357,41358,41360,41362,41364,41366,41368,41370,41372,41374,41376,41378,41380,41382,41384,41386,41388,41390],{"class":180,"line":832},[178,41359,39746],{"class":319},[178,41361,32597],{"class":6985},[178,41363,330],{"class":699},[178,41365,33803],{"class":195},[178,41367,2318],{"class":319},[178,41369,32606],{"class":6985},[178,41371,330],{"class":699},[178,41373,33803],{"class":195},[178,41375,2318],{"class":319},[178,41377,32615],{"class":6985},[178,41379,330],{"class":699},[178,41381,2021],{"class":195},[178,41383,2318],{"class":319},[178,41385,32624],{"class":6985},[178,41387,330],{"class":699},[178,41389,1665],{"class":195},[178,41391,39779],{"class":319},[178,41393,41394],{"class":180,"line":850},[178,41395,39784],{"class":319},[178,41397,41398,41400,41402,41404,41406,41408,41410,41412,41414,41416,41418,41420,41422],{"class":180,"line":866},[178,41399,39829],{"class":319},[178,41401,32615],{"class":6985},[178,41403,330],{"class":699},[178,41405,1669],{"class":195},[178,41407,2318],{"class":319},[178,41409,32670],{"class":6985},[178,41411,330],{"class":699},[178,41413,1669],{"class":195},[178,41415,2318],{"class":319},[178,41417,32624],{"class":6985},[178,41419,330],{"class":699},[178,41421,2133],{"class":195},[178,41423,863],{"class":319},[178,41425,41426],{"class":180,"line":877},[178,41427,39858],{"class":319},[178,41429,41430],{"class":180,"line":882},[178,41431,39991],{"class":2008},[178,41433,41434,41436,41438,41440],{"class":180,"line":898},[178,41435,32586],{"class":195},[178,41437,39998],{"class":319},[178,41439,330],{"class":699},[178,41441,39741],{"class":319},[178,41443,41444,41446,41448,41450,41452,41454,41456,41458,41460,41462,41464,41466,41468,41470,41472,41474,41476],{"class":180,"line":914},[178,41445,39746],{"class":319},[178,41447,32597],{"class":6985},[178,41449,330],{"class":699},[178,41451,33803],{"class":195},[178,41453,2318],{"class":319},[178,41455,32606],{"class":6985},[178,41457,330],{"class":699},[178,41459,36602],{"class":195},[178,41461,2318],{"class":319},[178,41463,32615],{"class":6985},[178,41465,330],{"class":699},[178,41467,2021],{"class":195},[178,41469,2318],{"class":319},[178,41471,32624],{"class":6985},[178,41473,330],{"class":699},[178,41475,1665],{"class":195},[178,41477,39779],{"class":319},[178,41479,41480],{"class":180,"line":919},[178,41481,39784],{"class":319},[178,41483,41484,41486,41488,41490,41492,41494,41496,41498,41500,41502,41504,41506,41508,41510,41512,41514,41516],{"class":180,"line":935},[178,41485,39746],{"class":319},[178,41487,32597],{"class":6985},[178,41489,330],{"class":699},[178,41491,36602],{"class":195},[178,41493,2318],{"class":319},[178,41495,32606],{"class":6985},[178,41497,330],{"class":699},[178,41499,36602],{"class":195},[178,41501,2318],{"class":319},[178,41503,32615],{"class":6985},[178,41505,330],{"class":699},[178,41507,2021],{"class":195},[178,41509,2318],{"class":319},[178,41511,32624],{"class":6985},[178,41513,330],{"class":699},[178,41515,1665],{"class":195},[178,41517,39779],{"class":319},[178,41519,41520],{"class":180,"line":952},[178,41521,39784],{"class":319},[178,41523,41524,41526,41528,41530,41532,41534,41536,41538,41540,41542,41544,41546,41548,41550,41552,41554,41556],{"class":180,"line":966},[178,41525,39746],{"class":319},[178,41527,32597],{"class":6985},[178,41529,330],{"class":699},[178,41531,36602],{"class":195},[178,41533,2318],{"class":319},[178,41535,32606],{"class":6985},[178,41537,330],{"class":699},[178,41539,36602],{"class":195},[178,41541,2318],{"class":319},[178,41543,32615],{"class":6985},[178,41545,330],{"class":699},[178,41547,2021],{"class":195},[178,41549,2318],{"class":319},[178,41551,32624],{"class":6985},[178,41553,330],{"class":699},[178,41555,1665],{"class":195},[178,41557,39779],{"class":319},[178,41559,41560],{"class":180,"line":980},[178,41561,39784],{"class":319},[178,41563,41564,41566,41568,41570,41572,41574,41576,41578,41580,41582,41584,41586,41588],{"class":180,"line":985},[178,41565,39829],{"class":319},[178,41567,32615],{"class":6985},[178,41569,330],{"class":699},[178,41571,1669],{"class":195},[178,41573,2318],{"class":319},[178,41575,32670],{"class":6985},[178,41577,330],{"class":699},[178,41579,1669],{"class":195},[178,41581,2318],{"class":319},[178,41583,32624],{"class":6985},[178,41585,330],{"class":699},[178,41587,2133],{"class":195},[178,41589,863],{"class":319},[178,41591,41592],{"class":180,"line":1008},[178,41593,39858],{"class":319},[178,41595,41596],{"class":180,"line":1014},[178,41597,40159],{"class":2008},[178,41599,41600,41602,41604,41606],{"class":180,"line":1019},[178,41601,32586],{"class":195},[178,41603,40166],{"class":319},[178,41605,330],{"class":699},[178,41607,39741],{"class":319},[178,41609,41610,41612,41614,41616,41618,41620,41622,41624,41626,41628,41630,41632,41634,41636,41638,41640,41642],{"class":180,"line":1033},[178,41611,39746],{"class":319},[178,41613,32597],{"class":6985},[178,41615,330],{"class":699},[178,41617,36602],{"class":195},[178,41619,2318],{"class":319},[178,41621,32606],{"class":6985},[178,41623,330],{"class":699},[178,41625,40189],{"class":195},[178,41627,2318],{"class":319},[178,41629,32615],{"class":6985},[178,41631,330],{"class":699},[178,41633,2021],{"class":195},[178,41635,2318],{"class":319},[178,41637,32624],{"class":6985},[178,41639,330],{"class":699},[178,41641,1665],{"class":195},[178,41643,39779],{"class":319},[178,41645,41646],{"class":180,"line":1046},[178,41647,39784],{"class":319},[178,41649,41650,41652,41654,41656,41658,41660,41662,41664,41666,41668,41670,41672,41674,41676,41678,41680,41682],{"class":180,"line":1059},[178,41651,39746],{"class":319},[178,41653,32597],{"class":6985},[178,41655,330],{"class":699},[178,41657,40189],{"class":195},[178,41659,2318],{"class":319},[178,41661,32606],{"class":6985},[178,41663,330],{"class":699},[178,41665,40189],{"class":195},[178,41667,2318],{"class":319},[178,41669,32615],{"class":6985},[178,41671,330],{"class":699},[178,41673,2021],{"class":195},[178,41675,2318],{"class":319},[178,41677,32624],{"class":6985},[178,41679,330],{"class":699},[178,41681,1665],{"class":195},[178,41683,39779],{"class":319},[178,41685,41686],{"class":180,"line":1072},[178,41687,39784],{"class":319},[178,41689,41690,41692,41694,41696,41698,41700,41702,41704,41706,41708,41710,41712,41714,41716,41718,41720,41722],{"class":180,"line":1077},[178,41691,39746],{"class":319},[178,41693,32597],{"class":6985},[178,41695,330],{"class":699},[178,41697,40189],{"class":195},[178,41699,2318],{"class":319},[178,41701,32606],{"class":6985},[178,41703,330],{"class":699},[178,41705,40189],{"class":195},[178,41707,2318],{"class":319},[178,41709,32615],{"class":6985},[178,41711,330],{"class":699},[178,41713,2021],{"class":195},[178,41715,2318],{"class":319},[178,41717,32624],{"class":6985},[178,41719,330],{"class":699},[178,41721,1665],{"class":195},[178,41723,39779],{"class":319},[178,41725,41726],{"class":180,"line":1082},[178,41727,39784],{"class":319},[178,41729,41730,41732,41734,41736,41738,41740,41742,41744,41746,41748,41750,41752,41754],{"class":180,"line":1099},[178,41731,39829],{"class":319},[178,41733,32615],{"class":6985},[178,41735,330],{"class":699},[178,41737,1669],{"class":195},[178,41739,2318],{"class":319},[178,41741,32670],{"class":6985},[178,41743,330],{"class":699},[178,41745,1669],{"class":195},[178,41747,2318],{"class":319},[178,41749,32624],{"class":6985},[178,41751,330],{"class":699},[178,41753,2133],{"class":195},[178,41755,863],{"class":319},[178,41757,41758],{"class":180,"line":9806},[178,41759,39858],{"class":319},[178,41761,41762],{"class":180,"line":9818},[178,41763,40328],{"class":2008},[178,41765,41766,41768,41770,41772],{"class":180,"line":11477},[178,41767,32586],{"class":195},[178,41769,40335],{"class":319},[178,41771,330],{"class":699},[178,41773,39741],{"class":319},[178,41775,41776,41778,41780,41782,41784,41786,41788,41790,41792,41794,41796,41798,41800,41802,41804,41806,41808],{"class":180,"line":11502},[178,41777,39746],{"class":319},[178,41779,32597],{"class":6985},[178,41781,330],{"class":699},[178,41783,40189],{"class":195},[178,41785,2318],{"class":319},[178,41787,32606],{"class":6985},[178,41789,330],{"class":699},[178,41791,40189],{"class":195},[178,41793,2318],{"class":319},[178,41795,32615],{"class":6985},[178,41797,330],{"class":699},[178,41799,2021],{"class":195},[178,41801,2318],{"class":319},[178,41803,32624],{"class":6985},[178,41805,330],{"class":699},[178,41807,1665],{"class":195},[178,41809,39779],{"class":319},[178,41811,41812],{"class":180,"line":11525},[178,41813,39784],{"class":319},[178,41815,41816,41818,41820,41822,41824,41826,41828,41830,41832,41834,41836,41838,41840,41842,41844,41846,41848],{"class":180,"line":11549},[178,41817,39746],{"class":319},[178,41819,32597],{"class":6985},[178,41821,330],{"class":699},[178,41823,40189],{"class":195},[178,41825,2318],{"class":319},[178,41827,32606],{"class":6985},[178,41829,330],{"class":699},[178,41831,40189],{"class":195},[178,41833,2318],{"class":319},[178,41835,32615],{"class":6985},[178,41837,330],{"class":699},[178,41839,2021],{"class":195},[178,41841,2318],{"class":319},[178,41843,32624],{"class":6985},[178,41845,330],{"class":699},[178,41847,1665],{"class":195},[178,41849,39779],{"class":319},[178,41851,41852],{"class":180,"line":11554},[178,41853,39784],{"class":319},[178,41855,41856,41858,41860,41862,41864,41866,41868,41870,41872,41874,41876,41878,41880,41882,41884,41886,41888],{"class":180,"line":11559},[178,41857,39746],{"class":319},[178,41859,32597],{"class":6985},[178,41861,330],{"class":699},[178,41863,40189],{"class":195},[178,41865,2318],{"class":319},[178,41867,32606],{"class":6985},[178,41869,330],{"class":699},[178,41871,40189],{"class":195},[178,41873,2318],{"class":319},[178,41875,32615],{"class":6985},[178,41877,330],{"class":699},[178,41879,2021],{"class":195},[178,41881,2318],{"class":319},[178,41883,32624],{"class":6985},[178,41885,330],{"class":699},[178,41887,1665],{"class":195},[178,41889,39779],{"class":319},[178,41891,41892],{"class":180,"line":11564},[178,41893,39784],{"class":319},[178,41895,41896,41898,41900,41902,41904,41906,41908,41910,41912,41914,41916,41918,41920],{"class":180,"line":11573},[178,41897,39829],{"class":319},[178,41899,32615],{"class":6985},[178,41901,330],{"class":699},[178,41903,1669],{"class":195},[178,41905,2318],{"class":319},[178,41907,32670],{"class":6985},[178,41909,330],{"class":699},[178,41911,1669],{"class":195},[178,41913,2318],{"class":319},[178,41915,32624],{"class":6985},[178,41917,330],{"class":699},[178,41919,2133],{"class":195},[178,41921,863],{"class":319},[178,41923,41924],{"class":180,"line":11578},[178,41925,39858],{"class":319},[178,41927,41928],{"class":180,"line":11584},[178,41929,40496],{"class":2008},[178,41931,41932,41934,41936,41938],{"class":180,"line":11605},[178,41933,32586],{"class":195},[178,41935,40503],{"class":319},[178,41937,330],{"class":699},[178,41939,39741],{"class":319},[178,41941,41942],{"class":180,"line":11611},[178,41943,40512],{"class":2008},[178,41945,41946],{"class":180,"line":11625},[178,41947,40517],{"class":2008},[178,41949,41950],{"class":180,"line":11631},[178,41951,40522],{"class":319},[178,41953,41954,41956,41958,41960,41962,41964,41966,41968,41970],{"class":180,"line":11658},[178,41955,40527],{"class":319},[178,41957,2309],{"class":195},[178,41959,2395],{"class":699},[178,41961,2309],{"class":195},[178,41963,2395],{"class":699},[178,41965,40189],{"class":195},[178,41967,2318],{"class":319},[178,41969,36602],{"class":195},[178,41971,39779],{"class":319},[178,41973,41974],{"class":180,"line":11667},[178,41975,39784],{"class":319},[178,41977,41978,41980,41982,41984,41986],{"class":180,"line":11673},[178,41979,40527],{"class":319},[178,41981,36602],{"class":195},[178,41983,2318],{"class":319},[178,41985,33803],{"class":195},[178,41987,39779],{"class":319},[178,41989,41990],{"class":180,"line":11681},[178,41991,39784],{"class":319},[178,41993,41994,41996,41998,42000,42002],{"class":180,"line":11686},[178,41995,40527],{"class":319},[178,41997,33803],{"class":195},[178,41999,2318],{"class":319},[178,42001,2386],{"class":195},[178,42003,863],{"class":319},[178,42005,42006],{"class":180,"line":18362},[178,42007,39858],{"class":319},[178,42009,42010],{"class":180,"line":18368},[178,42011,722],{"emptyLinePlaceholder":721},[178,42013,42014],{"class":180,"line":18391},[178,42015,40588],{"class":2008},[178,42017,42018],{"class":180,"line":18397},[178,42019,40593],{"class":2008},[178,42021,42022,42024,42026,42028,42030],{"class":180,"line":18420},[178,42023,5176],{"class":699},[178,42025,40600],{"class":319},[178,42027,994],{"class":699},[178,42029,40605],{"class":195},[178,42031,40608],{"class":319},[178,42033,42034],{"class":180,"line":18434},[178,42035,40613],{"class":2008},[178,42037,42038,42040,42042],{"class":180,"line":18454},[178,42039,6413],{"class":699},[178,42041,40620],{"class":195},[178,42043,40623],{"class":319},[178,42045,42046],{"class":180,"line":18460},[178,42047,40628],{"class":2008},[178,42049,42050,42052,42054,42056,42058],{"class":180,"line":18471},[178,42051,40633],{"class":319},[178,42053,40636],{"class":6985},[178,42055,330],{"class":699},[178,42057,40641],{"class":188},[178,42059,863],{"class":319},[178,42061,42062],{"class":180,"line":18494},[178,42063,40648],{"class":2008},[178,42065,42066,42068,42070,42072,42074,42076],{"class":180,"line":18516},[178,42067,40653],{"class":699},[178,42069,40656],{"class":319},[178,42071,40659],{"class":699},[178,42073,40662],{"class":699},[178,42075,40665],{"class":195},[178,42077,847],{"class":319},[178,42079,42080],{"class":180,"line":18521},[178,42081,40672],{"class":2008},[178,42083,42084,42086,42088],{"class":180,"line":18527},[178,42085,40677],{"class":319},[178,42087,2133],{"class":195},[178,42089,863],{"class":319},[178,42091,42092],{"class":180,"line":18541},[178,42093,40686],{"class":2008},[178,42095,42096,42098,42100],{"class":180,"line":18554},[178,42097,40691],{"class":699},[178,42099,40620],{"class":195},[178,42101,40696],{"class":319},[178,42103,42104],{"class":180,"line":18559},[178,42105,40701],{"class":2008},[178,42107,42108],{"class":180,"line":18573},[178,42109,40706],{"class":2008},[178,42111,42112,42114,42116,42118,42120],{"class":180,"line":18578},[178,42113,40711],{"class":319},[178,42115,2133],{"class":195},[178,42117,2318],{"class":319},[178,42119,40718],{"class":195},[178,42121,863],{"class":319},[178,42123,42124],{"class":180,"line":18584},[178,42125,40725],{"class":2008},[178,42127,42128,42130,42132,42134,42136,42138],{"class":180,"line":18589},[178,42129,40653],{"class":699},[178,42131,40656],{"class":319},[178,42133,40659],{"class":699},[178,42135,40662],{"class":699},[178,42137,40665],{"class":195},[178,42139,847],{"class":319},[178,42141,42142,42144,42146],{"class":180,"line":18603},[178,42143,40677],{"class":319},[178,42145,2133],{"class":195},[178,42147,863],{"class":319},[178,42149,42150],{"class":180,"line":18608},[178,42151,722],{"emptyLinePlaceholder":721},[178,42153,42154],{"class":180,"line":18613},[178,42155,36897],{"class":2008},[178,42157,42158,42160,42162],{"class":180,"line":18627},[178,42159,32542],{"class":699},[178,42161,32834],{"class":184},[178,42163,32837],{"class":319},[178,42165,42166,42168,42170,42172],{"class":180,"line":18639},[178,42167,32842],{"class":319},[178,42169,330],{"class":699},[178,42171,32564],{"class":195},[178,42173,40774],{"class":319},[178,42175,42176,42178,42180,42182],{"class":180,"line":18644},[178,42177,32842],{"class":319},[178,42179,330],{"class":699},[178,42181,32564],{"class":195},[178,42183,40785],{"class":319},[178,42185,42186,42188,42190,42192],{"class":180,"line":18657},[178,42187,32842],{"class":319},[178,42189,330],{"class":699},[178,42191,32564],{"class":195},[178,42193,40796],{"class":319},[178,42195,42196,42198,42200,42202],{"class":180,"line":18662},[178,42197,32842],{"class":319},[178,42199,330],{"class":699},[178,42201,32564],{"class":195},[178,42203,40807],{"class":319},[178,42205,42206,42208,42210,42212],{"class":180,"line":18667},[178,42207,32842],{"class":319},[178,42209,330],{"class":699},[178,42211,32564],{"class":195},[178,42213,40818],{"class":319},[178,42215,42216,42218,42220,42222],{"class":180,"line":18672},[178,42217,32842],{"class":319},[178,42219,330],{"class":699},[178,42221,32564],{"class":195},[178,42223,40829],{"class":319},[178,42225,42226,42228],{"class":180,"line":18685},[178,42227,16511],{"class":699},[178,42229,32950],{"class":319},[178,42231,42232],{"class":180,"line":18690},[178,42233,722],{"emptyLinePlaceholder":721},[178,42235,42236],{"class":180,"line":34365},[178,42237,40844],{"class":2008},[178,42239,42240,42242,42244,42246,42248],{"class":180,"line":34371},[178,42241,1085],{"class":699},[178,42243,1088],{"class":195},[178,42245,4725],{"class":699},[178,42247,40855],{"class":188},[178,42249,847],{"class":319},[178,42251,42252,42254,42256,42258,42260,42262,42264,42266,42268],{"class":180,"line":34377},[178,42253,32977],{"class":319},[178,42255,330],{"class":699},[178,42257,32193],{"class":319},[178,42259,32984],{"class":188},[178,42261,3499],{"class":699},[178,42263,32989],{"class":319},[178,42265,3496],{"class":699},[178,42267,32218],{"class":188},[178,42269,863],{"class":319},[178,42271,42272,42274],{"class":180,"line":34383},[178,42273,1022],{"class":195},[178,42275,32227],{"class":319},[178,42277,42278,42280,42282],{"class":180,"line":34389},[178,42279,33029],{"class":319},[178,42281,330],{"class":699},[178,42283,40892],{"class":319},[178,42285,42286,42288,42290,42292,42294,42296,42298,42300],{"class":180,"line":34400},[178,42287,1022],{"class":195},[178,42289,33041],{"class":319},[178,42291,1665],{"class":195},[178,42293,2318],{"class":319},[178,42295,33236],{"class":195},[178,42297,2318],{"class":319},[178,42299,33236],{"class":195},[178,42301,33054],{"class":319},[26,42303,42304],{"start":274},[29,42305,42306],{},"测试代码",[154,42308,42310],{"className":690,"code":42309,"language":692,"meta":160,"style":160},"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",[70,42311,42312,42318,42328,42338,42342,42352,42363,42367,42371,42375,42383,42399,42409,42425,42435,42449,42453,42463,42473,42483,42489,42493,42497,42505,42509,42525,42533,42537,42541,42549,42557,42561,42565,42569,42573,42579,42583,42593,42601,42609,42613,42617,42621,42629,42633,42649,42653,42657,42661,42673,42677,42689,42693,42697,42709,42713,42723,42727,42731,42743,42747,42756,42760,42764,42772,42776,42784,42788,42792,42796,42800,42804,42820,42828,42832,42836,42884,42890,42894,42904,42912,42920,42924,42928,42932,42936,42944,42948,42964,42968,42976,42984],{"__ignoreMap":160},[178,42313,42314,42316],{"class":180,"line":181},[178,42315,700],{"class":699},[178,42317,32138],{"class":319},[178,42319,42320,42322,42324,42326],{"class":180,"line":263},[178,42321,700],{"class":699},[178,42323,33151],{"class":319},[178,42325,713],{"class":699},[178,42327,33156],{"class":319},[178,42329,42330,42332,42334,42336],{"class":180,"line":274},[178,42331,32479],{"class":699},[178,42333,33134],{"class":319},[178,42335,700],{"class":699},[178,42337,33139],{"class":319},[178,42339,42340],{"class":180,"line":354},[178,42341,35654],{"class":2008},[178,42343,42344,42346,42348,42350],{"class":180,"line":364},[178,42345,32479],{"class":699},[178,42347,33107],{"class":319},[178,42349,700],{"class":699},[178,42351,33112],{"class":319},[178,42353,42354,42356,42358,42360],{"class":180,"line":740},[178,42355,32479],{"class":699},[178,42357,33649],{"class":319},[178,42359,700],{"class":699},[178,42361,42362],{"class":195}," VGG16\n",[178,42364,42365],{"class":180,"line":746},[178,42366,722],{"emptyLinePlaceholder":721},[178,42368,42369],{"class":180,"line":752},[178,42370,722],{"emptyLinePlaceholder":721},[178,42372,42373],{"class":180,"line":757},[178,42374,35683],{"class":2008},[178,42376,42377,42379,42381],{"class":180,"line":763},[178,42378,835],{"class":699},[178,42380,35690],{"class":184},[178,42382,33687],{"class":319},[178,42384,42385,42387,42389,42391,42393,42395,42397],{"class":180,"line":769},[178,42386,35697],{"class":319},[178,42388,330],{"class":699},[178,42390,33191],{"class":319},[178,42392,33194],{"class":6985},[178,42394,330],{"class":699},[178,42396,33199],{"class":188},[178,42398,33202],{"class":319},[178,42400,42401,42403,42405,42407],{"class":180,"line":774},[178,42402,35714],{"class":6985},[178,42404,330],{"class":699},[178,42406,35719],{"class":195},[178,42408,33202],{"class":319},[178,42410,42411,42413,42415,42417,42419,42421,42423],{"class":180,"line":780},[178,42412,35726],{"class":6985},[178,42414,330],{"class":699},[178,42416,33229],{"class":319},[178,42418,554],{"class":6985},[178,42420,330],{"class":699},[178,42422,33236],{"class":195},[178,42424,33239],{"class":319},[178,42426,42427,42429,42431,42433],{"class":180,"line":786},[178,42428,35743],{"class":6985},[178,42430,330],{"class":699},[178,42432,33212],{"class":195},[178,42434,863],{"class":319},[178,42436,42437,42439,42441,42443,42445,42447],{"class":180,"line":792},[178,42438,35754],{"class":319},[178,42440,330],{"class":699},[178,42442,33269],{"class":319},[178,42444,33272],{"class":6985},[178,42446,330],{"class":699},[178,42448,35765],{"class":319},[178,42450,42451],{"class":180,"line":798},[178,42452,35770],{"class":2008},[178,42454,42455,42457,42459,42461],{"class":180,"line":804},[178,42456,35775],{"class":6985},[178,42458,330],{"class":699},[178,42460,1665],{"class":195},[178,42462,33202],{"class":319},[178,42464,42465,42467,42469,42471],{"class":180,"line":810},[178,42466,35786],{"class":6985},[178,42468,330],{"class":699},[178,42470,33212],{"class":195},[178,42472,33202],{"class":319},[178,42474,42475,42477,42479,42481],{"class":180,"line":816},[178,42476,35797],{"class":6985},[178,42478,330],{"class":699},[178,42480,2133],{"class":195},[178,42482,863],{"class":319},[178,42484,42485,42487],{"class":180,"line":822},[178,42486,5862],{"class":699},[178,42488,35810],{"class":319},[178,42490,42491],{"class":180,"line":827},[178,42492,722],{"emptyLinePlaceholder":721},[178,42494,42495],{"class":180,"line":832},[178,42496,35819],{"class":2008},[178,42498,42499,42501,42503],{"class":180,"line":850},[178,42500,835],{"class":699},[178,42502,35826],{"class":184},[178,42504,35829],{"class":319},[178,42506,42507],{"class":180,"line":866},[178,42508,35834],{"class":2008},[178,42510,42511,42513,42515,42517,42519,42521,42523],{"class":180,"line":877},[178,42512,32977],{"class":319},[178,42514,330],{"class":699},[178,42516,32984],{"class":188},[178,42518,3499],{"class":699},[178,42520,32989],{"class":319},[178,42522,3496],{"class":699},[178,42524,35851],{"class":188},[178,42526,42527,42529,42531],{"class":180,"line":882},[178,42528,33029],{"class":319},[178,42530,330],{"class":699},[178,42532,34022],{"class":319},[178,42534,42535],{"class":180,"line":898},[178,42536,722],{"emptyLinePlaceholder":721},[178,42538,42539],{"class":180,"line":914},[178,42540,35868],{"class":2008},[178,42542,42543,42545,42547],{"class":180,"line":919},[178,42544,35873],{"class":319},[178,42546,330],{"class":699},[178,42548,34075],{"class":195},[178,42550,42551,42553,42555],{"class":180,"line":935},[178,42552,35882],{"class":319},[178,42554,330],{"class":699},[178,42556,4860],{"class":195},[178,42558,42559],{"class":180,"line":952},[178,42560,722],{"emptyLinePlaceholder":721},[178,42562,42563],{"class":180,"line":966},[178,42564,35895],{"class":2008},[178,42566,42567],{"class":180,"line":980},[178,42568,35900],{"class":2008},[178,42570,42571],{"class":180,"line":985},[178,42572,35905],{"class":2008},[178,42574,42575,42577],{"class":180,"line":1008},[178,42576,35910],{"class":699},[178,42578,34616],{"class":319},[178,42580,42581],{"class":180,"line":1014},[178,42582,35917],{"class":2008},[178,42584,42585,42587,42589,42591],{"class":180,"line":1019},[178,42586,5176],{"class":699},[178,42588,35924],{"class":319},[178,42590,994],{"class":699},[178,42592,35929],{"class":319},[178,42594,42595,42597,42599],{"class":180,"line":1033},[178,42596,35934],{"class":319},[178,42598,330],{"class":699},[178,42600,35939],{"class":319},[178,42602,42603,42605,42607],{"class":180,"line":1046},[178,42604,35944],{"class":319},[178,42606,330],{"class":699},[178,42608,35949],{"class":319},[178,42610,42611],{"class":180,"line":1059},[178,42612,35954],{"class":2008},[178,42614,42615],{"class":180,"line":1072},[178,42616,34607],{"class":319},[178,42618,42619],{"class":180,"line":1077},[178,42620,35963],{"class":2008},[178,42622,42623,42625,42627],{"class":180,"line":1082},[178,42624,34392],{"class":319},[178,42626,330],{"class":699},[178,42628,35972],{"class":319},[178,42630,42631],{"class":180,"line":1099},[178,42632,35977],{"class":2008},[178,42634,42635,42637,42639,42641,42643,42645,42647],{"class":180,"line":9806},[178,42636,34409],{"class":319},[178,42638,330],{"class":699},[178,42640,34414],{"class":319},[178,42642,34417],{"class":6985},[178,42644,330],{"class":699},[178,42646,1665],{"class":195},[178,42648,863],{"class":319},[178,42650,42651],{"class":180,"line":9818},[178,42652,35998],{"class":2008},[178,42654,42655],{"class":180,"line":11477},[178,42656,36003],{"class":2008},[178,42658,42659],{"class":180,"line":11502},[178,42660,36008],{"class":2008},[178,42662,42663,42665,42667,42669,42671],{"class":180,"line":11525},[178,42664,36013],{"class":319},[178,42666,11238],{"class":699},[178,42668,34519],{"class":319},[178,42670,4725],{"class":699},[178,42672,36022],{"class":319},[178,42674,42675],{"class":180,"line":11549},[178,42676,36027],{"class":2008},[178,42678,42679,42681,42683,42685,42687],{"class":180,"line":11554},[178,42680,36032],{"class":319},[178,42682,11238],{"class":699},[178,42684,36037],{"class":319},[178,42686,2133],{"class":195},[178,42688,863],{"class":319},[178,42690,42691],{"class":180,"line":11559},[178,42692,722],{"emptyLinePlaceholder":721},[178,42694,42695],{"class":180,"line":11564},[178,42696,36050],{"class":2008},[178,42698,42699,42701,42703,42705,42707],{"class":180,"line":11573},[178,42700,36055],{"class":319},[178,42702,330],{"class":699},[178,42704,36060],{"class":319},[178,42706,2524],{"class":699},[178,42708,36065],{"class":319},[178,42710,42711],{"class":180,"line":11578},[178,42712,36070],{"class":2008},[178,42714,42715,42717,42719,42721],{"class":180,"line":11584},[178,42716,34183],{"class":195},[178,42718,944],{"class":319},[178,42720,36079],{"class":188},[178,42722,36082],{"class":319},[178,42724,42725],{"class":180,"line":11605},[178,42726,722],{"emptyLinePlaceholder":721},[178,42728,42729],{"class":180,"line":11611},[178,42730,36091],{"class":2008},[178,42732,42733,42735,42737,42739,42741],{"class":180,"line":11625},[178,42734,1085],{"class":699},[178,42736,1088],{"class":195},[178,42738,4725],{"class":699},[178,42740,32965],{"class":188},[178,42742,847],{"class":319},[178,42744,42745],{"class":180,"line":11631},[178,42746,36108],{"class":2008},[178,42748,42749,42751,42753],{"class":180,"line":11658},[178,42750,33029],{"class":319},[178,42752,330],{"class":699},[178,42754,42755],{"class":319},"VGG16()\n",[178,42757,42758],{"class":180,"line":11667},[178,42759,36121],{"class":2008},[178,42761,42762],{"class":180,"line":11673},[178,42763,36126],{"class":2008},[178,42765,42766,42768,42770],{"class":180,"line":11681},[178,42767,36131],{"class":319},[178,42769,36134],{"class":188},[178,42771,32239],{"class":319},[178,42773,42774],{"class":180,"line":11686},[178,42775,36141],{"class":2008},[178,42777,42778,42780,42782],{"class":180,"line":18362},[178,42779,35754],{"class":319},[178,42781,330],{"class":699},[178,42783,36150],{"class":319},[178,42785,42786],{"class":180,"line":18368},[178,42787,36155],{"class":2008},[178,42789,42790],{"class":180,"line":18391},[178,42791,36160],{"class":319},[178,42793,42794],{"class":180,"line":18397},[178,42795,722],{"emptyLinePlaceholder":721},[178,42797,42798],{"class":180,"line":18420},[178,42799,36169],{"class":2008},[178,42801,42802],{"class":180,"line":18434},[178,42803,36174],{"class":2008},[178,42805,42806,42808,42810,42812,42814,42816,42818],{"class":180,"line":18454},[178,42807,32977],{"class":319},[178,42809,330],{"class":699},[178,42811,32984],{"class":188},[178,42813,3499],{"class":699},[178,42815,32989],{"class":319},[178,42817,3496],{"class":699},[178,42819,35851],{"class":188},[178,42821,42822,42824,42826],{"class":180,"line":18460},[178,42823,33029],{"class":319},[178,42825,330],{"class":699},[178,42827,34022],{"class":319},[178,42829,42830],{"class":180,"line":18471},[178,42831,36203],{"class":2008},[178,42833,42834],{"class":180,"line":18494},[178,42835,36208],{"class":2008},[178,42837,42838,42840,42842,42844,42846,42848,42850,42852,42854,42856,42858,42860,42862,42864,42866,42868,42870,42872,42874,42876,42878,42880,42882],{"class":180,"line":18516},[178,42839,36213],{"class":319},[178,42841,330],{"class":699},[178,42843,2830],{"class":319},[178,42845,36220],{"class":188},[178,42847,2318],{"class":319},[178,42849,36225],{"class":188},[178,42851,2318],{"class":319},[178,42853,36230],{"class":188},[178,42855,2318],{"class":319},[178,42857,36235],{"class":188},[178,42859,2318],{"class":319},[178,42861,36240],{"class":188},[178,42863,2318],{"class":319},[178,42865,36245],{"class":188},[178,42867,2318],{"class":319},[178,42869,36250],{"class":188},[178,42871,2318],{"class":319},[178,42873,36255],{"class":188},[178,42875,2318],{"class":319},[178,42877,36260],{"class":188},[178,42879,2318],{"class":319},[178,42881,36265],{"class":188},[178,42883,34978],{"class":319},[178,42885,42886,42888],{"class":180,"line":18521},[178,42887,35910],{"class":699},[178,42889,34616],{"class":319},[178,42891,42892],{"class":180,"line":18527},[178,42893,36278],{"class":2008},[178,42895,42896,42898,42900,42902],{"class":180,"line":18541},[178,42897,5176],{"class":699},[178,42899,36285],{"class":319},[178,42901,994],{"class":699},[178,42903,35929],{"class":319},[178,42905,42906,42908,42910],{"class":180,"line":18554},[178,42907,34342],{"class":319},[178,42909,330],{"class":699},[178,42911,34347],{"class":319},[178,42913,42914,42916,42918],{"class":180,"line":18559},[178,42915,34357],{"class":319},[178,42917,330],{"class":699},[178,42919,34362],{"class":319},[178,42921,42922],{"class":180,"line":18573},[178,42923,722],{"emptyLinePlaceholder":721},[178,42925,42926],{"class":180,"line":18578},[178,42927,36314],{"class":2008},[178,42929,42930],{"class":180,"line":18584},[178,42931,34607],{"class":319},[178,42933,42934],{"class":180,"line":18589},[178,42935,36323],{"class":2008},[178,42937,42938,42940,42942],{"class":180,"line":18603},[178,42939,34392],{"class":319},[178,42941,330],{"class":699},[178,42943,34397],{"class":319},[178,42945,42946],{"class":180,"line":18608},[178,42947,36336],{"class":2008},[178,42949,42950,42952,42954,42956,42958,42960,42962],{"class":180,"line":18613},[178,42951,34409],{"class":319},[178,42953,330],{"class":699},[178,42955,34414],{"class":319},[178,42957,34417],{"class":6985},[178,42959,330],{"class":699},[178,42961,1665],{"class":195},[178,42963,863],{"class":319},[178,42965,42966],{"class":180,"line":18627},[178,42967,36357],{"class":2008},[178,42969,42970,42972,42974],{"class":180,"line":18639},[178,42971,36362],{"class":319},[178,42973,330],{"class":699},[178,42975,36367],{"class":319},[178,42977,42978,42980,42982],{"class":180,"line":18644},[178,42979,36372],{"class":319},[178,42981,330],{"class":699},[178,42983,36377],{"class":319},[178,42985,42986,42988,42990,42992,42994,42996,42998,43000],{"class":180,"line":18657},[178,42987,36382],{"class":195},[178,42989,944],{"class":319},[178,42991,36387],{"class":188},[178,42993,36390],{"class":319},[178,42995,36393],{"class":188},[178,42997,2318],{"class":319},[178,42999,36398],{"class":188},[178,43001,36401],{"class":319},[387,43003,43005],{"id":43004},"_23googlenet","2.3.GoogLeNet",[23756,43007,43009],{"id":43008},"_231原理","2.3.1.原理",[26,43011,43012],{},[29,43013,43014],{},"网络结构",[19,43016,43017],{},[3269,43018],{"alt":160,"src":43019},"\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,43021,43022],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,43024,43025],{},[3269,43026],{"alt":160,"src":43027},"\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,43029,43030],{},[3269,43031],{"alt":160,"src":43032},"\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,43034,43035],{},[3269,43036],{"alt":160,"src":43037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-026.png",[26,43039,43040],{"start":263},[29,43041,43042],{},"1x1卷积的优点",[19,43044,43045],{},[3269,43046],{"alt":160,"src":43047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[26,43049,43050],{"start":274},[29,43051,43052],{},"全局平均池化层优点",[19,43054,43055],{},[3269,43056],{"alt":160,"src":43057},"\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,43059,43060],{},[3269,43061],{"alt":160,"src":43062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[26,43064,43065],{"start":354},[29,43066,43067],{},"参数详细描述",[19,43069,43070],{},[3269,43071],{"alt":160,"src":43072},"\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,43074,43075],{},[3269,43076],{"alt":160,"src":43077},"\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,43079,43080],{},[3269,43081],{"alt":160,"src":43082},"\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,43084,43085],{},[3269,43086],{"alt":160,"src":43087},"\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,43089,43090],{},[3269,43091],{"alt":160,"src":43092},"\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,43094,43095],{},[3269,43096],{"alt":160,"src":43097},"\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,43099,43100],{},[3269,43101],{"alt":160,"src":43102},"\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,43104,43105],{},[3269,43106],{"alt":160,"src":43107},"\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,43109,43110],{},[3269,43111],{"alt":160,"src":43112},"\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,43114,43115],{},[3269,43116],{"alt":160,"src":43117},"\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,43119,43120],{},[3269,43121],{"alt":160,"src":43122},"\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,43124,43125],{},[3269,43126],{"alt":160,"src":43127},"\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,43129,43130],{},[3269,43131],{"alt":160,"src":43132},"\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,43134,43135],{},[3269,43136],{"alt":160,"src":43137},"\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,43139,43140],{},[3269,43141],{"alt":160,"src":43142},"\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,43144,43145],{},[3269,43146],{"alt":160,"src":43147},"\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,43149,43150],{},[3269,43151],{"alt":160,"src":43152},"\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,43154,43155],{},[3269,43156],{"alt":160,"src":43157},"\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,43159,43160],{},[3269,43161],{"alt":160,"src":43162},"\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,43164,43165],{},[3269,43166],{"alt":160,"src":43167},"\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,43169,43170],{},[3269,43171],{"alt":160,"src":43172},"\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",[23756,43174,43176],{"id":43175},"_232代码实现","2.3.2.代码实现",[26,43178,43179],{},[29,43180,32453],{},[19,43182,43183],{},"根据原理一步一步搭建即可",[154,43185,43187],{"className":690,"code":43186,"language":692,"meta":160,"style":160},"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",[70,43188,43189,43195,43205,43215,43219,43236,43245,43260,43270,43275,43308,43313,43350,43397,43402,43438,43485,43490,43495,43530,43562,43566,43574,43590,43614,43639,43660,43665,43680,43684,43688,43693,43710,43715,43724,43739,43750,43794,43798,43826,43830,43841,43869,43873,43910,43914,43942,43946,43957,43993,44025,44053,44057,44068,44102,44134,44166,44199,44233,44261,44265,44276,44309,44341,44355,44359,44372,44376,44381,44393,44401,44423,44428,44433,44438,44443,44448,44453,44467,44475,44484,44497,44512,44521,44525,44533,44544,44555,44566,44577,44588,44594,44598,44603,44615,44635,44644],{"__ignoreMap":160},[178,43190,43191,43193],{"class":180,"line":181},[178,43192,700],{"class":699},[178,43194,32138],{"class":319},[178,43196,43197,43199,43201,43203],{"class":180,"line":263},[178,43198,32479],{"class":699},[178,43200,32482],{"class":319},[178,43202,700],{"class":699},[178,43204,32487],{"class":319},[178,43206,43207,43209,43211,43213],{"class":180,"line":274},[178,43208,32479],{"class":699},[178,43210,32499],{"class":319},[178,43212,700],{"class":699},[178,43214,32504],{"class":319},[178,43216,43217],{"class":180,"line":354},[178,43218,722],{"emptyLinePlaceholder":721},[178,43220,43221,43223,43226,43228,43230,43232,43234],{"class":180,"line":364},[178,43222,16453],{"class":699},[178,43224,43225],{"class":184}," Inception",[178,43227,944],{"class":319},[178,43229,32520],{"class":184},[178,43231,2498],{"class":319},[178,43233,32525],{"class":184},[178,43235,1005],{"class":319},[178,43237,43238,43240,43242],{"class":180,"line":740},[178,43239,32542],{"class":699},[178,43241,32545],{"class":195},[178,43243,43244],{"class":319},"(self,in_channels,c1,c2,c3,c4):\n",[178,43246,43247,43249,43252,43254,43256,43258],{"class":180,"line":746},[178,43248,32558],{"class":195},[178,43250,43251],{"class":319},"(Inception,",[178,43253,32564],{"class":195},[178,43255,32567],{"class":319},[178,43257,32570],{"class":195},[178,43259,3760],{"class":319},[178,43261,43262,43264,43266,43268],{"class":180,"line":752},[178,43263,32586],{"class":195},[178,43265,36503],{"class":319},[178,43267,330],{"class":699},[178,43269,36508],{"class":319},[178,43271,43272],{"class":180,"line":757},[178,43273,43274],{"class":2008},"        # 路线1：定义1*1卷积\n",[178,43276,43277,43279,43282,43284,43286,43288,43290,43293,43295,43297,43300,43302,43304,43306],{"class":180,"line":763},[178,43278,32586],{"class":195},[178,43280,43281],{"class":319},".p1_1",[178,43283,330],{"class":699},[178,43285,32594],{"class":319},[178,43287,32597],{"class":6985},[178,43289,330],{"class":699},[178,43291,43292],{"class":319},"in_channels,",[178,43294,32606],{"class":6985},[178,43296,330],{"class":699},[178,43298,43299],{"class":319},"c1,",[178,43301,32615],{"class":6985},[178,43303,330],{"class":699},[178,43305,1665],{"class":195},[178,43307,863],{"class":319},[178,43309,43310],{"class":180,"line":769},[178,43311,43312],{"class":2008},"        # 路线2：定义1*1卷积和3*3\n",[178,43314,43315,43317,43320,43322,43324,43326,43328,43330,43332,43334,43337,43339,43342,43344,43346,43348],{"class":180,"line":774},[178,43316,32586],{"class":195},[178,43318,43319],{"class":319},".p2_1",[178,43321,330],{"class":699},[178,43323,32594],{"class":319},[178,43325,32597],{"class":6985},[178,43327,330],{"class":699},[178,43329,43292],{"class":319},[178,43331,32606],{"class":6985},[178,43333,330],{"class":699},[178,43335,43336],{"class":319},"c2[",[178,43338,2133],{"class":195},[178,43340,43341],{"class":319},"],",[178,43343,32615],{"class":6985},[178,43345,330],{"class":699},[178,43347,1665],{"class":195},[178,43349,863],{"class":319},[178,43351,43352,43354,43357,43359,43361,43363,43365,43367,43369,43371,43373,43375,43377,43379,43381,43383,43385,43387,43389,43391,43393,43395],{"class":180,"line":780},[178,43353,32586],{"class":195},[178,43355,43356],{"class":319},".p2_2",[178,43358,330],{"class":699},[178,43360,32594],{"class":319},[178,43362,32597],{"class":6985},[178,43364,330],{"class":699},[178,43366,43336],{"class":319},[178,43368,2133],{"class":195},[178,43370,43341],{"class":319},[178,43372,32606],{"class":6985},[178,43374,330],{"class":699},[178,43376,43336],{"class":319},[178,43378,1665],{"class":195},[178,43380,43341],{"class":319},[178,43382,32615],{"class":6985},[178,43384,330],{"class":699},[178,43386,2021],{"class":195},[178,43388,2318],{"class":319},[178,43390,32624],{"class":6985},[178,43392,330],{"class":699},[178,43394,1665],{"class":195},[178,43396,863],{"class":319},[178,43398,43399],{"class":180,"line":786},[178,43400,43401],{"class":2008},"        # 路线3：定义1*1卷积和5*5\n",[178,43403,43404,43406,43409,43411,43413,43415,43417,43419,43421,43423,43426,43428,43430,43432,43434,43436],{"class":180,"line":792},[178,43405,32586],{"class":195},[178,43407,43408],{"class":319},".p3_1",[178,43410,330],{"class":699},[178,43412,32594],{"class":319},[178,43414,32597],{"class":6985},[178,43416,330],{"class":699},[178,43418,43292],{"class":319},[178,43420,32606],{"class":6985},[178,43422,330],{"class":699},[178,43424,43425],{"class":319},"c3[",[178,43427,2133],{"class":195},[178,43429,43341],{"class":319},[178,43431,32615],{"class":6985},[178,43433,330],{"class":699},[178,43435,1665],{"class":195},[178,43437,863],{"class":319},[178,43439,43440,43442,43445,43447,43449,43451,43453,43455,43457,43459,43461,43463,43465,43467,43469,43471,43473,43475,43477,43479,43481,43483],{"class":180,"line":798},[178,43441,32586],{"class":195},[178,43443,43444],{"class":319},".p3_2",[178,43446,330],{"class":699},[178,43448,32594],{"class":319},[178,43450,32597],{"class":6985},[178,43452,330],{"class":699},[178,43454,43425],{"class":319},[178,43456,2133],{"class":195},[178,43458,43341],{"class":319},[178,43460,32606],{"class":6985},[178,43462,330],{"class":699},[178,43464,43425],{"class":319},[178,43466,1665],{"class":195},[178,43468,43341],{"class":319},[178,43470,32615],{"class":6985},[178,43472,330],{"class":699},[178,43474,2259],{"class":195},[178,43476,2318],{"class":319},[178,43478,32624],{"class":6985},[178,43480,330],{"class":699},[178,43482,1669],{"class":195},[178,43484,863],{"class":319},[178,43486,43487],{"class":180,"line":804},[178,43488,43489],{"class":2008},"        # 路线4：定义3*3最大池化和1*1卷积\n",[178,43491,43492],{"class":180,"line":810},[178,43493,43494],{"class":2008},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[178,43496,43497,43499,43502,43504,43506,43508,43510,43512,43514,43516,43518,43520,43522,43524,43526,43528],{"class":180,"line":816},[178,43498,32586],{"class":195},[178,43500,43501],{"class":319},".p4_1",[178,43503,330],{"class":699},[178,43505,36561],{"class":319},[178,43507,32615],{"class":6985},[178,43509,330],{"class":699},[178,43511,2021],{"class":195},[178,43513,2318],{"class":319},[178,43515,32670],{"class":6985},[178,43517,330],{"class":699},[178,43519,1665],{"class":195},[178,43521,2318],{"class":319},[178,43523,32624],{"class":6985},[178,43525,330],{"class":699},[178,43527,1665],{"class":195},[178,43529,863],{"class":319},[178,43531,43532,43534,43537,43539,43541,43543,43545,43547,43549,43551,43554,43556,43558,43560],{"class":180,"line":822},[178,43533,32586],{"class":195},[178,43535,43536],{"class":319},".p4_2",[178,43538,330],{"class":699},[178,43540,32594],{"class":319},[178,43542,32597],{"class":6985},[178,43544,330],{"class":699},[178,43546,43292],{"class":319},[178,43548,32606],{"class":6985},[178,43550,330],{"class":699},[178,43552,43553],{"class":319},"c4,",[178,43555,32615],{"class":6985},[178,43557,330],{"class":699},[178,43559,1665],{"class":195},[178,43561,863],{"class":319},[178,43563,43564],{"class":180,"line":827},[178,43565,722],{"emptyLinePlaceholder":721},[178,43567,43568,43570,43572],{"class":180,"line":832},[178,43569,32542],{"class":699},[178,43571,32834],{"class":184},[178,43573,32837],{"class":319},[178,43575,43576,43579,43581,43583,43585,43587],{"class":180,"line":850},[178,43577,43578],{"class":319},"        p1",[178,43580,330],{"class":699},[178,43582,32564],{"class":195},[178,43584,36916],{"class":319},[178,43586,32564],{"class":195},[178,43588,43589],{"class":319},".p1_1(x))\n",[178,43591,43592,43594,43596,43598,43600,43602,43605,43607,43609,43611],{"class":180,"line":866},[178,43593,8854],{"class":319},[178,43595,330],{"class":699},[178,43597,32564],{"class":195},[178,43599,36916],{"class":319},[178,43601,32564],{"class":195},[178,43603,43604],{"class":319},".p2_2(",[178,43606,32564],{"class":195},[178,43608,36916],{"class":319},[178,43610,32564],{"class":195},[178,43612,43613],{"class":319},".p2_1(x))))\n",[178,43615,43616,43619,43621,43623,43625,43627,43630,43632,43634,43636],{"class":180,"line":877},[178,43617,43618],{"class":319},"        p3",[178,43620,330],{"class":699},[178,43622,32564],{"class":195},[178,43624,36916],{"class":319},[178,43626,32564],{"class":195},[178,43628,43629],{"class":319},".p3_2(",[178,43631,32564],{"class":195},[178,43633,36916],{"class":319},[178,43635,32564],{"class":195},[178,43637,43638],{"class":319},".p3_1(x))))\n",[178,43640,43641,43644,43646,43648,43650,43652,43655,43657],{"class":180,"line":882},[178,43642,43643],{"class":319},"        p4",[178,43645,330],{"class":699},[178,43647,32564],{"class":195},[178,43649,36916],{"class":319},[178,43651,32564],{"class":195},[178,43653,43654],{"class":319},".p4_2(",[178,43656,32564],{"class":195},[178,43658,43659],{"class":319},".p4_1(x)))\n",[178,43661,43662],{"class":180,"line":898},[178,43663,43664],{"class":2008},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[178,43666,43667,43669,43672,43674,43676,43678],{"class":180,"line":914},[178,43668,16511],{"class":699},[178,43670,43671],{"class":319}," torch.cat((p1,p2,p3,p4),",[178,43673,34417],{"class":6985},[178,43675,330],{"class":699},[178,43677,1665],{"class":195},[178,43679,863],{"class":319},[178,43681,43682],{"class":180,"line":919},[178,43683,722],{"emptyLinePlaceholder":721},[178,43685,43686],{"class":180,"line":935},[178,43687,722],{"emptyLinePlaceholder":721},[178,43689,43690],{"class":180,"line":952},[178,43691,43692],{"class":2008},"# 搭建GoogLeNet网络\n",[178,43694,43695,43697,43700,43702,43704,43706,43708],{"class":180,"line":966},[178,43696,16453],{"class":699},[178,43698,43699],{"class":184}," GoogLeNet",[178,43701,944],{"class":319},[178,43703,32520],{"class":184},[178,43705,2498],{"class":319},[178,43707,32525],{"class":184},[178,43709,1005],{"class":319},[178,43711,43712],{"class":180,"line":980},[178,43713,43714],{"class":2008},"    # 必须把Inception导入到里边\n",[178,43716,43717,43719,43721],{"class":180,"line":985},[178,43718,32542],{"class":699},[178,43720,32545],{"class":195},[178,43722,43723],{"class":319},"(self,Inception):\n",[178,43725,43726,43728,43731,43733,43735,43737],{"class":180,"line":1008},[178,43727,32558],{"class":195},[178,43729,43730],{"class":319},"(GoogLeNet,",[178,43732,32564],{"class":195},[178,43734,32567],{"class":319},[178,43736,32570],{"class":195},[178,43738,3760],{"class":319},[178,43740,43741,43743,43746,43748],{"class":180,"line":1014},[178,43742,32586],{"class":195},[178,43744,43745],{"class":319},".b1",[178,43747,330],{"class":699},[178,43749,39741],{"class":319},[178,43751,43752,43754,43756,43758,43760,43762,43764,43766,43768,43770,43772,43774,43776,43778,43780,43782,43784,43786,43788,43790,43792],{"class":180,"line":1019},[178,43753,39746],{"class":319},[178,43755,32597],{"class":6985},[178,43757,330],{"class":699},[178,43759,1665],{"class":195},[178,43761,2318],{"class":319},[178,43763,32606],{"class":6985},[178,43765,330],{"class":699},[178,43767,2145],{"class":195},[178,43769,2318],{"class":319},[178,43771,32615],{"class":6985},[178,43773,330],{"class":699},[178,43775,2309],{"class":195},[178,43777,2318],{"class":319},[178,43779,32670],{"class":6985},[178,43781,330],{"class":699},[178,43783,1669],{"class":195},[178,43785,2318],{"class":319},[178,43787,32624],{"class":6985},[178,43789,330],{"class":699},[178,43791,2021],{"class":195},[178,43793,39779],{"class":319},[178,43795,43796],{"class":180,"line":1033},[178,43797,39784],{"class":319},[178,43799,43800,43802,43804,43806,43808,43810,43812,43814,43816,43818,43820,43822,43824],{"class":180,"line":1046},[178,43801,39829],{"class":319},[178,43803,32615],{"class":6985},[178,43805,330],{"class":699},[178,43807,2021],{"class":195},[178,43809,2318],{"class":319},[178,43811,32670],{"class":6985},[178,43813,330],{"class":699},[178,43815,1669],{"class":195},[178,43817,2318],{"class":319},[178,43819,32624],{"class":6985},[178,43821,330],{"class":699},[178,43823,1665],{"class":195},[178,43825,863],{"class":319},[178,43827,43828],{"class":180,"line":1059},[178,43829,39858],{"class":319},[178,43831,43832,43834,43837,43839],{"class":180,"line":1072},[178,43833,32586],{"class":195},[178,43835,43836],{"class":319},".b2",[178,43838,330],{"class":699},[178,43840,39741],{"class":319},[178,43842,43843,43845,43847,43849,43851,43853,43855,43857,43859,43861,43863,43865,43867],{"class":180,"line":1077},[178,43844,39746],{"class":319},[178,43846,32597],{"class":6985},[178,43848,330],{"class":699},[178,43850,2145],{"class":195},[178,43852,2318],{"class":319},[178,43854,32606],{"class":6985},[178,43856,330],{"class":699},[178,43858,2145],{"class":195},[178,43860,2318],{"class":319},[178,43862,32615],{"class":6985},[178,43864,330],{"class":699},[178,43866,1665],{"class":195},[178,43868,39779],{"class":319},[178,43870,43871],{"class":180,"line":1082},[178,43872,39784],{"class":319},[178,43874,43875,43877,43879,43881,43883,43885,43887,43889,43892,43894,43896,43898,43900,43902,43904,43906,43908],{"class":180,"line":1099},[178,43876,39746],{"class":319},[178,43878,32597],{"class":6985},[178,43880,330],{"class":699},[178,43882,2145],{"class":195},[178,43884,2318],{"class":319},[178,43886,32606],{"class":6985},[178,43888,330],{"class":699},[178,43890,43891],{"class":195},"192",[178,43893,2318],{"class":319},[178,43895,32615],{"class":6985},[178,43897,330],{"class":699},[178,43899,2021],{"class":195},[178,43901,2318],{"class":319},[178,43903,32624],{"class":6985},[178,43905,330],{"class":699},[178,43907,1665],{"class":195},[178,43909,39779],{"class":319},[178,43911,43912],{"class":180,"line":9806},[178,43913,39784],{"class":319},[178,43915,43916,43918,43920,43922,43924,43926,43928,43930,43932,43934,43936,43938,43940],{"class":180,"line":9818},[178,43917,39829],{"class":319},[178,43919,32615],{"class":6985},[178,43921,330],{"class":699},[178,43923,2021],{"class":195},[178,43925,2318],{"class":319},[178,43927,32670],{"class":6985},[178,43929,330],{"class":699},[178,43931,1669],{"class":195},[178,43933,2318],{"class":319},[178,43935,32624],{"class":6985},[178,43937,330],{"class":699},[178,43939,1665],{"class":195},[178,43941,863],{"class":319},[178,43943,43944],{"class":180,"line":11477},[178,43945,39858],{"class":319},[178,43947,43948,43950,43953,43955],{"class":180,"line":11502},[178,43949,32586],{"class":195},[178,43951,43952],{"class":319},".b3",[178,43954,330],{"class":699},[178,43956,39741],{"class":319},[178,43958,43959,43962,43964,43966,43968,43971,43973,43975,43977,43980,43982,43984,43986,43989,43991],{"class":180,"line":11525},[178,43960,43961],{"class":319},"            Inception(",[178,43963,43891],{"class":195},[178,43965,2318],{"class":319},[178,43967,2145],{"class":195},[178,43969,43970],{"class":319},",(",[178,43972,2151],{"class":195},[178,43974,2318],{"class":319},[178,43976,33803],{"class":195},[178,43978,43979],{"class":319},"),(",[178,43981,2541],{"class":195},[178,43983,2318],{"class":319},[178,43985,2139],{"class":195},[178,43987,43988],{"class":319},"),",[178,43990,2139],{"class":195},[178,43992,39779],{"class":319},[178,43994,43995,43997,43999,44001,44003,44005,44007,44009,44011,44013,44015,44017,44019,44021,44023],{"class":180,"line":11549},[178,43996,43961],{"class":319},[178,43998,36602],{"class":195},[178,44000,2318],{"class":319},[178,44002,33803],{"class":195},[178,44004,43970],{"class":319},[178,44006,33803],{"class":195},[178,44008,2318],{"class":319},[178,44010,43891],{"class":195},[178,44012,43979],{"class":319},[178,44014,2139],{"class":195},[178,44016,2318],{"class":319},[178,44018,2151],{"class":195},[178,44020,43988],{"class":319},[178,44022,2145],{"class":195},[178,44024,39779],{"class":319},[178,44026,44027,44029,44031,44033,44035,44037,44039,44041,44043,44045,44047,44049,44051],{"class":180,"line":11554},[178,44028,39829],{"class":319},[178,44030,32615],{"class":6985},[178,44032,330],{"class":699},[178,44034,2021],{"class":195},[178,44036,2318],{"class":319},[178,44038,32670],{"class":6985},[178,44040,330],{"class":699},[178,44042,1669],{"class":195},[178,44044,2318],{"class":319},[178,44046,32624],{"class":6985},[178,44048,330],{"class":699},[178,44050,1665],{"class":195},[178,44052,863],{"class":319},[178,44054,44055],{"class":180,"line":11559},[178,44056,39858],{"class":319},[178,44058,44059,44061,44064,44066],{"class":180,"line":11564},[178,44060,32586],{"class":195},[178,44062,44063],{"class":319},".b4",[178,44065,330],{"class":699},[178,44067,39741],{"class":319},[178,44069,44070,44072,44075,44077,44079,44081,44083,44085,44088,44090,44092,44094,44096,44098,44100],{"class":180,"line":11573},[178,44071,43961],{"class":319},[178,44073,44074],{"class":195},"480",[178,44076,2318],{"class":319},[178,44078,43891],{"class":195},[178,44080,43970],{"class":319},[178,44082,2151],{"class":195},[178,44084,2318],{"class":319},[178,44086,44087],{"class":195},"208",[178,44089,43979],{"class":319},[178,44091,2541],{"class":195},[178,44093,2318],{"class":319},[178,44095,2547],{"class":195},[178,44097,43988],{"class":319},[178,44099,2145],{"class":195},[178,44101,39779],{"class":319},[178,44103,44104,44106,44108,44110,44112,44114,44116,44118,44120,44122,44124,44126,44128,44130,44132],{"class":180,"line":11578},[178,44105,43961],{"class":319},[178,44107,40189],{"class":195},[178,44109,2318],{"class":319},[178,44111,22806],{"class":195},[178,44113,43970],{"class":319},[178,44115,2558],{"class":195},[178,44117,2318],{"class":319},[178,44119,33236],{"class":195},[178,44121,43979],{"class":319},[178,44123,2740],{"class":195},[178,44125,2318],{"class":319},[178,44127,2145],{"class":195},[178,44129,43988],{"class":319},[178,44131,2145],{"class":195},[178,44133,39779],{"class":319},[178,44135,44136,44138,44140,44142,44144,44146,44148,44150,44152,44154,44156,44158,44160,44162,44164],{"class":180,"line":11584},[178,44137,43961],{"class":319},[178,44139,40189],{"class":195},[178,44141,2318],{"class":319},[178,44143,33803],{"class":195},[178,44145,43970],{"class":319},[178,44147,33803],{"class":195},[178,44149,2318],{"class":319},[178,44151,36602],{"class":195},[178,44153,43979],{"class":319},[178,44155,2740],{"class":195},[178,44157,2318],{"class":319},[178,44159,2145],{"class":195},[178,44161,43988],{"class":319},[178,44163,2145],{"class":195},[178,44165,39779],{"class":319},[178,44167,44168,44170,44172,44174,44176,44178,44180,44182,44185,44187,44189,44191,44193,44195,44197],{"class":180,"line":11605},[178,44169,43961],{"class":319},[178,44171,40189],{"class":195},[178,44173,2318],{"class":319},[178,44175,2558],{"class":195},[178,44177,43970],{"class":319},[178,44179,33803],{"class":195},[178,44181,2318],{"class":319},[178,44183,44184],{"class":195},"288",[178,44186,43979],{"class":319},[178,44188,2139],{"class":195},[178,44190,2318],{"class":319},[178,44192,2145],{"class":195},[178,44194,43988],{"class":319},[178,44196,2145],{"class":195},[178,44198,39779],{"class":319},[178,44200,44201,44203,44206,44208,44210,44212,44214,44216,44219,44221,44223,44225,44227,44229,44231],{"class":180,"line":11611},[178,44202,43961],{"class":319},[178,44204,44205],{"class":195},"528",[178,44207,2318],{"class":319},[178,44209,36602],{"class":195},[178,44211,43970],{"class":319},[178,44213,22806],{"class":195},[178,44215,2318],{"class":319},[178,44217,44218],{"class":195},"320",[178,44220,43979],{"class":319},[178,44222,2139],{"class":195},[178,44224,2318],{"class":319},[178,44226,33803],{"class":195},[178,44228,43988],{"class":319},[178,44230,33803],{"class":195},[178,44232,39779],{"class":319},[178,44234,44235,44237,44239,44241,44243,44245,44247,44249,44251,44253,44255,44257,44259],{"class":180,"line":11625},[178,44236,39829],{"class":319},[178,44238,32615],{"class":6985},[178,44240,330],{"class":699},[178,44242,2021],{"class":195},[178,44244,2318],{"class":319},[178,44246,32670],{"class":6985},[178,44248,330],{"class":699},[178,44250,1669],{"class":195},[178,44252,2318],{"class":319},[178,44254,32624],{"class":6985},[178,44256,330],{"class":699},[178,44258,1665],{"class":195},[178,44260,863],{"class":319},[178,44262,44263],{"class":180,"line":11631},[178,44264,39858],{"class":319},[178,44266,44267,44269,44272,44274],{"class":180,"line":11658},[178,44268,32586],{"class":195},[178,44270,44271],{"class":319},".b5",[178,44273,330],{"class":699},[178,44275,39741],{"class":319},[178,44277,44278,44280,44283,44285,44287,44289,44291,44293,44295,44297,44299,44301,44303,44305,44307],{"class":180,"line":11667},[178,44279,43961],{"class":319},[178,44281,44282],{"class":195},"832",[178,44284,2318],{"class":319},[178,44286,36602],{"class":195},[178,44288,43970],{"class":319},[178,44290,22806],{"class":195},[178,44292,2318],{"class":319},[178,44294,44218],{"class":195},[178,44296,43979],{"class":319},[178,44298,2139],{"class":195},[178,44300,2318],{"class":319},[178,44302,33803],{"class":195},[178,44304,43988],{"class":319},[178,44306,33803],{"class":195},[178,44308,39779],{"class":319},[178,44310,44311,44313,44315,44317,44319,44321,44323,44325,44327,44329,44331,44333,44335,44337,44339],{"class":180,"line":11673},[178,44312,43961],{"class":319},[178,44314,44282],{"class":195},[178,44316,2318],{"class":319},[178,44318,36672],{"class":195},[178,44320,43970],{"class":319},[178,44322,43891],{"class":195},[178,44324,2318],{"class":319},[178,44326,36672],{"class":195},[178,44328,43979],{"class":319},[178,44330,2547],{"class":195},[178,44332,2318],{"class":319},[178,44334,33803],{"class":195},[178,44336,43988],{"class":319},[178,44338,33803],{"class":195},[178,44340,39779],{"class":319},[178,44342,44343,44346,44348,44350,44352],{"class":180,"line":11681},[178,44344,44345],{"class":319},"            nn.AdaptiveAvgPool2d((",[178,44347,1665],{"class":195},[178,44349,2318],{"class":319},[178,44351,1665],{"class":195},[178,44353,44354],{"class":319},")),\n",[178,44356,44357],{"class":180,"line":11686},[178,44358,40522],{"class":319},[178,44360,44361,44363,44366,44368,44370],{"class":180,"line":18362},[178,44362,40527],{"class":319},[178,44364,44365],{"class":195},"1024",[178,44367,2318],{"class":319},[178,44369,2386],{"class":195},[178,44371,863],{"class":319},[178,44373,44374],{"class":180,"line":18368},[178,44375,39858],{"class":319},[178,44377,44378],{"class":180,"line":18391},[178,44379,44380],{"class":2008},"        # 对模型参数初始化\n",[178,44382,44383,44385,44387,44389,44391],{"class":180,"line":18397},[178,44384,5176],{"class":699},[178,44386,40600],{"class":319},[178,44388,994],{"class":699},[178,44390,40605],{"class":195},[178,44392,40608],{"class":319},[178,44394,44395,44397,44399],{"class":180,"line":18420},[178,44396,6413],{"class":699},[178,44398,40620],{"class":195},[178,44400,40623],{"class":319},[178,44402,44403,44405,44408,44410,44413,44415,44417,44419,44421],{"class":180,"line":18434},[178,44404,40633],{"class":319},[178,44406,44407],{"class":6985},"mode",[178,44409,330],{"class":699},[178,44411,44412],{"class":188},"'fan_out'",[178,44414,2318],{"class":319},[178,44416,40636],{"class":6985},[178,44418,330],{"class":699},[178,44420,40641],{"class":188},[178,44422,863],{"class":319},[178,44424,44425],{"class":180,"line":18454},[178,44426,44427],{"class":2008},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[178,44429,44430],{"class":180,"line":18460},[178,44431,44432],{"class":2008},"                # ② mode = 'fan_out'决定使用的fan值：\n",[178,44434,44435],{"class":180,"line":18471},[178,44436,44437],{"class":2008},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[178,44439,44440],{"class":180,"line":18494},[178,44441,44442],{"class":2008},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[178,44444,44445],{"class":180,"line":18516},[178,44446,44447],{"class":2008},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[178,44449,44450],{"class":180,"line":18521},[178,44451,44452],{"class":2008},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[178,44454,44455,44457,44459,44461,44463,44465],{"class":180,"line":18527},[178,44456,40653],{"class":699},[178,44458,40656],{"class":319},[178,44460,40659],{"class":699},[178,44462,40662],{"class":699},[178,44464,40665],{"class":195},[178,44466,847],{"class":319},[178,44468,44469,44471,44473],{"class":180,"line":18541},[178,44470,40677],{"class":319},[178,44472,2133],{"class":195},[178,44474,863],{"class":319},[178,44476,44477,44480,44482],{"class":180,"line":18554},[178,44478,44479],{"class":699},"                elif",[178,44481,40620],{"class":195},[178,44483,40696],{"class":319},[178,44485,44486,44489,44491,44493,44495],{"class":180,"line":18559},[178,44487,44488],{"class":319},"                    nn.init.normal_(m.weight,",[178,44490,2133],{"class":195},[178,44492,2318],{"class":319},[178,44494,40718],{"class":195},[178,44496,863],{"class":319},[178,44498,44499,44502,44504,44506,44508,44510],{"class":180,"line":18573},[178,44500,44501],{"class":699},"                    if",[178,44503,40656],{"class":319},[178,44505,40659],{"class":699},[178,44507,40662],{"class":699},[178,44509,40665],{"class":195},[178,44511,847],{"class":319},[178,44513,44514,44517,44519],{"class":180,"line":18578},[178,44515,44516],{"class":319},"                        nn.init.constant_(m.bias,",[178,44518,2133],{"class":195},[178,44520,863],{"class":319},[178,44522,44523],{"class":180,"line":18584},[178,44524,36897],{"class":2008},[178,44526,44527,44529,44531],{"class":180,"line":18589},[178,44528,32542],{"class":699},[178,44530,32834],{"class":184},[178,44532,32837],{"class":319},[178,44534,44535,44537,44539,44541],{"class":180,"line":18603},[178,44536,32842],{"class":319},[178,44538,330],{"class":699},[178,44540,32564],{"class":195},[178,44542,44543],{"class":319},".b1(x)\n",[178,44545,44546,44548,44550,44552],{"class":180,"line":18608},[178,44547,32842],{"class":319},[178,44549,330],{"class":699},[178,44551,32564],{"class":195},[178,44553,44554],{"class":319},".b2(x)\n",[178,44556,44557,44559,44561,44563],{"class":180,"line":18613},[178,44558,32842],{"class":319},[178,44560,330],{"class":699},[178,44562,32564],{"class":195},[178,44564,44565],{"class":319},".b3(x)\n",[178,44567,44568,44570,44572,44574],{"class":180,"line":18627},[178,44569,32842],{"class":319},[178,44571,330],{"class":699},[178,44573,32564],{"class":195},[178,44575,44576],{"class":319},".b4(x)\n",[178,44578,44579,44581,44583,44585],{"class":180,"line":18639},[178,44580,32842],{"class":319},[178,44582,330],{"class":699},[178,44584,32564],{"class":195},[178,44586,44587],{"class":319},".b5(x)\n",[178,44589,44590,44592],{"class":180,"line":18644},[178,44591,16511],{"class":699},[178,44593,32950],{"class":319},[178,44595,44596],{"class":180,"line":18657},[178,44597,722],{"emptyLinePlaceholder":721},[178,44599,44600],{"class":180,"line":18662},[178,44601,44602],{"class":2008},"# 模型展示\n",[178,44604,44605,44607,44609,44611,44613],{"class":180,"line":18667},[178,44606,1085],{"class":699},[178,44608,1088],{"class":195},[178,44610,4725],{"class":699},[178,44612,32965],{"class":188},[178,44614,847],{"class":319},[178,44616,44617,44619,44621,44623,44625,44627,44629,44631,44633],{"class":180,"line":18672},[178,44618,32977],{"class":319},[178,44620,330],{"class":699},[178,44622,32193],{"class":319},[178,44624,32984],{"class":188},[178,44626,3499],{"class":699},[178,44628,32989],{"class":319},[178,44630,3496],{"class":699},[178,44632,32218],{"class":188},[178,44634,863],{"class":319},[178,44636,44637,44639,44641],{"class":180,"line":18685},[178,44638,33029],{"class":319},[178,44640,330],{"class":699},[178,44642,44643],{"class":319},"GoogLeNet(Inception).to(device)\n",[178,44645,44646,44648,44650,44652,44654,44656,44658,44660],{"class":180,"line":18690},[178,44647,1022],{"class":195},[178,44649,33041],{"class":319},[178,44651,1665],{"class":195},[178,44653,2318],{"class":319},[178,44655,33236],{"class":195},[178,44657,2318],{"class":319},[178,44659,33236],{"class":195},[178,44661,33054],{"class":319},[26,44663,44664],{"start":263},[29,44665,40915],{},[154,44667,44669],{"className":690,"code":44668,"language":692,"meta":160,"style":160},"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",[70,44670,44671,44677,44683,44693,44699,44709,44719,44729,44739,44749,44753,44764,44774,44778,44782,44786,44794,44806,44816,44832,44842,44874,44888,44898,44908,44912,44922,44936,44946,44956,44966,44972,44976,44980,44984,44988,44992,45000,45020,45024,45028,45032,45036,45040,45056,45060,45064,45072,45076,45080,45088,45092,45096,45100,45108,45112,45116,45120,45124,45132,45136,45144,45148,45156,45160,45168,45172,45180,45184,45188,45196,45200,45204,45208,45220,45244,45258,45262,45266,45270,45278,45282,45290,45294,45302,45306,45314,45318,45326,45330,45338,45342,45354,45358,45366,45370,45378,45382,45386,45390,45394,45402,45406,45422,45426,45434,45438,45442,45446,45450,45454,45458,45462,45478,45482,45494,45498,45510,45514,45526,45530,45538,45542,45550,45554,45558,45562,45568,45572,45580,45584,45600,45604,45612,45616,45632,45644,45648,45660,45664,45668,45676,45680,45684,45692,45696,45704,45708,45716,45720,45724,45766,45808,45812,45816,45832,45836,45852,45856,45860,45868,45872,45876,45888,45926,45930,45934,45942,45946,45960,45970,45976,45982,45988,45994,45998,46002,46008,46012,46016,46024,46028,46046,46050,46054,46058,46074,46078,46082,46086,46090,46094,46114,46134,46138,46142,46146,46154,46162,46166,46182,46202,46222,46226,46230,46238,46246,46250,46254,46258,46270,46274,46284,46292,46309],{"__ignoreMap":160},[178,44672,44673,44675],{"class":180,"line":181},[178,44674,700],{"class":699},[178,44676,33557],{"class":319},[178,44678,44679,44681],{"class":180,"line":263},[178,44680,700],{"class":699},[178,44682,33564],{"class":319},[178,44684,44685,44687,44689,44691],{"class":180,"line":274},[178,44686,700],{"class":699},[178,44688,33575],{"class":319},[178,44690,713],{"class":699},[178,44692,33580],{"class":319},[178,44694,44695,44697],{"class":180,"line":354},[178,44696,700],{"class":699},[178,44698,32138],{"class":319},[178,44700,44701,44703,44705,44707],{"class":180,"line":364},[178,44702,32479],{"class":699},[178,44704,33151],{"class":319},[178,44706,700],{"class":699},[178,44708,33597],{"class":319},[178,44710,44711,44713,44715,44717],{"class":180,"line":740},[178,44712,32479],{"class":699},[178,44714,33107],{"class":319},[178,44716,700],{"class":699},[178,44718,33112],{"class":319},[178,44720,44721,44723,44725,44727],{"class":180,"line":746},[178,44722,32479],{"class":699},[178,44724,33134],{"class":319},[178,44726,700],{"class":699},[178,44728,33139],{"class":319},[178,44730,44731,44733,44735,44737],{"class":180,"line":752},[178,44732,700],{"class":699},[178,44734,33151],{"class":319},[178,44736,713],{"class":699},[178,44738,33156],{"class":319},[178,44740,44741,44743,44745,44747],{"class":180,"line":757},[178,44742,700],{"class":699},[178,44744,33168],{"class":319},[178,44746,713],{"class":699},[178,44748,33173],{"class":319},[178,44750,44751],{"class":180,"line":763},[178,44752,33642],{"class":2008},[178,44754,44755,44757,44759,44761],{"class":180,"line":769},[178,44756,32479],{"class":699},[178,44758,33649],{"class":319},[178,44760,700],{"class":699},[178,44762,44763],{"class":319}," GoogLeNet, Inception\n",[178,44765,44766,44768,44770,44772],{"class":180,"line":774},[178,44767,32479],{"class":699},[178,44769,32482],{"class":319},[178,44771,700],{"class":699},[178,44773,32487],{"class":319},[178,44775,44776],{"class":180,"line":780},[178,44777,722],{"emptyLinePlaceholder":721},[178,44779,44780],{"class":180,"line":786},[178,44781,722],{"emptyLinePlaceholder":721},[178,44783,44784],{"class":180,"line":792},[178,44785,33677],{"class":2008},[178,44787,44788,44790,44792],{"class":180,"line":798},[178,44789,835],{"class":699},[178,44791,33684],{"class":184},[178,44793,33687],{"class":319},[178,44795,44796,44798,44800,44802,44804],{"class":180,"line":804},[178,44797,33692],{"class":319},[178,44799,330],{"class":699},[178,44801,33191],{"class":319},[178,44803,33199],{"class":188},[178,44805,33202],{"class":319},[178,44807,44808,44810,44812,44814],{"class":180,"line":810},[178,44809,33705],{"class":6985},[178,44811,330],{"class":699},[178,44813,33212],{"class":195},[178,44815,33202],{"class":319},[178,44817,44818,44820,44822,44824,44826,44828,44830],{"class":180,"line":816},[178,44819,33716],{"class":6985},[178,44821,330],{"class":699},[178,44823,33229],{"class":319},[178,44825,554],{"class":6985},[178,44827,330],{"class":699},[178,44829,37181],{"class":195},[178,44831,33239],{"class":319},[178,44833,44834,44836,44838,44840],{"class":180,"line":822},[178,44835,33733],{"class":6985},[178,44837,330],{"class":699},[178,44839,33212],{"class":195},[178,44841,863],{"class":319},[178,44843,44844,44846,44848,44850,44852,44854,44856,44858,44860,44862,44864,44866,44868,44870,44872],{"class":180,"line":827},[178,44845,33744],{"class":319},[178,44847,330],{"class":699},[178,44849,33749],{"class":319},[178,44851,33752],{"class":195},[178,44853,944],{"class":319},[178,44855,33757],{"class":195},[178,44857,2395],{"class":699},[178,44859,9127],{"class":195},[178,44861,33764],{"class":319},[178,44863,33752],{"class":195},[178,44865,944],{"class":319},[178,44867,648],{"class":195},[178,44869,2395],{"class":699},[178,44871,9127],{"class":195},[178,44873,33777],{"class":319},[178,44875,44876,44878,44880,44882,44884,44886],{"class":180,"line":832},[178,44877,33782],{"class":319},[178,44879,330],{"class":699},[178,44881,33787],{"class":319},[178,44883,33272],{"class":6985},[178,44885,330],{"class":699},[178,44887,33277],{"class":319},[178,44889,44890,44892,44894,44896],{"class":180,"line":850},[178,44891,33798],{"class":6985},[178,44893,330],{"class":699},[178,44895,2139],{"class":195},[178,44897,33202],{"class":319},[178,44899,44900,44902,44904,44906],{"class":180,"line":866},[178,44901,33810],{"class":6985},[178,44903,330],{"class":699},[178,44905,33212],{"class":195},[178,44907,33202],{"class":319},[178,44909,44910],{"class":180,"line":877},[178,44911,33821],{"class":2008},[178,44913,44914,44916,44918,44920],{"class":180,"line":882},[178,44915,33826],{"class":6985},[178,44917,330],{"class":699},[178,44919,2335],{"class":195},[178,44921,863],{"class":319},[178,44923,44924,44926,44928,44930,44932,44934],{"class":180,"line":898},[178,44925,33837],{"class":319},[178,44927,330],{"class":699},[178,44929,33269],{"class":319},[178,44931,33272],{"class":6985},[178,44933,330],{"class":699},[178,44935,33848],{"class":319},[178,44937,44938,44940,44942,44944],{"class":180,"line":914},[178,44939,33853],{"class":6985},[178,44941,330],{"class":699},[178,44943,2139],{"class":195},[178,44945,33202],{"class":319},[178,44947,44948,44950,44952,44954],{"class":180,"line":919},[178,44949,33864],{"class":6985},[178,44951,330],{"class":699},[178,44953,33212],{"class":195},[178,44955,33202],{"class":319},[178,44957,44958,44960,44962,44964],{"class":180,"line":935},[178,44959,33875],{"class":6985},[178,44961,330],{"class":699},[178,44963,2335],{"class":195},[178,44965,863],{"class":319},[178,44967,44968,44970],{"class":180,"line":952},[178,44969,5862],{"class":699},[178,44971,33888],{"class":319},[178,44973,44974],{"class":180,"line":966},[178,44975,722],{"emptyLinePlaceholder":721},[178,44977,44978],{"class":180,"line":980},[178,44979,33897],{"class":2008},[178,44981,44982],{"class":180,"line":985},[178,44983,33902],{"class":2008},[178,44985,44986],{"class":180,"line":1008},[178,44987,722],{"emptyLinePlaceholder":721},[178,44989,44990],{"class":180,"line":1014},[178,44991,33911],{"class":2008},[178,44993,44994,44996,44998],{"class":180,"line":1019},[178,44995,835],{"class":699},[178,44997,33918],{"class":184},[178,44999,33921],{"class":319},[178,45001,45002,45004,45006,45008,45010,45012,45014,45016,45018],{"class":180,"line":1033},[178,45003,32977],{"class":319},[178,45005,330],{"class":699},[178,45007,32193],{"class":319},[178,45009,32984],{"class":188},[178,45011,3499],{"class":699},[178,45013,32989],{"class":319},[178,45015,3496],{"class":699},[178,45017,33940],{"class":188},[178,45019,863],{"class":319},[178,45021,45022],{"class":180,"line":1046},[178,45023,722],{"emptyLinePlaceholder":721},[178,45025,45026],{"class":180,"line":1059},[178,45027,722],{"emptyLinePlaceholder":721},[178,45029,45030],{"class":180,"line":1072},[178,45031,33955],{"class":2008},[178,45033,45034],{"class":180,"line":1077},[178,45035,33960],{"class":2008},[178,45037,45038],{"class":180,"line":1082},[178,45039,33965],{"class":2008},[178,45041,45042,45044,45046,45048,45050,45052,45054],{"class":180,"line":1099},[178,45043,33970],{"class":319},[178,45045,330],{"class":699},[178,45047,33975],{"class":319},[178,45049,33978],{"class":6985},[178,45051,330],{"class":699},[178,45053,33983],{"class":195},[178,45055,863],{"class":319},[178,45057,45058],{"class":180,"line":9806},[178,45059,722],{"emptyLinePlaceholder":721},[178,45061,45062],{"class":180,"line":9818},[178,45063,33994],{"class":2008},[178,45065,45066,45068,45070],{"class":180,"line":11477},[178,45067,33999],{"class":319},[178,45069,330],{"class":699},[178,45071,34004],{"class":319},[178,45073,45074],{"class":180,"line":11502},[178,45075,722],{"emptyLinePlaceholder":721},[178,45077,45078],{"class":180,"line":11525},[178,45079,34013],{"class":2008},[178,45081,45082,45084,45086],{"class":180,"line":11549},[178,45083,33029],{"class":319},[178,45085,330],{"class":699},[178,45087,34022],{"class":319},[178,45089,45090],{"class":180,"line":11554},[178,45091,34027],{"class":2008},[178,45093,45094],{"class":180,"line":11559},[178,45095,34032],{"class":2008},[178,45097,45098],{"class":180,"line":11564},[178,45099,34037],{"class":2008},[178,45101,45102,45104,45106],{"class":180,"line":11573},[178,45103,34042],{"class":319},[178,45105,330],{"class":699},[178,45107,34047],{"class":319},[178,45109,45110],{"class":180,"line":11578},[178,45111,722],{"emptyLinePlaceholder":721},[178,45113,45114],{"class":180,"line":11584},[178,45115,722],{"emptyLinePlaceholder":721},[178,45117,45118],{"class":180,"line":11605},[178,45119,34060],{"class":2008},[178,45121,45122],{"class":180,"line":11611},[178,45123,34065],{"class":2008},[178,45125,45126,45128,45130],{"class":180,"line":11625},[178,45127,34070],{"class":319},[178,45129,330],{"class":699},[178,45131,34075],{"class":195},[178,45133,45134],{"class":180,"line":11631},[178,45135,34080],{"class":2008},[178,45137,45138,45140,45142],{"class":180,"line":11658},[178,45139,34085],{"class":319},[178,45141,330],{"class":699},[178,45143,34090],{"class":319},[178,45145,45146],{"class":180,"line":11667},[178,45147,34095],{"class":2008},[178,45149,45150,45152,45154],{"class":180,"line":11673},[178,45151,34100],{"class":319},[178,45153,330],{"class":699},[178,45155,34090],{"class":319},[178,45157,45158],{"class":180,"line":11681},[178,45159,34109],{"class":2008},[178,45161,45162,45164,45166],{"class":180,"line":11686},[178,45163,34114],{"class":319},[178,45165,330],{"class":699},[178,45167,34090],{"class":319},[178,45169,45170],{"class":180,"line":18362},[178,45171,34123],{"class":2008},[178,45173,45174,45176,45178],{"class":180,"line":18368},[178,45175,34128],{"class":319},[178,45177,330],{"class":699},[178,45179,34090],{"class":319},[178,45181,45182],{"class":180,"line":18391},[178,45183,722],{"emptyLinePlaceholder":721},[178,45185,45186],{"class":180,"line":18397},[178,45187,34141],{"class":2008},[178,45189,45190,45192,45194],{"class":180,"line":18420},[178,45191,34146],{"class":319},[178,45193,330],{"class":699},[178,45195,34151],{"class":319},[178,45197,45198],{"class":180,"line":18434},[178,45199,722],{"emptyLinePlaceholder":721},[178,45201,45202],{"class":180,"line":18454},[178,45203,722],{"emptyLinePlaceholder":721},[178,45205,45206],{"class":180,"line":18460},[178,45207,34164],{"class":2008},[178,45209,45210,45212,45214,45216,45218],{"class":180,"line":18471},[178,45211,988],{"class":699},[178,45213,34171],{"class":319},[178,45215,994],{"class":699},[178,45217,997],{"class":195},[178,45219,34178],{"class":319},[178,45221,45222,45224,45226,45228,45230,45232,45234,45236,45238,45240,45242],{"class":180,"line":18494},[178,45223,34183],{"class":195},[178,45225,944],{"class":319},[178,45227,34188],{"class":188},[178,45229,34191],{"class":195},[178,45231,2524],{"class":188},[178,45233,34191],{"class":195},[178,45235,2191],{"class":188},[178,45237,34200],{"class":319},[178,45239,2472],{"class":699},[178,45241,1665],{"class":195},[178,45243,32239],{"class":319},[178,45245,45246,45248,45250,45252,45254,45256],{"class":180,"line":18516},[178,45247,34183],{"class":195},[178,45249,944],{"class":319},[178,45251,34215],{"class":188},[178,45253,2395],{"class":699},[178,45255,2386],{"class":195},[178,45257,863],{"class":319},[178,45259,45260],{"class":180,"line":18521},[178,45261,722],{"emptyLinePlaceholder":721},[178,45263,45264],{"class":180,"line":18527},[178,45265,34230],{"class":2008},[178,45267,45268],{"class":180,"line":18541},[178,45269,34235],{"class":2008},[178,45271,45272,45274,45276],{"class":180,"line":18554},[178,45273,34240],{"class":319},[178,45275,330],{"class":699},[178,45277,34075],{"class":195},[178,45279,45280],{"class":180,"line":18559},[178,45281,34249],{"class":2008},[178,45283,45284,45286,45288],{"class":180,"line":18573},[178,45285,34254],{"class":319},[178,45287,330],{"class":699},[178,45289,4860],{"class":195},[178,45291,45292],{"class":180,"line":18578},[178,45293,34263],{"class":2008},[178,45295,45296,45298,45300],{"class":180,"line":18584},[178,45297,34268],{"class":319},[178,45299,330],{"class":699},[178,45301,34075],{"class":195},[178,45303,45304],{"class":180,"line":18589},[178,45305,34277],{"class":2008},[178,45307,45308,45310,45312],{"class":180,"line":18603},[178,45309,34282],{"class":319},[178,45311,330],{"class":699},[178,45313,4860],{"class":195},[178,45315,45316],{"class":180,"line":18608},[178,45317,34291],{"class":2008},[178,45319,45320,45322,45324],{"class":180,"line":18613},[178,45321,34296],{"class":319},[178,45323,330],{"class":699},[178,45325,4860],{"class":195},[178,45327,45328],{"class":180,"line":18627},[178,45329,34305],{"class":2008},[178,45331,45332,45334,45336],{"class":180,"line":18639},[178,45333,34310],{"class":319},[178,45335,330],{"class":699},[178,45337,4860],{"class":195},[178,45339,45340],{"class":180,"line":18644},[178,45341,34319],{"class":2008},[178,45343,45344,45346,45348,45350,45352],{"class":180,"line":18657},[178,45345,5176],{"class":699},[178,45347,33336],{"class":319},[178,45349,994],{"class":699},[178,45351,33341],{"class":195},[178,45353,34332],{"class":319},[178,45355,45356],{"class":180,"line":18662},[178,45357,34337],{"class":2008},[178,45359,45360,45362,45364],{"class":180,"line":18667},[178,45361,34342],{"class":319},[178,45363,330],{"class":699},[178,45365,34347],{"class":319},[178,45367,45368],{"class":180,"line":18672},[178,45369,34352],{"class":2008},[178,45371,45372,45374,45376],{"class":180,"line":18685},[178,45373,34357],{"class":319},[178,45375,330],{"class":699},[178,45377,34362],{"class":319},[178,45379,45380],{"class":180,"line":18690},[178,45381,34368],{"class":2008},[178,45383,45384],{"class":180,"line":34365},[178,45385,34374],{"class":319},[178,45387,45388],{"class":180,"line":34371},[178,45389,34380],{"class":2008},[178,45391,45392],{"class":180,"line":34377},[178,45393,34386],{"class":2008},[178,45395,45396,45398,45400],{"class":180,"line":34383},[178,45397,34392],{"class":319},[178,45399,330],{"class":699},[178,45401,34397],{"class":319},[178,45403,45404],{"class":180,"line":34389},[178,45405,34403],{"class":2008},[178,45407,45408,45410,45412,45414,45416,45418,45420],{"class":180,"line":34400},[178,45409,34409],{"class":319},[178,45411,330],{"class":699},[178,45413,34414],{"class":319},[178,45415,34417],{"class":6985},[178,45417,330],{"class":699},[178,45419,1665],{"class":195},[178,45421,863],{"class":319},[178,45423,45424],{"class":180,"line":34406},[178,45425,34429],{"class":2008},[178,45427,45428,45430,45432],{"class":180,"line":34426},[178,45429,34435],{"class":319},[178,45431,330],{"class":699},[178,45433,34440],{"class":319},[178,45435,45436],{"class":180,"line":34432},[178,45437,34446],{"class":2008},[178,45439,45440],{"class":180,"line":34443},[178,45441,34452],{"class":319},[178,45443,45444],{"class":180,"line":34449},[178,45445,34458],{"class":2008},[178,45447,45448],{"class":180,"line":34455},[178,45449,34464],{"class":319},[178,45451,45452],{"class":180,"line":34461},[178,45453,34470],{"class":2008},[178,45455,45456],{"class":180,"line":34467},[178,45457,34476],{"class":319},[178,45459,45460],{"class":180,"line":34473},[178,45461,34482],{"class":2008},[178,45463,45464,45466,45468,45470,45472,45474,45476],{"class":180,"line":34479},[178,45465,34488],{"class":319},[178,45467,11238],{"class":699},[178,45469,34493],{"class":319},[178,45471,2395],{"class":699},[178,45473,34498],{"class":319},[178,45475,2133],{"class":195},[178,45477,863],{"class":319},[178,45479,45480],{"class":180,"line":34485},[178,45481,34508],{"class":2008},[178,45483,45484,45486,45488,45490,45492],{"class":180,"line":34505},[178,45485,34514],{"class":319},[178,45487,11238],{"class":699},[178,45489,34519],{"class":319},[178,45491,4725],{"class":699},[178,45493,34524],{"class":319},[178,45495,45496],{"class":180,"line":34511},[178,45497,34530],{"class":2008},[178,45499,45500,45502,45504,45506,45508],{"class":180,"line":34527},[178,45501,34536],{"class":319},[178,45503,11238],{"class":699},[178,45505,34498],{"class":319},[178,45507,2133],{"class":195},[178,45509,863],{"class":319},[178,45511,45512],{"class":180,"line":34533},[178,45513,34550],{"class":2008},[178,45515,45516,45518,45520,45522,45524],{"class":180,"line":34547},[178,45517,5176],{"class":699},[178,45519,34558],{"class":319},[178,45521,994],{"class":699},[178,45523,33341],{"class":195},[178,45525,34565],{"class":319},[178,45527,45528],{"class":180,"line":34553},[178,45529,34571],{"class":2008},[178,45531,45532,45534,45536],{"class":180,"line":34568},[178,45533,34342],{"class":319},[178,45535,330],{"class":699},[178,45537,34347],{"class":319},[178,45539,45540],{"class":180,"line":34574},[178,45541,34586],{"class":2008},[178,45543,45544,45546,45548],{"class":180,"line":34583},[178,45545,34357],{"class":319},[178,45547,330],{"class":699},[178,45549,34362],{"class":319},[178,45551,45552],{"class":180,"line":34589},[178,45553,34601],{"class":2008},[178,45555,45556],{"class":180,"line":34598},[178,45557,34607],{"class":319},[178,45559,45560],{"class":180,"line":34604},[178,45561,38088],{"class":2008},[178,45563,45564,45566],{"class":180,"line":34610},[178,45565,34613],{"class":699},[178,45567,34616],{"class":319},[178,45569,45570],{"class":180,"line":34619},[178,45571,34622],{"class":2008},[178,45573,45574,45576,45578],{"class":180,"line":34625},[178,45575,38103],{"class":319},[178,45577,330],{"class":699},[178,45579,34397],{"class":319},[178,45581,45582],{"class":180,"line":34636},[178,45583,34639],{"class":2008},[178,45585,45586,45588,45590,45592,45594,45596,45598],{"class":180,"line":34642},[178,45587,38116],{"class":319},[178,45589,330],{"class":699},[178,45591,34414],{"class":319},[178,45593,34417],{"class":6985},[178,45595,330],{"class":699},[178,45597,1665],{"class":195},[178,45599,863],{"class":319},[178,45601,45602],{"class":180,"line":34661},[178,45603,34664],{"class":2008},[178,45605,45606,45608,45610],{"class":180,"line":34667},[178,45607,38137],{"class":319},[178,45609,330],{"class":699},[178,45611,34440],{"class":319},[178,45613,45614],{"class":180,"line":34678},[178,45615,34681],{"class":2008},[178,45617,45618,45620,45622,45624,45626,45628,45630],{"class":180,"line":34684},[178,45619,38150],{"class":319},[178,45621,11238],{"class":699},[178,45623,38155],{"class":319},[178,45625,2395],{"class":699},[178,45627,34498],{"class":319},[178,45629,2133],{"class":195},[178,45631,863],{"class":319},[178,45633,45634,45636,45638,45640,45642],{"class":180,"line":34704},[178,45635,38168],{"class":319},[178,45637,11238],{"class":699},[178,45639,34519],{"class":319},[178,45641,4725],{"class":699},[178,45643,34524],{"class":319},[178,45645,45646],{"class":180,"line":34720},[178,45647,38181],{"class":2008},[178,45649,45650,45652,45654,45656,45658],{"class":180,"line":34726},[178,45651,38186],{"class":319},[178,45653,11238],{"class":699},[178,45655,34498],{"class":319},[178,45657,2133],{"class":195},[178,45659,863],{"class":319},[178,45661,45662],{"class":180,"line":34740},[178,45663,34743],{"class":2008},[178,45665,45666],{"class":180,"line":34746},[178,45667,34749],{"class":2008},[178,45669,45670,45672,45674],{"class":180,"line":34752},[178,45671,34755],{"class":319},[178,45673,2524],{"class":699},[178,45675,34760],{"class":319},[178,45677,45678],{"class":180,"line":34763},[178,45679,34766],{"class":2008},[178,45681,45682],{"class":180,"line":34769},[178,45683,34772],{"class":2008},[178,45685,45686,45688,45690],{"class":180,"line":34775},[178,45687,34778],{"class":319},[178,45689,2524],{"class":699},[178,45691,34760],{"class":319},[178,45693,45694],{"class":180,"line":34785},[178,45695,34788],{"class":2008},[178,45697,45698,45700,45702],{"class":180,"line":34791},[178,45699,34794],{"class":319},[178,45701,2524],{"class":699},[178,45703,34799],{"class":319},[178,45705,45706],{"class":180,"line":34802},[178,45707,34805],{"class":2008},[178,45709,45710,45712,45714],{"class":180,"line":34808},[178,45711,34811],{"class":319},[178,45713,2524],{"class":699},[178,45715,34799],{"class":319},[178,45717,45718],{"class":180,"line":34818},[178,45719,722],{"emptyLinePlaceholder":721},[178,45721,45722],{"class":180,"line":34823},[178,45723,34826],{"class":2008},[178,45725,45726,45728,45730,45732,45734,45736,45738,45740,45742,45744,45746,45748,45750,45752,45754,45756,45758,45760,45762,45764],{"class":180,"line":34829},[178,45727,34183],{"class":195},[178,45729,944],{"class":319},[178,45731,5365],{"class":188},[178,45733,34191],{"class":195},[178,45735,34840],{"class":188},[178,45737,2836],{"class":195},[178,45739,34845],{"class":699},[178,45741,2885],{"class":195},[178,45743,34850],{"class":188},[178,45745,2836],{"class":195},[178,45747,34845],{"class":699},[178,45749,2885],{"class":195},[178,45751,5365],{"class":188},[178,45753,34861],{"class":319},[178,45755,2472],{"class":699},[178,45757,1665],{"class":195},[178,45759,34868],{"class":319},[178,45761,2472],{"class":699},[178,45763,1665],{"class":195},[178,45765,34875],{"class":319},[178,45767,45768,45770,45772,45774,45776,45778,45780,45782,45784,45786,45788,45790,45792,45794,45796,45798,45800,45802,45804,45806],{"class":180,"line":34878},[178,45769,34183],{"class":195},[178,45771,944],{"class":319},[178,45773,5365],{"class":188},[178,45775,34191],{"class":195},[178,45777,34889],{"class":188},[178,45779,2836],{"class":195},[178,45781,34845],{"class":699},[178,45783,2885],{"class":195},[178,45785,34898],{"class":188},[178,45787,2836],{"class":195},[178,45789,34845],{"class":699},[178,45791,2885],{"class":195},[178,45793,5365],{"class":188},[178,45795,34909],{"class":319},[178,45797,2472],{"class":699},[178,45799,1665],{"class":195},[178,45801,34916],{"class":319},[178,45803,2472],{"class":699},[178,45805,1665],{"class":195},[178,45807,34875],{"class":319},[178,45809,45810],{"class":180,"line":34925},[178,45811,722],{"emptyLinePlaceholder":721},[178,45813,45814],{"class":180,"line":34930},[178,45815,34933],{"class":2008},[178,45817,45818,45820,45822,45824,45826,45828,45830],{"class":180,"line":34936},[178,45819,4280],{"class":699},[178,45821,34941],{"class":319},[178,45823,2472],{"class":699},[178,45825,1665],{"class":195},[178,45827,2879],{"class":319},[178,45829,2899],{"class":699},[178,45831,34952],{"class":319},[178,45833,45834],{"class":180,"line":34955},[178,45835,34958],{"class":2008},[178,45837,45838,45840,45842,45844,45846,45848,45850],{"class":180,"line":34961},[178,45839,34964],{"class":319},[178,45841,1991],{"class":195},[178,45843,330],{"class":699},[178,45845,34971],{"class":319},[178,45847,2472],{"class":699},[178,45849,1665],{"class":195},[178,45851,34978],{"class":319},[178,45853,45854],{"class":180,"line":34981},[178,45855,34984],{"class":2008},[178,45857,45858],{"class":180,"line":34987},[178,45859,34990],{"class":2008},[178,45861,45862,45864,45866],{"class":180,"line":34993},[178,45863,34996],{"class":319},[178,45865,330],{"class":699},[178,45867,34047],{"class":319},[178,45869,45870],{"class":180,"line":35003},[178,45871,722],{"emptyLinePlaceholder":721},[178,45873,45874],{"class":180,"line":35008},[178,45875,35011],{"class":2008},[178,45877,45878,45880,45882,45884,45886],{"class":180,"line":35014},[178,45879,35017],{"class":319},[178,45881,330],{"class":699},[178,45883,35022],{"class":319},[178,45885,2472],{"class":699},[178,45887,35027],{"class":319},[178,45889,45890,45892,45894,45896,45898,45900,45902,45904,45906,45908,45910,45912,45914,45916,45918,45920,45922,45924],{"class":180,"line":35030},[178,45891,34183],{"class":195},[178,45893,944],{"class":319},[178,45895,35037],{"class":188},[178,45897,2836],{"class":195},[178,45899,35042],{"class":699},[178,45901,2885],{"class":195},[178,45903,2484],{"class":188},[178,45905,2836],{"class":195},[178,45907,35042],{"class":699},[178,45909,2885],{"class":195},[178,45911,35055],{"class":188},[178,45913,35058],{"class":319},[178,45915,35061],{"class":699},[178,45917,2847],{"class":195},[178,45919,35066],{"class":319},[178,45921,2268],{"class":699},[178,45923,2847],{"class":195},[178,45925,32239],{"class":319},[178,45927,45928],{"class":180,"line":35075},[178,45929,38465],{"class":2008},[178,45931,45932],{"class":180,"line":35081},[178,45933,38470],{"class":2008},[178,45935,45936,45938,45940],{"class":180,"line":35087},[178,45937,38475],{"class":319},[178,45939,35099],{"class":188},[178,45941,863],{"class":319},[178,45943,45944],{"class":180,"line":35093},[178,45945,35119],{"class":2008},[178,45947,45948,45950,45952,45954,45956,45958],{"class":180,"line":35104},[178,45949,35125],{"class":319},[178,45951,330],{"class":699},[178,45953,35130],{"class":319},[178,45955,35133],{"class":6985},[178,45957,330],{"class":699},[178,45959,3352],{"class":319},[178,45961,45962,45964,45966,45968],{"class":180,"line":35110},[178,45963,35143],{"class":188},[178,45965,2799],{"class":319},[178,45967,35148],{"class":195},[178,45969,35151],{"class":319},[178,45971,45972,45974],{"class":180,"line":35116},[178,45973,35157],{"class":188},[178,45975,35160],{"class":319},[178,45977,45978,45980],{"class":180,"line":35122},[178,45979,35166],{"class":188},[178,45981,35169],{"class":319},[178,45983,45984,45986],{"class":180,"line":35140},[178,45985,35175],{"class":188},[178,45987,35178],{"class":319},[178,45989,45990,45992],{"class":180,"line":35154},[178,45991,35184],{"class":188},[178,45993,35187],{"class":319},[178,45995,45996],{"class":180,"line":35163},[178,45997,35193],{"class":319},[178,45999,46000],{"class":180,"line":35172},[178,46001,35199],{"class":2008},[178,46003,46004,46006],{"class":180,"line":35181},[178,46005,5862],{"class":699},[178,46007,35207],{"class":319},[178,46009,46010],{"class":180,"line":35190},[178,46011,722],{"emptyLinePlaceholder":721},[178,46013,46014],{"class":180,"line":35196},[178,46015,35218],{"class":2008},[178,46017,46018,46020,46022],{"class":180,"line":35202},[178,46019,835],{"class":699},[178,46021,35226],{"class":184},[178,46023,35229],{"class":319},[178,46025,46026],{"class":180,"line":35210},[178,46027,35235],{"class":2008},[178,46029,46030,46032,46034,46036,46038,46040,46042,46044],{"class":180,"line":35215},[178,46031,35241],{"class":319},[178,46033,33428],{"class":6985},[178,46035,330],{"class":699},[178,46037,944],{"class":319},[178,46039,2438],{"class":195},[178,46041,2318],{"class":319},[178,46043,2233],{"class":195},[178,46045,32239],{"class":319},[178,46047,46048],{"class":180,"line":35221},[178,46049,35261],{"class":2008},[178,46051,46052],{"class":180,"line":35232},[178,46053,35267],{"class":2008},[178,46055,46056],{"class":180,"line":35238},[178,46057,35273],{"class":2008},[178,46059,46060,46062,46064,46066,46068,46070,46072],{"class":180,"line":35258},[178,46061,33462],{"class":319},[178,46063,1665],{"class":195},[178,46065,2318],{"class":319},[178,46067,1669],{"class":195},[178,46069,2318],{"class":319},[178,46071,1665],{"class":195},[178,46073,863],{"class":319},[178,46075,46076],{"class":180,"line":35264},[178,46077,35296],{"class":2008},[178,46079,46080],{"class":180,"line":35270},[178,46081,35302],{"class":2008},[178,46083,46084],{"class":180,"line":35276},[178,46085,35308],{"class":2008},[178,46087,46088],{"class":180,"line":35293},[178,46089,35314],{"class":2008},[178,46091,46092],{"class":180,"line":35299},[178,46093,35320],{"class":2008},[178,46095,46096,46098,46100,46102,46104,46106,46108,46110,46112],{"class":180,"line":35305},[178,46097,35326],{"class":319},[178,46099,35329],{"class":188},[178,46101,35332],{"class":319},[178,46103,35335],{"class":188},[178,46105,2318],{"class":319},[178,46107,35340],{"class":6985},[178,46109,330],{"class":699},[178,46111,35345],{"class":188},[178,46113,863],{"class":319},[178,46115,46116,46118,46120,46122,46124,46126,46128,46130,46132],{"class":180,"line":35311},[178,46117,35326],{"class":319},[178,46119,35329],{"class":188},[178,46121,35357],{"class":319},[178,46123,35360],{"class":188},[178,46125,2318],{"class":319},[178,46127,35340],{"class":6985},[178,46129,330],{"class":699},[178,46131,35369],{"class":188},[178,46133,863],{"class":319},[178,46135,46136],{"class":180,"line":35317},[178,46137,35377],{"class":2008},[178,46139,46140],{"class":180,"line":35323},[178,46141,35383],{"class":319},[178,46143,46144],{"class":180,"line":35350},[178,46145,35389],{"class":2008},[178,46147,46148,46150,46152],{"class":180,"line":35374},[178,46149,35395],{"class":319},[178,46151,35398],{"class":188},[178,46153,863],{"class":319},[178,46155,46156,46158,46160],{"class":180,"line":35380},[178,46157,35406],{"class":319},[178,46159,35409],{"class":188},[178,46161,863],{"class":319},[178,46163,46164],{"class":180,"line":35386},[178,46165,35417],{"class":2008},[178,46167,46168,46170,46172,46174,46176,46178,46180],{"class":180,"line":35392},[178,46169,33462],{"class":319},[178,46171,1665],{"class":195},[178,46173,2318],{"class":319},[178,46175,1669],{"class":195},[178,46177,2318],{"class":319},[178,46179,1669],{"class":195},[178,46181,863],{"class":319},[178,46183,46184,46186,46188,46190,46192,46194,46196,46198,46200],{"class":180,"line":35403},[178,46185,35326],{"class":319},[178,46187,35329],{"class":188},[178,46189,35444],{"class":319},[178,46191,35335],{"class":188},[178,46193,2318],{"class":319},[178,46195,35340],{"class":6985},[178,46197,330],{"class":699},[178,46199,35455],{"class":188},[178,46201,863],{"class":319},[178,46203,46204,46206,46208,46210,46212,46214,46216,46218,46220],{"class":180,"line":35414},[178,46205,35326],{"class":319},[178,46207,35329],{"class":188},[178,46209,35467],{"class":319},[178,46211,35360],{"class":188},[178,46213,2318],{"class":319},[178,46215,35340],{"class":6985},[178,46217,330],{"class":699},[178,46219,35478],{"class":188},[178,46221,863],{"class":319},[178,46223,46224],{"class":180,"line":35420},[178,46225,35486],{"class":2008},[178,46227,46228],{"class":180,"line":35437},[178,46229,35383],{"class":319},[178,46231,46232,46234,46236],{"class":180,"line":35460},[178,46233,35395],{"class":319},[178,46235,35329],{"class":188},[178,46237,863],{"class":319},[178,46239,46240,46242,46244],{"class":180,"line":35483},[178,46241,35406],{"class":319},[178,46243,35508],{"class":188},[178,46245,863],{"class":319},[178,46247,46248],{"class":180,"line":35489},[178,46249,35516],{"class":319},[178,46251,46252],{"class":180,"line":35494},[178,46253,722],{"emptyLinePlaceholder":721},[178,46255,46256],{"class":180,"line":35503},[178,46257,35527],{"class":2008},[178,46259,46260,46262,46264,46266,46268],{"class":180,"line":35513},[178,46261,1085],{"class":699},[178,46263,1088],{"class":195},[178,46265,4725],{"class":699},[178,46267,32965],{"class":188},[178,46269,847],{"class":319},[178,46271,46272],{"class":180,"line":35519},[178,46273,35546],{"class":2008},[178,46275,46276,46279,46281],{"class":180,"line":35524},[178,46277,46278],{"class":319},"    GoogLeNet",[178,46280,330],{"class":699},[178,46282,46283],{"class":319},"GoogLeNet(Inception)\n",[178,46285,46286,46288,46290],{"class":180,"line":35530},[178,46287,35563],{"class":319},[178,46289,330],{"class":699},[178,46291,35568],{"class":319},[178,46293,46294,46296,46298,46301,46303,46305,46307],{"class":180,"line":35543},[178,46295,35125],{"class":319},[178,46297,330],{"class":699},[178,46299,46300],{"class":319},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[178,46302,35581],{"class":6985},[178,46304,330],{"class":699},[178,46306,2890],{"class":195},[178,46308,863],{"class":319},[178,46310,46311],{"class":180,"line":35549},[178,46312,35593],{"class":319},[26,46314,46315],{"start":274},[29,46316,42306],{},[154,46318,46320],{"className":690,"code":46319,"language":692,"meta":160,"style":160},"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",[70,46321,46322,46328,46338,46348,46352,46362,46373,46377,46381,46385,46393,46409,46419,46435,46445,46459,46463,46473,46483,46493,46499,46503,46507,46515,46519,46535,46543,46547,46551,46559,46567,46571,46575,46579,46583,46589,46593,46603,46611,46619,46623,46627,46631,46639,46643,46659,46663,46667,46671,46683,46687,46699,46703,46707,46719,46723,46733,46737,46741,46753,46757,46765,46769,46773,46781,46785,46793,46797,46801,46805,46809,46813,46829,46837,46841,46845,46893,46899,46903,46913,46921,46929,46933,46937,46941,46945,46953,46957,46973,46977,46985,46993],{"__ignoreMap":160},[178,46323,46324,46326],{"class":180,"line":181},[178,46325,700],{"class":699},[178,46327,32138],{"class":319},[178,46329,46330,46332,46334,46336],{"class":180,"line":263},[178,46331,700],{"class":699},[178,46333,33151],{"class":319},[178,46335,713],{"class":699},[178,46337,33156],{"class":319},[178,46339,46340,46342,46344,46346],{"class":180,"line":274},[178,46341,32479],{"class":699},[178,46343,33134],{"class":319},[178,46345,700],{"class":699},[178,46347,33139],{"class":319},[178,46349,46350],{"class":180,"line":354},[178,46351,35654],{"class":2008},[178,46353,46354,46356,46358,46360],{"class":180,"line":364},[178,46355,32479],{"class":699},[178,46357,33107],{"class":319},[178,46359,700],{"class":699},[178,46361,33112],{"class":319},[178,46363,46364,46366,46368,46370],{"class":180,"line":740},[178,46365,32479],{"class":699},[178,46367,33649],{"class":319},[178,46369,700],{"class":699},[178,46371,46372],{"class":319}," GoogLeNet,Inception\n",[178,46374,46375],{"class":180,"line":746},[178,46376,722],{"emptyLinePlaceholder":721},[178,46378,46379],{"class":180,"line":752},[178,46380,722],{"emptyLinePlaceholder":721},[178,46382,46383],{"class":180,"line":757},[178,46384,35683],{"class":2008},[178,46386,46387,46389,46391],{"class":180,"line":763},[178,46388,835],{"class":699},[178,46390,35690],{"class":184},[178,46392,33687],{"class":319},[178,46394,46395,46397,46399,46401,46403,46405,46407],{"class":180,"line":769},[178,46396,35697],{"class":319},[178,46398,330],{"class":699},[178,46400,33191],{"class":319},[178,46402,33194],{"class":6985},[178,46404,330],{"class":699},[178,46406,33199],{"class":188},[178,46408,33202],{"class":319},[178,46410,46411,46413,46415,46417],{"class":180,"line":774},[178,46412,35714],{"class":6985},[178,46414,330],{"class":699},[178,46416,35719],{"class":195},[178,46418,33202],{"class":319},[178,46420,46421,46423,46425,46427,46429,46431,46433],{"class":180,"line":780},[178,46422,35726],{"class":6985},[178,46424,330],{"class":699},[178,46426,33229],{"class":319},[178,46428,554],{"class":6985},[178,46430,330],{"class":699},[178,46432,37181],{"class":195},[178,46434,33239],{"class":319},[178,46436,46437,46439,46441,46443],{"class":180,"line":786},[178,46438,35743],{"class":6985},[178,46440,330],{"class":699},[178,46442,33212],{"class":195},[178,46444,863],{"class":319},[178,46446,46447,46449,46451,46453,46455,46457],{"class":180,"line":792},[178,46448,35754],{"class":319},[178,46450,330],{"class":699},[178,46452,33269],{"class":319},[178,46454,33272],{"class":6985},[178,46456,330],{"class":699},[178,46458,35765],{"class":319},[178,46460,46461],{"class":180,"line":798},[178,46462,35770],{"class":2008},[178,46464,46465,46467,46469,46471],{"class":180,"line":804},[178,46466,35775],{"class":6985},[178,46468,330],{"class":699},[178,46470,1665],{"class":195},[178,46472,33202],{"class":319},[178,46474,46475,46477,46479,46481],{"class":180,"line":810},[178,46476,35786],{"class":6985},[178,46478,330],{"class":699},[178,46480,33212],{"class":195},[178,46482,33202],{"class":319},[178,46484,46485,46487,46489,46491],{"class":180,"line":816},[178,46486,35797],{"class":6985},[178,46488,330],{"class":699},[178,46490,2133],{"class":195},[178,46492,863],{"class":319},[178,46494,46495,46497],{"class":180,"line":822},[178,46496,5862],{"class":699},[178,46498,35810],{"class":319},[178,46500,46501],{"class":180,"line":827},[178,46502,722],{"emptyLinePlaceholder":721},[178,46504,46505],{"class":180,"line":832},[178,46506,35819],{"class":2008},[178,46508,46509,46511,46513],{"class":180,"line":850},[178,46510,835],{"class":699},[178,46512,35826],{"class":184},[178,46514,35829],{"class":319},[178,46516,46517],{"class":180,"line":866},[178,46518,35834],{"class":2008},[178,46520,46521,46523,46525,46527,46529,46531,46533],{"class":180,"line":877},[178,46522,32977],{"class":319},[178,46524,330],{"class":699},[178,46526,32984],{"class":188},[178,46528,3499],{"class":699},[178,46530,32989],{"class":319},[178,46532,3496],{"class":699},[178,46534,35851],{"class":188},[178,46536,46537,46539,46541],{"class":180,"line":882},[178,46538,33029],{"class":319},[178,46540,330],{"class":699},[178,46542,34022],{"class":319},[178,46544,46545],{"class":180,"line":898},[178,46546,722],{"emptyLinePlaceholder":721},[178,46548,46549],{"class":180,"line":914},[178,46550,35868],{"class":2008},[178,46552,46553,46555,46557],{"class":180,"line":919},[178,46554,35873],{"class":319},[178,46556,330],{"class":699},[178,46558,34075],{"class":195},[178,46560,46561,46563,46565],{"class":180,"line":935},[178,46562,35882],{"class":319},[178,46564,330],{"class":699},[178,46566,4860],{"class":195},[178,46568,46569],{"class":180,"line":952},[178,46570,722],{"emptyLinePlaceholder":721},[178,46572,46573],{"class":180,"line":966},[178,46574,35895],{"class":2008},[178,46576,46577],{"class":180,"line":980},[178,46578,35900],{"class":2008},[178,46580,46581],{"class":180,"line":985},[178,46582,35905],{"class":2008},[178,46584,46585,46587],{"class":180,"line":1008},[178,46586,35910],{"class":699},[178,46588,34616],{"class":319},[178,46590,46591],{"class":180,"line":1014},[178,46592,35917],{"class":2008},[178,46594,46595,46597,46599,46601],{"class":180,"line":1019},[178,46596,5176],{"class":699},[178,46598,35924],{"class":319},[178,46600,994],{"class":699},[178,46602,35929],{"class":319},[178,46604,46605,46607,46609],{"class":180,"line":1033},[178,46606,35934],{"class":319},[178,46608,330],{"class":699},[178,46610,35939],{"class":319},[178,46612,46613,46615,46617],{"class":180,"line":1046},[178,46614,35944],{"class":319},[178,46616,330],{"class":699},[178,46618,35949],{"class":319},[178,46620,46621],{"class":180,"line":1059},[178,46622,35954],{"class":2008},[178,46624,46625],{"class":180,"line":1072},[178,46626,34607],{"class":319},[178,46628,46629],{"class":180,"line":1077},[178,46630,35963],{"class":2008},[178,46632,46633,46635,46637],{"class":180,"line":1082},[178,46634,34392],{"class":319},[178,46636,330],{"class":699},[178,46638,35972],{"class":319},[178,46640,46641],{"class":180,"line":1099},[178,46642,35977],{"class":2008},[178,46644,46645,46647,46649,46651,46653,46655,46657],{"class":180,"line":9806},[178,46646,34409],{"class":319},[178,46648,330],{"class":699},[178,46650,34414],{"class":319},[178,46652,34417],{"class":6985},[178,46654,330],{"class":699},[178,46656,1665],{"class":195},[178,46658,863],{"class":319},[178,46660,46661],{"class":180,"line":9818},[178,46662,35998],{"class":2008},[178,46664,46665],{"class":180,"line":11477},[178,46666,36003],{"class":2008},[178,46668,46669],{"class":180,"line":11502},[178,46670,36008],{"class":2008},[178,46672,46673,46675,46677,46679,46681],{"class":180,"line":11525},[178,46674,36013],{"class":319},[178,46676,11238],{"class":699},[178,46678,34519],{"class":319},[178,46680,4725],{"class":699},[178,46682,36022],{"class":319},[178,46684,46685],{"class":180,"line":11549},[178,46686,36027],{"class":2008},[178,46688,46689,46691,46693,46695,46697],{"class":180,"line":11554},[178,46690,36032],{"class":319},[178,46692,11238],{"class":699},[178,46694,36037],{"class":319},[178,46696,2133],{"class":195},[178,46698,863],{"class":319},[178,46700,46701],{"class":180,"line":11559},[178,46702,722],{"emptyLinePlaceholder":721},[178,46704,46705],{"class":180,"line":11564},[178,46706,36050],{"class":2008},[178,46708,46709,46711,46713,46715,46717],{"class":180,"line":11573},[178,46710,36055],{"class":319},[178,46712,330],{"class":699},[178,46714,36060],{"class":319},[178,46716,2524],{"class":699},[178,46718,36065],{"class":319},[178,46720,46721],{"class":180,"line":11578},[178,46722,36070],{"class":2008},[178,46724,46725,46727,46729,46731],{"class":180,"line":11584},[178,46726,34183],{"class":195},[178,46728,944],{"class":319},[178,46730,36079],{"class":188},[178,46732,36082],{"class":319},[178,46734,46735],{"class":180,"line":11605},[178,46736,722],{"emptyLinePlaceholder":721},[178,46738,46739],{"class":180,"line":11611},[178,46740,36091],{"class":2008},[178,46742,46743,46745,46747,46749,46751],{"class":180,"line":11625},[178,46744,1085],{"class":699},[178,46746,1088],{"class":195},[178,46748,4725],{"class":699},[178,46750,32965],{"class":188},[178,46752,847],{"class":319},[178,46754,46755],{"class":180,"line":11631},[178,46756,36108],{"class":2008},[178,46758,46759,46761,46763],{"class":180,"line":11658},[178,46760,33029],{"class":319},[178,46762,330],{"class":699},[178,46764,46283],{"class":319},[178,46766,46767],{"class":180,"line":11667},[178,46768,36121],{"class":2008},[178,46770,46771],{"class":180,"line":11673},[178,46772,36126],{"class":2008},[178,46774,46775,46777,46779],{"class":180,"line":11681},[178,46776,36131],{"class":319},[178,46778,36134],{"class":188},[178,46780,32239],{"class":319},[178,46782,46783],{"class":180,"line":11686},[178,46784,36141],{"class":2008},[178,46786,46787,46789,46791],{"class":180,"line":18362},[178,46788,35754],{"class":319},[178,46790,330],{"class":699},[178,46792,36150],{"class":319},[178,46794,46795],{"class":180,"line":18368},[178,46796,36155],{"class":2008},[178,46798,46799],{"class":180,"line":18391},[178,46800,36160],{"class":319},[178,46802,46803],{"class":180,"line":18397},[178,46804,722],{"emptyLinePlaceholder":721},[178,46806,46807],{"class":180,"line":18420},[178,46808,36169],{"class":2008},[178,46810,46811],{"class":180,"line":18434},[178,46812,36174],{"class":2008},[178,46814,46815,46817,46819,46821,46823,46825,46827],{"class":180,"line":18454},[178,46816,32977],{"class":319},[178,46818,330],{"class":699},[178,46820,32984],{"class":188},[178,46822,3499],{"class":699},[178,46824,32989],{"class":319},[178,46826,3496],{"class":699},[178,46828,35851],{"class":188},[178,46830,46831,46833,46835],{"class":180,"line":18460},[178,46832,33029],{"class":319},[178,46834,330],{"class":699},[178,46836,34022],{"class":319},[178,46838,46839],{"class":180,"line":18471},[178,46840,36203],{"class":2008},[178,46842,46843],{"class":180,"line":18494},[178,46844,36208],{"class":2008},[178,46846,46847,46849,46851,46853,46855,46857,46859,46861,46863,46865,46867,46869,46871,46873,46875,46877,46879,46881,46883,46885,46887,46889,46891],{"class":180,"line":18516},[178,46848,36213],{"class":319},[178,46850,330],{"class":699},[178,46852,2830],{"class":319},[178,46854,36220],{"class":188},[178,46856,2318],{"class":319},[178,46858,36225],{"class":188},[178,46860,2318],{"class":319},[178,46862,36230],{"class":188},[178,46864,2318],{"class":319},[178,46866,36235],{"class":188},[178,46868,2318],{"class":319},[178,46870,36240],{"class":188},[178,46872,2318],{"class":319},[178,46874,36245],{"class":188},[178,46876,2318],{"class":319},[178,46878,36250],{"class":188},[178,46880,2318],{"class":319},[178,46882,36255],{"class":188},[178,46884,2318],{"class":319},[178,46886,36260],{"class":188},[178,46888,2318],{"class":319},[178,46890,36265],{"class":188},[178,46892,34978],{"class":319},[178,46894,46895,46897],{"class":180,"line":18521},[178,46896,35910],{"class":699},[178,46898,34616],{"class":319},[178,46900,46901],{"class":180,"line":18527},[178,46902,36278],{"class":2008},[178,46904,46905,46907,46909,46911],{"class":180,"line":18541},[178,46906,5176],{"class":699},[178,46908,36285],{"class":319},[178,46910,994],{"class":699},[178,46912,35929],{"class":319},[178,46914,46915,46917,46919],{"class":180,"line":18554},[178,46916,34342],{"class":319},[178,46918,330],{"class":699},[178,46920,34347],{"class":319},[178,46922,46923,46925,46927],{"class":180,"line":18559},[178,46924,34357],{"class":319},[178,46926,330],{"class":699},[178,46928,34362],{"class":319},[178,46930,46931],{"class":180,"line":18573},[178,46932,722],{"emptyLinePlaceholder":721},[178,46934,46935],{"class":180,"line":18578},[178,46936,36314],{"class":2008},[178,46938,46939],{"class":180,"line":18584},[178,46940,34607],{"class":319},[178,46942,46943],{"class":180,"line":18589},[178,46944,36323],{"class":2008},[178,46946,46947,46949,46951],{"class":180,"line":18603},[178,46948,34392],{"class":319},[178,46950,330],{"class":699},[178,46952,34397],{"class":319},[178,46954,46955],{"class":180,"line":18608},[178,46956,36336],{"class":2008},[178,46958,46959,46961,46963,46965,46967,46969,46971],{"class":180,"line":18613},[178,46960,34409],{"class":319},[178,46962,330],{"class":699},[178,46964,34414],{"class":319},[178,46966,34417],{"class":6985},[178,46968,330],{"class":699},[178,46970,1665],{"class":195},[178,46972,863],{"class":319},[178,46974,46975],{"class":180,"line":18627},[178,46976,36357],{"class":2008},[178,46978,46979,46981,46983],{"class":180,"line":18639},[178,46980,36362],{"class":319},[178,46982,330],{"class":699},[178,46984,36367],{"class":319},[178,46986,46987,46989,46991],{"class":180,"line":18644},[178,46988,36372],{"class":319},[178,46990,330],{"class":699},[178,46992,36377],{"class":319},[178,46994,46995,46997,46999,47001,47003,47005,47007,47009],{"class":180,"line":18657},[178,46996,36382],{"class":195},[178,46998,944],{"class":319},[178,47000,36387],{"class":188},[178,47002,36390],{"class":319},[178,47004,36393],{"class":188},[178,47006,2318],{"class":319},[178,47008,36398],{"class":188},[178,47010,36401],{"class":319},[387,47012,47014],{"id":47013},"_24训练自己的数据集","2.4.训练自己的数据集",[19,47016,47017],{},"猫狗分类任务",[19,47019,47020],{},"划分数据集和验证集",[154,47022,47024],{"className":690,"code":47023,"language":692,"meta":160,"style":160},"# 创建脚本，用于划分数据集和验证集\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",[70,47025,47026,47031,47038,47043,47054,47061,47065,47075,47089,47098,47102,47107,47117,47137,47141,47146,47156,47167,47180,47184,47189,47198,47208,47219,47223,47228,47238,47242,47247,47252,47257,47262,47267,47271,47281,47308,47321,47333,47360,47365,47370,47384,47389,47401,47416,47431,47439,47443,47448,47454,47466,47479,47484,47489,47494,47544,47550,47554],{"__ignoreMap":160},[178,47027,47028],{"class":180,"line":181},[178,47029,47030],{"class":2008},"# 创建脚本，用于划分数据集和验证集\n",[178,47032,47033,47035],{"class":180,"line":263},[178,47034,700],{"class":699},[178,47036,47037],{"class":319}," os\n",[178,47039,47040],{"class":180,"line":274},[178,47041,47042],{"class":2008},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[178,47044,47045,47047,47050,47052],{"class":180,"line":354},[178,47046,32479],{"class":699},[178,47048,47049],{"class":319}," shutil ",[178,47051,700],{"class":699},[178,47053,33557],{"class":319},[178,47055,47056,47058],{"class":180,"line":364},[178,47057,700],{"class":699},[178,47059,47060],{"class":319}," random\n",[178,47062,47063],{"class":180,"line":740},[178,47064,722],{"emptyLinePlaceholder":721},[178,47066,47067,47069,47072],{"class":180,"line":746},[178,47068,835],{"class":699},[178,47070,47071],{"class":184}," mkfile",[178,47073,47074],{"class":319},"(file):\n",[178,47076,47077,47079,47081,47084,47087],{"class":180,"line":752},[178,47078,922],{"class":699},[178,47080,40662],{"class":699},[178,47082,47083],{"class":319}," os.path.exists(",[178,47085,47086],{"class":6985},"file",[178,47088,1005],{"class":319},[178,47090,47091,47094,47096],{"class":180,"line":757},[178,47092,47093],{"class":319},"        os.makedirs(",[178,47095,47086],{"class":6985},[178,47097,863],{"class":319},[178,47099,47100],{"class":180,"line":763},[178,47101,722],{"emptyLinePlaceholder":721},[178,47103,47104],{"class":180,"line":769},[178,47105,47106],{"class":2008},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[178,47108,47109,47112,47114],{"class":180,"line":774},[178,47110,47111],{"class":319},"file_path",[178,47113,330],{"class":699},[178,47115,47116],{"class":188},"'data_cat_dog'\n",[178,47118,47119,47122,47124,47127,47129,47132,47134],{"class":180,"line":780},[178,47120,47121],{"class":319},"flower_class",[178,47123,330],{"class":699},[178,47125,47126],{"class":319},"[cla ",[178,47128,1474],{"class":699},[178,47130,47131],{"class":319}," cla ",[178,47133,994],{"class":699},[178,47135,47136],{"class":319}," os.listdir(file_path)]\n",[178,47138,47139],{"class":180,"line":786},[178,47140,722],{"emptyLinePlaceholder":721},[178,47142,47143],{"class":180,"line":792},[178,47144,47145],{"class":2008},"# 创建训练集train文件夹\n",[178,47147,47148,47151,47154],{"class":180,"line":798},[178,47149,47150],{"class":319},"mkfile(",[178,47152,47153],{"class":188},"'data\u002Ftrain'",[178,47155,863],{"class":319},[178,47157,47158,47160,47162,47164],{"class":180,"line":804},[178,47159,1474],{"class":699},[178,47161,47131],{"class":319},[178,47163,994],{"class":699},[178,47165,47166],{"class":319}," flower_class:\n",[178,47168,47169,47172,47175,47177],{"class":180,"line":810},[178,47170,47171],{"class":319},"    mkfile(",[178,47173,47174],{"class":188},"'data\u002Ftrain\u002F'",[178,47176,2421],{"class":699},[178,47178,47179],{"class":319},"cla)\n",[178,47181,47182],{"class":180,"line":816},[178,47183,722],{"emptyLinePlaceholder":721},[178,47185,47186],{"class":180,"line":822},[178,47187,47188],{"class":2008},"# 创建验证集val文件夹\n",[178,47190,47191,47193,47196],{"class":180,"line":827},[178,47192,47150],{"class":319},[178,47194,47195],{"class":188},"'data\u002Ftest'",[178,47197,863],{"class":319},[178,47199,47200,47202,47204,47206],{"class":180,"line":832},[178,47201,1474],{"class":699},[178,47203,47131],{"class":319},[178,47205,994],{"class":699},[178,47207,47166],{"class":319},[178,47209,47210,47212,47215,47217],{"class":180,"line":850},[178,47211,47171],{"class":319},[178,47213,47214],{"class":188},"'data\u002Ftest\u002F'",[178,47216,2421],{"class":699},[178,47218,47179],{"class":319},[178,47220,47221],{"class":180,"line":866},[178,47222,722],{"emptyLinePlaceholder":721},[178,47224,47225],{"class":180,"line":877},[178,47226,47227],{"class":2008},"# 划分比例，训练集：测试集=9：1\n",[178,47229,47230,47233,47235],{"class":180,"line":882},[178,47231,47232],{"class":319},"split_rate",[178,47234,330],{"class":699},[178,47236,47237],{"class":195},"0.1\n",[178,47239,47240],{"class":180,"line":898},[178,47241,722],{"emptyLinePlaceholder":721},[178,47243,47244],{"class":180,"line":914},[178,47245,47246],{"class":2008},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[178,47248,47249],{"class":180,"line":919},[178,47250,47251],{"class":2008},"# cla_path：当前类别的原始图片路径\n",[178,47253,47254],{"class":180,"line":935},[178,47255,47256],{"class":2008},"# images：当前类别下所有图片的文件名列表\n",[178,47258,47259],{"class":180,"line":952},[178,47260,47261],{"class":2008},"# num：该类别图片总数\n",[178,47263,47264],{"class":180,"line":966},[178,47265,47266],{"class":2008},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[178,47268,47269],{"class":180,"line":980},[178,47270,722],{"emptyLinePlaceholder":721},[178,47272,47273,47275,47277,47279],{"class":180,"line":985},[178,47274,1474],{"class":699},[178,47276,47131],{"class":319},[178,47278,994],{"class":699},[178,47280,47166],{"class":319},[178,47282,47283,47286,47288,47291,47293,47296,47299,47301,47303,47305],{"class":180,"line":1008},[178,47284,47285],{"class":319},"    cla_path ",[178,47287,330],{"class":699},[178,47289,47290],{"class":319}," file_path ",[178,47292,2421],{"class":699},[178,47294,47295],{"class":188}," '\u002F'",[178,47297,47298],{"class":699}," +",[178,47300,47131],{"class":319},[178,47302,2421],{"class":699},[178,47304,47295],{"class":188},[178,47306,47307],{"class":2008},"  # 某一类别的子目录\n",[178,47309,47310,47313,47315,47318],{"class":180,"line":1014},[178,47311,47312],{"class":319},"    images ",[178,47314,330],{"class":699},[178,47316,47317],{"class":319}," os.listdir(cla_path)  ",[178,47319,47320],{"class":2008},"# iamges 列表存储了该目录下所有图像的名称\n",[178,47322,47323,47326,47328,47330],{"class":180,"line":1019},[178,47324,47325],{"class":319},"    num ",[178,47327,330],{"class":699},[178,47329,9100],{"class":195},[178,47331,47332],{"class":319},"(images)\n",[178,47334,47335,47338,47340,47343,47345,47347,47349,47352,47354,47357],{"class":180,"line":1033},[178,47336,47337],{"class":319},"    eval_index ",[178,47339,330],{"class":699},[178,47341,47342],{"class":319}," random.sample(images, ",[178,47344,2433],{"class":6985},[178,47346,330],{"class":699},[178,47348,1956],{"class":195},[178,47350,47351],{"class":319},"(num ",[178,47353,2395],{"class":699},[178,47355,47356],{"class":319}," split_rate))  ",[178,47358,47359],{"class":2008},"# 从images列表中随机抽取 k 个图像名称\n",[178,47361,47362],{"class":180,"line":1046},[178,47363,47364],{"class":2008},"    # 遍历该类别下的所有图片\n",[178,47366,47367],{"class":180,"line":1059},[178,47368,47369],{"class":2008},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[178,47371,47372,47374,47377,47379,47381],{"class":180,"line":1072},[178,47373,988],{"class":699},[178,47375,47376],{"class":319}," index, image ",[178,47378,994],{"class":699},[178,47380,33341],{"class":195},[178,47382,47383],{"class":319},"(images):\n",[178,47385,47386],{"class":180,"line":1077},[178,47387,47388],{"class":2008},"        # eval_index 中保存验证集val的图像名称\n",[178,47390,47391,47393,47396,47398],{"class":180,"line":1082},[178,47392,4280],{"class":699},[178,47394,47395],{"class":319}," image ",[178,47397,994],{"class":699},[178,47399,47400],{"class":319}," eval_index:\n",[178,47402,47403,47406,47408,47411,47413],{"class":180,"line":1099},[178,47404,47405],{"class":319},"            image_path ",[178,47407,330],{"class":699},[178,47409,47410],{"class":319}," cla_path ",[178,47412,2421],{"class":699},[178,47414,47415],{"class":319}," image\n",[178,47417,47418,47421,47423,47426,47428],{"class":180,"line":9806},[178,47419,47420],{"class":319},"            new_path ",[178,47422,330],{"class":699},[178,47424,47425],{"class":188}," 'data\u002Ftest\u002F'",[178,47427,47298],{"class":699},[178,47429,47430],{"class":319}," cla\n",[178,47432,47433,47436],{"class":180,"line":9818},[178,47434,47435],{"class":319},"            copy(image_path, new_path)  ",[178,47437,47438],{"class":2008},"# 将选中的图像复制到新路径\n",[178,47440,47441],{"class":180,"line":11477},[178,47442,722],{"emptyLinePlaceholder":721},[178,47444,47445],{"class":180,"line":11502},[178,47446,47447],{"class":2008},"        # 其余的图像保存在训练集train中\n",[178,47449,47450,47452],{"class":180,"line":11525},[178,47451,4317],{"class":699},[178,47453,847],{"class":319},[178,47455,47456,47458,47460,47462,47464],{"class":180,"line":11549},[178,47457,47405],{"class":319},[178,47459,330],{"class":699},[178,47461,47410],{"class":319},[178,47463,2421],{"class":699},[178,47465,47415],{"class":319},[178,47467,47468,47470,47472,47475,47477],{"class":180,"line":11554},[178,47469,47420],{"class":319},[178,47471,330],{"class":699},[178,47473,47474],{"class":188}," 'data\u002Ftrain\u002F'",[178,47476,47298],{"class":699},[178,47478,47430],{"class":319},[178,47480,47481],{"class":180,"line":11559},[178,47482,47483],{"class":319},"            copy(image_path, new_path)\n",[178,47485,47486],{"class":180,"line":11564},[178,47487,47488],{"class":2008},"            # 打印进度条信息\n",[178,47490,47491],{"class":180,"line":11573},[178,47492,47493],{"class":2008},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[178,47495,47496,47498,47500,47502,47505,47507,47509,47512,47514,47516,47518,47521,47524,47526,47528,47531,47534,47536,47538,47541],{"class":180,"line":11578},[178,47497,34183],{"class":195},[178,47499,944],{"class":319},[178,47501,2191],{"class":188},[178,47503,47504],{"class":195},"\\r",[178,47506,2830],{"class":188},[178,47508,34191],{"class":195},[178,47510,47511],{"class":188},"] processing [",[178,47513,34191],{"class":195},[178,47515,2524],{"class":188},[178,47517,34191],{"class":195},[178,47519,47520],{"class":188},"]\"",[178,47522,47523],{"class":319},".format(cla, index ",[178,47525,2421],{"class":699},[178,47527,26870],{"class":195},[178,47529,47530],{"class":319},", num), ",[178,47532,47533],{"class":6985},"end",[178,47535,330],{"class":699},[178,47537,9421],{"class":188},[178,47539,47540],{"class":319},")  ",[178,47542,47543],{"class":2008},"# processing bar\n",[178,47545,47546,47548],{"class":180,"line":11584},[178,47547,1022],{"class":195},[178,47549,3760],{"class":319},[178,47551,47552],{"class":180,"line":11605},[178,47553,722],{"emptyLinePlaceholder":721},[178,47555,47556,47558,47560,47563],{"class":180,"line":11611},[178,47557,1504],{"class":195},[178,47559,944],{"class":319},[178,47561,47562],{"class":188},"\"processing done!\"",[178,47564,863],{"class":319},[19,47566,47567],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[23756,47569,47571],{"id":47570},"_242模型代码","2.4.2.模型代码",[19,47573,47574],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[154,47576,47578],{"className":690,"code":47577,"language":692,"meta":160,"style":160},"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",[70,47579,47580,47586,47596,47606,47610,47626,47634,47648,47658,47662,47692,47696,47730,47776,47780,47814,47860,47864,47868,47902,47932,47936,47944,47958,47980,48002,48020,48024,48038,48042,48046,48062,48066,48074,48088,48098,48142,48146,48174,48178,48188,48216,48220,48256,48260,48288,48292,48302,48334,48366,48394,48398,48408,48440,48472,48504,48536,48568,48596,48600,48610,48642,48674,48686,48690,48702,48706,48710,48722,48730,48750,48754,48758,48762,48766,48770,48774,48788,48796,48804,48816,48830,48838,48842,48850,48860,48870,48880,48890,48900,48906,48910,48914,48926,48946,48954],{"__ignoreMap":160},[178,47581,47582,47584],{"class":180,"line":181},[178,47583,700],{"class":699},[178,47585,32138],{"class":319},[178,47587,47588,47590,47592,47594],{"class":180,"line":263},[178,47589,32479],{"class":699},[178,47591,32482],{"class":319},[178,47593,700],{"class":699},[178,47595,32487],{"class":319},[178,47597,47598,47600,47602,47604],{"class":180,"line":274},[178,47599,32479],{"class":699},[178,47601,32499],{"class":319},[178,47603,700],{"class":699},[178,47605,32504],{"class":319},[178,47607,47608],{"class":180,"line":354},[178,47609,722],{"emptyLinePlaceholder":721},[178,47611,47612,47614,47616,47618,47620,47622,47624],{"class":180,"line":364},[178,47613,16453],{"class":699},[178,47615,43225],{"class":184},[178,47617,944],{"class":319},[178,47619,32520],{"class":184},[178,47621,2498],{"class":319},[178,47623,32525],{"class":184},[178,47625,1005],{"class":319},[178,47627,47628,47630,47632],{"class":180,"line":740},[178,47629,32542],{"class":699},[178,47631,32545],{"class":195},[178,47633,43244],{"class":319},[178,47635,47636,47638,47640,47642,47644,47646],{"class":180,"line":746},[178,47637,32558],{"class":195},[178,47639,43251],{"class":319},[178,47641,32564],{"class":195},[178,47643,32567],{"class":319},[178,47645,32570],{"class":195},[178,47647,3760],{"class":319},[178,47649,47650,47652,47654,47656],{"class":180,"line":752},[178,47651,32586],{"class":195},[178,47653,36503],{"class":319},[178,47655,330],{"class":699},[178,47657,36508],{"class":319},[178,47659,47660],{"class":180,"line":757},[178,47661,43274],{"class":2008},[178,47663,47664,47666,47668,47670,47672,47674,47676,47678,47680,47682,47684,47686,47688,47690],{"class":180,"line":763},[178,47665,32586],{"class":195},[178,47667,43281],{"class":319},[178,47669,330],{"class":699},[178,47671,32594],{"class":319},[178,47673,32597],{"class":6985},[178,47675,330],{"class":699},[178,47677,43292],{"class":319},[178,47679,32606],{"class":6985},[178,47681,330],{"class":699},[178,47683,43299],{"class":319},[178,47685,32615],{"class":6985},[178,47687,330],{"class":699},[178,47689,1665],{"class":195},[178,47691,863],{"class":319},[178,47693,47694],{"class":180,"line":769},[178,47695,43312],{"class":2008},[178,47697,47698,47700,47702,47704,47706,47708,47710,47712,47714,47716,47718,47720,47722,47724,47726,47728],{"class":180,"line":774},[178,47699,32586],{"class":195},[178,47701,43319],{"class":319},[178,47703,330],{"class":699},[178,47705,32594],{"class":319},[178,47707,32597],{"class":6985},[178,47709,330],{"class":699},[178,47711,43292],{"class":319},[178,47713,32606],{"class":6985},[178,47715,330],{"class":699},[178,47717,43336],{"class":319},[178,47719,2133],{"class":195},[178,47721,43341],{"class":319},[178,47723,32615],{"class":6985},[178,47725,330],{"class":699},[178,47727,1665],{"class":195},[178,47729,863],{"class":319},[178,47731,47732,47734,47736,47738,47740,47742,47744,47746,47748,47750,47752,47754,47756,47758,47760,47762,47764,47766,47768,47770,47772,47774],{"class":180,"line":780},[178,47733,32586],{"class":195},[178,47735,43356],{"class":319},[178,47737,330],{"class":699},[178,47739,32594],{"class":319},[178,47741,32597],{"class":6985},[178,47743,330],{"class":699},[178,47745,43336],{"class":319},[178,47747,2133],{"class":195},[178,47749,43341],{"class":319},[178,47751,32606],{"class":6985},[178,47753,330],{"class":699},[178,47755,43336],{"class":319},[178,47757,1665],{"class":195},[178,47759,43341],{"class":319},[178,47761,32615],{"class":6985},[178,47763,330],{"class":699},[178,47765,2021],{"class":195},[178,47767,2318],{"class":319},[178,47769,32624],{"class":6985},[178,47771,330],{"class":699},[178,47773,1665],{"class":195},[178,47775,863],{"class":319},[178,47777,47778],{"class":180,"line":786},[178,47779,43401],{"class":2008},[178,47781,47782,47784,47786,47788,47790,47792,47794,47796,47798,47800,47802,47804,47806,47808,47810,47812],{"class":180,"line":792},[178,47783,32586],{"class":195},[178,47785,43408],{"class":319},[178,47787,330],{"class":699},[178,47789,32594],{"class":319},[178,47791,32597],{"class":6985},[178,47793,330],{"class":699},[178,47795,43292],{"class":319},[178,47797,32606],{"class":6985},[178,47799,330],{"class":699},[178,47801,43425],{"class":319},[178,47803,2133],{"class":195},[178,47805,43341],{"class":319},[178,47807,32615],{"class":6985},[178,47809,330],{"class":699},[178,47811,1665],{"class":195},[178,47813,863],{"class":319},[178,47815,47816,47818,47820,47822,47824,47826,47828,47830,47832,47834,47836,47838,47840,47842,47844,47846,47848,47850,47852,47854,47856,47858],{"class":180,"line":798},[178,47817,32586],{"class":195},[178,47819,43444],{"class":319},[178,47821,330],{"class":699},[178,47823,32594],{"class":319},[178,47825,32597],{"class":6985},[178,47827,330],{"class":699},[178,47829,43425],{"class":319},[178,47831,2133],{"class":195},[178,47833,43341],{"class":319},[178,47835,32606],{"class":6985},[178,47837,330],{"class":699},[178,47839,43425],{"class":319},[178,47841,1665],{"class":195},[178,47843,43341],{"class":319},[178,47845,32615],{"class":6985},[178,47847,330],{"class":699},[178,47849,2259],{"class":195},[178,47851,2318],{"class":319},[178,47853,32624],{"class":6985},[178,47855,330],{"class":699},[178,47857,1669],{"class":195},[178,47859,863],{"class":319},[178,47861,47862],{"class":180,"line":804},[178,47863,43489],{"class":2008},[178,47865,47866],{"class":180,"line":810},[178,47867,43494],{"class":2008},[178,47869,47870,47872,47874,47876,47878,47880,47882,47884,47886,47888,47890,47892,47894,47896,47898,47900],{"class":180,"line":816},[178,47871,32586],{"class":195},[178,47873,43501],{"class":319},[178,47875,330],{"class":699},[178,47877,36561],{"class":319},[178,47879,32615],{"class":6985},[178,47881,330],{"class":699},[178,47883,2021],{"class":195},[178,47885,2318],{"class":319},[178,47887,32670],{"class":6985},[178,47889,330],{"class":699},[178,47891,1665],{"class":195},[178,47893,2318],{"class":319},[178,47895,32624],{"class":6985},[178,47897,330],{"class":699},[178,47899,1665],{"class":195},[178,47901,863],{"class":319},[178,47903,47904,47906,47908,47910,47912,47914,47916,47918,47920,47922,47924,47926,47928,47930],{"class":180,"line":822},[178,47905,32586],{"class":195},[178,47907,43536],{"class":319},[178,47909,330],{"class":699},[178,47911,32594],{"class":319},[178,47913,32597],{"class":6985},[178,47915,330],{"class":699},[178,47917,43292],{"class":319},[178,47919,32606],{"class":6985},[178,47921,330],{"class":699},[178,47923,43553],{"class":319},[178,47925,32615],{"class":6985},[178,47927,330],{"class":699},[178,47929,1665],{"class":195},[178,47931,863],{"class":319},[178,47933,47934],{"class":180,"line":827},[178,47935,722],{"emptyLinePlaceholder":721},[178,47937,47938,47940,47942],{"class":180,"line":832},[178,47939,32542],{"class":699},[178,47941,32834],{"class":184},[178,47943,32837],{"class":319},[178,47945,47946,47948,47950,47952,47954,47956],{"class":180,"line":850},[178,47947,43578],{"class":319},[178,47949,330],{"class":699},[178,47951,32564],{"class":195},[178,47953,36916],{"class":319},[178,47955,32564],{"class":195},[178,47957,43589],{"class":319},[178,47959,47960,47962,47964,47966,47968,47970,47972,47974,47976,47978],{"class":180,"line":866},[178,47961,8854],{"class":319},[178,47963,330],{"class":699},[178,47965,32564],{"class":195},[178,47967,36916],{"class":319},[178,47969,32564],{"class":195},[178,47971,43604],{"class":319},[178,47973,32564],{"class":195},[178,47975,36916],{"class":319},[178,47977,32564],{"class":195},[178,47979,43613],{"class":319},[178,47981,47982,47984,47986,47988,47990,47992,47994,47996,47998,48000],{"class":180,"line":877},[178,47983,43618],{"class":319},[178,47985,330],{"class":699},[178,47987,32564],{"class":195},[178,47989,36916],{"class":319},[178,47991,32564],{"class":195},[178,47993,43629],{"class":319},[178,47995,32564],{"class":195},[178,47997,36916],{"class":319},[178,47999,32564],{"class":195},[178,48001,43638],{"class":319},[178,48003,48004,48006,48008,48010,48012,48014,48016,48018],{"class":180,"line":882},[178,48005,43643],{"class":319},[178,48007,330],{"class":699},[178,48009,32564],{"class":195},[178,48011,36916],{"class":319},[178,48013,32564],{"class":195},[178,48015,43654],{"class":319},[178,48017,32564],{"class":195},[178,48019,43659],{"class":319},[178,48021,48022],{"class":180,"line":898},[178,48023,43664],{"class":2008},[178,48025,48026,48028,48030,48032,48034,48036],{"class":180,"line":914},[178,48027,16511],{"class":699},[178,48029,43671],{"class":319},[178,48031,34417],{"class":6985},[178,48033,330],{"class":699},[178,48035,1665],{"class":195},[178,48037,863],{"class":319},[178,48039,48040],{"class":180,"line":919},[178,48041,722],{"emptyLinePlaceholder":721},[178,48043,48044],{"class":180,"line":935},[178,48045,43692],{"class":2008},[178,48047,48048,48050,48052,48054,48056,48058,48060],{"class":180,"line":952},[178,48049,16453],{"class":699},[178,48051,43699],{"class":184},[178,48053,944],{"class":319},[178,48055,32520],{"class":184},[178,48057,2498],{"class":319},[178,48059,32525],{"class":184},[178,48061,1005],{"class":319},[178,48063,48064],{"class":180,"line":966},[178,48065,43714],{"class":2008},[178,48067,48068,48070,48072],{"class":180,"line":980},[178,48069,32542],{"class":699},[178,48071,32545],{"class":195},[178,48073,43723],{"class":319},[178,48075,48076,48078,48080,48082,48084,48086],{"class":180,"line":985},[178,48077,32558],{"class":195},[178,48079,43730],{"class":319},[178,48081,32564],{"class":195},[178,48083,32567],{"class":319},[178,48085,32570],{"class":195},[178,48087,3760],{"class":319},[178,48089,48090,48092,48094,48096],{"class":180,"line":1008},[178,48091,32586],{"class":195},[178,48093,43745],{"class":319},[178,48095,330],{"class":699},[178,48097,39741],{"class":319},[178,48099,48100,48102,48104,48106,48108,48110,48112,48114,48116,48118,48120,48122,48124,48126,48128,48130,48132,48134,48136,48138,48140],{"class":180,"line":1014},[178,48101,39746],{"class":319},[178,48103,32597],{"class":6985},[178,48105,330],{"class":699},[178,48107,2021],{"class":195},[178,48109,2318],{"class":319},[178,48111,32606],{"class":6985},[178,48113,330],{"class":699},[178,48115,2145],{"class":195},[178,48117,2318],{"class":319},[178,48119,32615],{"class":6985},[178,48121,330],{"class":699},[178,48123,2309],{"class":195},[178,48125,2318],{"class":319},[178,48127,32670],{"class":6985},[178,48129,330],{"class":699},[178,48131,1669],{"class":195},[178,48133,2318],{"class":319},[178,48135,32624],{"class":6985},[178,48137,330],{"class":699},[178,48139,2021],{"class":195},[178,48141,39779],{"class":319},[178,48143,48144],{"class":180,"line":1019},[178,48145,39784],{"class":319},[178,48147,48148,48150,48152,48154,48156,48158,48160,48162,48164,48166,48168,48170,48172],{"class":180,"line":1033},[178,48149,39829],{"class":319},[178,48151,32615],{"class":6985},[178,48153,330],{"class":699},[178,48155,2021],{"class":195},[178,48157,2318],{"class":319},[178,48159,32670],{"class":6985},[178,48161,330],{"class":699},[178,48163,1669],{"class":195},[178,48165,2318],{"class":319},[178,48167,32624],{"class":6985},[178,48169,330],{"class":699},[178,48171,1665],{"class":195},[178,48173,863],{"class":319},[178,48175,48176],{"class":180,"line":1046},[178,48177,39858],{"class":319},[178,48179,48180,48182,48184,48186],{"class":180,"line":1059},[178,48181,32586],{"class":195},[178,48183,43836],{"class":319},[178,48185,330],{"class":699},[178,48187,39741],{"class":319},[178,48189,48190,48192,48194,48196,48198,48200,48202,48204,48206,48208,48210,48212,48214],{"class":180,"line":1072},[178,48191,39746],{"class":319},[178,48193,32597],{"class":6985},[178,48195,330],{"class":699},[178,48197,2145],{"class":195},[178,48199,2318],{"class":319},[178,48201,32606],{"class":6985},[178,48203,330],{"class":699},[178,48205,2145],{"class":195},[178,48207,2318],{"class":319},[178,48209,32615],{"class":6985},[178,48211,330],{"class":699},[178,48213,1665],{"class":195},[178,48215,39779],{"class":319},[178,48217,48218],{"class":180,"line":1077},[178,48219,39784],{"class":319},[178,48221,48222,48224,48226,48228,48230,48232,48234,48236,48238,48240,48242,48244,48246,48248,48250,48252,48254],{"class":180,"line":1082},[178,48223,39746],{"class":319},[178,48225,32597],{"class":6985},[178,48227,330],{"class":699},[178,48229,2145],{"class":195},[178,48231,2318],{"class":319},[178,48233,32606],{"class":6985},[178,48235,330],{"class":699},[178,48237,43891],{"class":195},[178,48239,2318],{"class":319},[178,48241,32615],{"class":6985},[178,48243,330],{"class":699},[178,48245,2021],{"class":195},[178,48247,2318],{"class":319},[178,48249,32624],{"class":6985},[178,48251,330],{"class":699},[178,48253,1665],{"class":195},[178,48255,39779],{"class":319},[178,48257,48258],{"class":180,"line":1099},[178,48259,39784],{"class":319},[178,48261,48262,48264,48266,48268,48270,48272,48274,48276,48278,48280,48282,48284,48286],{"class":180,"line":9806},[178,48263,39829],{"class":319},[178,48265,32615],{"class":6985},[178,48267,330],{"class":699},[178,48269,2021],{"class":195},[178,48271,2318],{"class":319},[178,48273,32670],{"class":6985},[178,48275,330],{"class":699},[178,48277,1669],{"class":195},[178,48279,2318],{"class":319},[178,48281,32624],{"class":6985},[178,48283,330],{"class":699},[178,48285,1665],{"class":195},[178,48287,863],{"class":319},[178,48289,48290],{"class":180,"line":9818},[178,48291,39858],{"class":319},[178,48293,48294,48296,48298,48300],{"class":180,"line":11477},[178,48295,32586],{"class":195},[178,48297,43952],{"class":319},[178,48299,330],{"class":699},[178,48301,39741],{"class":319},[178,48303,48304,48306,48308,48310,48312,48314,48316,48318,48320,48322,48324,48326,48328,48330,48332],{"class":180,"line":11502},[178,48305,43961],{"class":319},[178,48307,43891],{"class":195},[178,48309,2318],{"class":319},[178,48311,2145],{"class":195},[178,48313,43970],{"class":319},[178,48315,2151],{"class":195},[178,48317,2318],{"class":319},[178,48319,33803],{"class":195},[178,48321,43979],{"class":319},[178,48323,2541],{"class":195},[178,48325,2318],{"class":319},[178,48327,2139],{"class":195},[178,48329,43988],{"class":319},[178,48331,2139],{"class":195},[178,48333,39779],{"class":319},[178,48335,48336,48338,48340,48342,48344,48346,48348,48350,48352,48354,48356,48358,48360,48362,48364],{"class":180,"line":11525},[178,48337,43961],{"class":319},[178,48339,36602],{"class":195},[178,48341,2318],{"class":319},[178,48343,33803],{"class":195},[178,48345,43970],{"class":319},[178,48347,33803],{"class":195},[178,48349,2318],{"class":319},[178,48351,43891],{"class":195},[178,48353,43979],{"class":319},[178,48355,2139],{"class":195},[178,48357,2318],{"class":319},[178,48359,2151],{"class":195},[178,48361,43988],{"class":319},[178,48363,2145],{"class":195},[178,48365,39779],{"class":319},[178,48367,48368,48370,48372,48374,48376,48378,48380,48382,48384,48386,48388,48390,48392],{"class":180,"line":11549},[178,48369,39829],{"class":319},[178,48371,32615],{"class":6985},[178,48373,330],{"class":699},[178,48375,2021],{"class":195},[178,48377,2318],{"class":319},[178,48379,32670],{"class":6985},[178,48381,330],{"class":699},[178,48383,1669],{"class":195},[178,48385,2318],{"class":319},[178,48387,32624],{"class":6985},[178,48389,330],{"class":699},[178,48391,1665],{"class":195},[178,48393,863],{"class":319},[178,48395,48396],{"class":180,"line":11554},[178,48397,39858],{"class":319},[178,48399,48400,48402,48404,48406],{"class":180,"line":11559},[178,48401,32586],{"class":195},[178,48403,44063],{"class":319},[178,48405,330],{"class":699},[178,48407,39741],{"class":319},[178,48409,48410,48412,48414,48416,48418,48420,48422,48424,48426,48428,48430,48432,48434,48436,48438],{"class":180,"line":11564},[178,48411,43961],{"class":319},[178,48413,44074],{"class":195},[178,48415,2318],{"class":319},[178,48417,43891],{"class":195},[178,48419,43970],{"class":319},[178,48421,2151],{"class":195},[178,48423,2318],{"class":319},[178,48425,44087],{"class":195},[178,48427,43979],{"class":319},[178,48429,2541],{"class":195},[178,48431,2318],{"class":319},[178,48433,2547],{"class":195},[178,48435,43988],{"class":319},[178,48437,2145],{"class":195},[178,48439,39779],{"class":319},[178,48441,48442,48444,48446,48448,48450,48452,48454,48456,48458,48460,48462,48464,48466,48468,48470],{"class":180,"line":11573},[178,48443,43961],{"class":319},[178,48445,40189],{"class":195},[178,48447,2318],{"class":319},[178,48449,22806],{"class":195},[178,48451,43970],{"class":319},[178,48453,2558],{"class":195},[178,48455,2318],{"class":319},[178,48457,33236],{"class":195},[178,48459,43979],{"class":319},[178,48461,2740],{"class":195},[178,48463,2318],{"class":319},[178,48465,2145],{"class":195},[178,48467,43988],{"class":319},[178,48469,2145],{"class":195},[178,48471,39779],{"class":319},[178,48473,48474,48476,48478,48480,48482,48484,48486,48488,48490,48492,48494,48496,48498,48500,48502],{"class":180,"line":11578},[178,48475,43961],{"class":319},[178,48477,40189],{"class":195},[178,48479,2318],{"class":319},[178,48481,33803],{"class":195},[178,48483,43970],{"class":319},[178,48485,33803],{"class":195},[178,48487,2318],{"class":319},[178,48489,36602],{"class":195},[178,48491,43979],{"class":319},[178,48493,2740],{"class":195},[178,48495,2318],{"class":319},[178,48497,2145],{"class":195},[178,48499,43988],{"class":319},[178,48501,2145],{"class":195},[178,48503,39779],{"class":319},[178,48505,48506,48508,48510,48512,48514,48516,48518,48520,48522,48524,48526,48528,48530,48532,48534],{"class":180,"line":11584},[178,48507,43961],{"class":319},[178,48509,40189],{"class":195},[178,48511,2318],{"class":319},[178,48513,2558],{"class":195},[178,48515,43970],{"class":319},[178,48517,33803],{"class":195},[178,48519,2318],{"class":319},[178,48521,44184],{"class":195},[178,48523,43979],{"class":319},[178,48525,2139],{"class":195},[178,48527,2318],{"class":319},[178,48529,2145],{"class":195},[178,48531,43988],{"class":319},[178,48533,2145],{"class":195},[178,48535,39779],{"class":319},[178,48537,48538,48540,48542,48544,48546,48548,48550,48552,48554,48556,48558,48560,48562,48564,48566],{"class":180,"line":11605},[178,48539,43961],{"class":319},[178,48541,44205],{"class":195},[178,48543,2318],{"class":319},[178,48545,36602],{"class":195},[178,48547,43970],{"class":319},[178,48549,22806],{"class":195},[178,48551,2318],{"class":319},[178,48553,44218],{"class":195},[178,48555,43979],{"class":319},[178,48557,2139],{"class":195},[178,48559,2318],{"class":319},[178,48561,33803],{"class":195},[178,48563,43988],{"class":319},[178,48565,33803],{"class":195},[178,48567,39779],{"class":319},[178,48569,48570,48572,48574,48576,48578,48580,48582,48584,48586,48588,48590,48592,48594],{"class":180,"line":11611},[178,48571,39829],{"class":319},[178,48573,32615],{"class":6985},[178,48575,330],{"class":699},[178,48577,2021],{"class":195},[178,48579,2318],{"class":319},[178,48581,32670],{"class":6985},[178,48583,330],{"class":699},[178,48585,1669],{"class":195},[178,48587,2318],{"class":319},[178,48589,32624],{"class":6985},[178,48591,330],{"class":699},[178,48593,1665],{"class":195},[178,48595,863],{"class":319},[178,48597,48598],{"class":180,"line":11625},[178,48599,39858],{"class":319},[178,48601,48602,48604,48606,48608],{"class":180,"line":11631},[178,48603,32586],{"class":195},[178,48605,44271],{"class":319},[178,48607,330],{"class":699},[178,48609,39741],{"class":319},[178,48611,48612,48614,48616,48618,48620,48622,48624,48626,48628,48630,48632,48634,48636,48638,48640],{"class":180,"line":11658},[178,48613,43961],{"class":319},[178,48615,44282],{"class":195},[178,48617,2318],{"class":319},[178,48619,36602],{"class":195},[178,48621,43970],{"class":319},[178,48623,22806],{"class":195},[178,48625,2318],{"class":319},[178,48627,44218],{"class":195},[178,48629,43979],{"class":319},[178,48631,2139],{"class":195},[178,48633,2318],{"class":319},[178,48635,33803],{"class":195},[178,48637,43988],{"class":319},[178,48639,33803],{"class":195},[178,48641,39779],{"class":319},[178,48643,48644,48646,48648,48650,48652,48654,48656,48658,48660,48662,48664,48666,48668,48670,48672],{"class":180,"line":11667},[178,48645,43961],{"class":319},[178,48647,44282],{"class":195},[178,48649,2318],{"class":319},[178,48651,36672],{"class":195},[178,48653,43970],{"class":319},[178,48655,43891],{"class":195},[178,48657,2318],{"class":319},[178,48659,36672],{"class":195},[178,48661,43979],{"class":319},[178,48663,2547],{"class":195},[178,48665,2318],{"class":319},[178,48667,33803],{"class":195},[178,48669,43988],{"class":319},[178,48671,33803],{"class":195},[178,48673,39779],{"class":319},[178,48675,48676,48678,48680,48682,48684],{"class":180,"line":11673},[178,48677,44345],{"class":319},[178,48679,1665],{"class":195},[178,48681,2318],{"class":319},[178,48683,1665],{"class":195},[178,48685,44354],{"class":319},[178,48687,48688],{"class":180,"line":11681},[178,48689,40522],{"class":319},[178,48691,48692,48694,48696,48698,48700],{"class":180,"line":11686},[178,48693,40527],{"class":319},[178,48695,44365],{"class":195},[178,48697,2318],{"class":319},[178,48699,1669],{"class":195},[178,48701,863],{"class":319},[178,48703,48704],{"class":180,"line":18362},[178,48705,39858],{"class":319},[178,48707,48708],{"class":180,"line":18368},[178,48709,44380],{"class":2008},[178,48711,48712,48714,48716,48718,48720],{"class":180,"line":18391},[178,48713,5176],{"class":699},[178,48715,40600],{"class":319},[178,48717,994],{"class":699},[178,48719,40605],{"class":195},[178,48721,40608],{"class":319},[178,48723,48724,48726,48728],{"class":180,"line":18397},[178,48725,6413],{"class":699},[178,48727,40620],{"class":195},[178,48729,40623],{"class":319},[178,48731,48732,48734,48736,48738,48740,48742,48744,48746,48748],{"class":180,"line":18420},[178,48733,40633],{"class":319},[178,48735,44407],{"class":6985},[178,48737,330],{"class":699},[178,48739,44412],{"class":188},[178,48741,2318],{"class":319},[178,48743,40636],{"class":6985},[178,48745,330],{"class":699},[178,48747,40641],{"class":188},[178,48749,863],{"class":319},[178,48751,48752],{"class":180,"line":18434},[178,48753,44427],{"class":2008},[178,48755,48756],{"class":180,"line":18454},[178,48757,44432],{"class":2008},[178,48759,48760],{"class":180,"line":18460},[178,48761,44437],{"class":2008},[178,48763,48764],{"class":180,"line":18471},[178,48765,44442],{"class":2008},[178,48767,48768],{"class":180,"line":18494},[178,48769,44447],{"class":2008},[178,48771,48772],{"class":180,"line":18516},[178,48773,44452],{"class":2008},[178,48775,48776,48778,48780,48782,48784,48786],{"class":180,"line":18521},[178,48777,40653],{"class":699},[178,48779,40656],{"class":319},[178,48781,40659],{"class":699},[178,48783,40662],{"class":699},[178,48785,40665],{"class":195},[178,48787,847],{"class":319},[178,48789,48790,48792,48794],{"class":180,"line":18527},[178,48791,40677],{"class":319},[178,48793,2133],{"class":195},[178,48795,863],{"class":319},[178,48797,48798,48800,48802],{"class":180,"line":18541},[178,48799,44479],{"class":699},[178,48801,40620],{"class":195},[178,48803,40696],{"class":319},[178,48805,48806,48808,48810,48812,48814],{"class":180,"line":18554},[178,48807,44488],{"class":319},[178,48809,2133],{"class":195},[178,48811,2318],{"class":319},[178,48813,40718],{"class":195},[178,48815,863],{"class":319},[178,48817,48818,48820,48822,48824,48826,48828],{"class":180,"line":18559},[178,48819,44501],{"class":699},[178,48821,40656],{"class":319},[178,48823,40659],{"class":699},[178,48825,40662],{"class":699},[178,48827,40665],{"class":195},[178,48829,847],{"class":319},[178,48831,48832,48834,48836],{"class":180,"line":18573},[178,48833,44516],{"class":319},[178,48835,2133],{"class":195},[178,48837,863],{"class":319},[178,48839,48840],{"class":180,"line":18578},[178,48841,36897],{"class":2008},[178,48843,48844,48846,48848],{"class":180,"line":18584},[178,48845,32542],{"class":699},[178,48847,32834],{"class":184},[178,48849,32837],{"class":319},[178,48851,48852,48854,48856,48858],{"class":180,"line":18589},[178,48853,32842],{"class":319},[178,48855,330],{"class":699},[178,48857,32564],{"class":195},[178,48859,44543],{"class":319},[178,48861,48862,48864,48866,48868],{"class":180,"line":18603},[178,48863,32842],{"class":319},[178,48865,330],{"class":699},[178,48867,32564],{"class":195},[178,48869,44554],{"class":319},[178,48871,48872,48874,48876,48878],{"class":180,"line":18608},[178,48873,32842],{"class":319},[178,48875,330],{"class":699},[178,48877,32564],{"class":195},[178,48879,44565],{"class":319},[178,48881,48882,48884,48886,48888],{"class":180,"line":18613},[178,48883,32842],{"class":319},[178,48885,330],{"class":699},[178,48887,32564],{"class":195},[178,48889,44576],{"class":319},[178,48891,48892,48894,48896,48898],{"class":180,"line":18627},[178,48893,32842],{"class":319},[178,48895,330],{"class":699},[178,48897,32564],{"class":195},[178,48899,44587],{"class":319},[178,48901,48902,48904],{"class":180,"line":18639},[178,48903,16511],{"class":699},[178,48905,32950],{"class":319},[178,48907,48908],{"class":180,"line":18644},[178,48909,722],{"emptyLinePlaceholder":721},[178,48911,48912],{"class":180,"line":18657},[178,48913,44602],{"class":2008},[178,48915,48916,48918,48920,48922,48924],{"class":180,"line":18662},[178,48917,1085],{"class":699},[178,48919,1088],{"class":195},[178,48921,4725],{"class":699},[178,48923,32965],{"class":188},[178,48925,847],{"class":319},[178,48927,48928,48930,48932,48934,48936,48938,48940,48942,48944],{"class":180,"line":18667},[178,48929,32977],{"class":319},[178,48931,330],{"class":699},[178,48933,32193],{"class":319},[178,48935,32984],{"class":188},[178,48937,3499],{"class":699},[178,48939,32989],{"class":319},[178,48941,3496],{"class":699},[178,48943,32218],{"class":188},[178,48945,863],{"class":319},[178,48947,48948,48950,48952],{"class":180,"line":18672},[178,48949,33029],{"class":319},[178,48951,330],{"class":699},[178,48953,44643],{"class":319},[178,48955,48956,48958,48960,48962,48964,48966,48968,48970],{"class":180,"line":18685},[178,48957,1022],{"class":195},[178,48959,33041],{"class":319},[178,48961,1665],{"class":195},[178,48963,2318],{"class":319},[178,48965,33236],{"class":195},[178,48967,2318],{"class":319},[178,48969,33236],{"class":195},[178,48971,33054],{"class":319},[23756,48973,48975],{"id":48974},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,48977,48978],{},"计算图片的均值与方差，用于训练中归一化处理操作",[154,48980,48982],{"className":690,"code":48981,"language":692,"meta":160,"style":160},"# 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",[70,48983,48984,48989,49002,49007,49013,49018,49028,49032,49037,49047,49051,49056,49066,49083,49087,49092,49104,49116,49147,49156,49166,49176,49180,49185,49200,49204,49209,49214,49219,49229,49234,49259,49263,49268,49283,49287,49300,49304,49309,49314,49319,49324,49329,49339,49349,49372,49380,49388,49396,49400,49412,49416,49421,49425,49429,49436,49456,49480,49487,49501,49506,49511,49515,49529,49533,49545],{"__ignoreMap":160},[178,48985,48986],{"class":180,"line":181},[178,48987,48988],{"class":2008},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[178,48990,48991,48993,48996,48999],{"class":180,"line":263},[178,48992,32479],{"class":699},[178,48994,48995],{"class":195}," PIL",[178,48997,48998],{"class":699}," import",[178,49000,49001],{"class":319}," Image\n",[178,49003,49004],{"class":180,"line":274},[178,49005,49006],{"class":2008},"# os 用来处理文件夹和文件路径\n",[178,49008,49009,49011],{"class":180,"line":354},[178,49010,700],{"class":699},[178,49012,47037],{"class":319},[178,49014,49015],{"class":180,"line":364},[178,49016,49017],{"class":2008},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[178,49019,49020,49022,49024,49026],{"class":180,"line":740},[178,49021,700],{"class":699},[178,49023,710],{"class":319},[178,49025,713],{"class":699},[178,49027,716],{"class":319},[178,49029,49030],{"class":180,"line":746},[178,49031,722],{"emptyLinePlaceholder":721},[178,49033,49034],{"class":180,"line":752},[178,49035,49036],{"class":2008},"# 文件夹路径，包含所有图片文件\n",[178,49038,49039,49042,49044],{"class":180,"line":757},[178,49040,49041],{"class":319},"folder_path ",[178,49043,330],{"class":699},[178,49045,49046],{"class":188}," 'data_cat_dog'\n",[178,49048,49049],{"class":180,"line":763},[178,49050,722],{"emptyLinePlaceholder":721},[178,49052,49053],{"class":180,"line":769},[178,49054,49055],{"class":2008},"# 初始化累积变量\n",[178,49057,49058,49061,49063],{"class":180,"line":774},[178,49059,49060],{"class":319},"total_pixels ",[178,49062,330],{"class":699},[178,49064,49065],{"class":195}," 0\n",[178,49067,49068,49071,49073,49076,49078,49080],{"class":180,"line":780},[178,49069,49070],{"class":319},"sum_normalized_pixel_values ",[178,49072,330],{"class":699},[178,49074,49075],{"class":319}," np.zeros(",[178,49077,2021],{"class":195},[178,49079,47540],{"class":319},[178,49081,49082],{"class":2008},"# 如果是RGB图像，需要三个通道的均值和方差\n",[178,49084,49085],{"class":180,"line":786},[178,49086,722],{"emptyLinePlaceholder":721},[178,49088,49089],{"class":180,"line":792},[178,49090,49091],{"class":2008},"# 遍历文件夹中的图片文件\n",[178,49093,49094,49096,49099,49101],{"class":180,"line":798},[178,49095,1474],{"class":699},[178,49097,49098],{"class":319}," root, dirs, files ",[178,49100,994],{"class":699},[178,49102,49103],{"class":319}," os.walk(folder_path):\n",[178,49105,49106,49108,49111,49113],{"class":180,"line":804},[178,49107,988],{"class":699},[178,49109,49110],{"class":319}," filename ",[178,49112,994],{"class":699},[178,49114,49115],{"class":319}," files:\n",[178,49117,49118,49120,49123,49126,49128,49131,49133,49136,49138,49141,49144],{"class":180,"line":810},[178,49119,4280],{"class":699},[178,49121,49122],{"class":319}," filename.endswith((",[178,49124,49125],{"class":188},"'.jpg'",[178,49127,14196],{"class":319},[178,49129,49130],{"class":188},"'.jpeg'",[178,49132,14196],{"class":319},[178,49134,49135],{"class":188},"'.png'",[178,49137,14196],{"class":319},[178,49139,49140],{"class":188},"'.bmp'",[178,49142,49143],{"class":319},")):  ",[178,49145,49146],{"class":2008},"# 可根据实际情况添加其他格式\n",[178,49148,49149,49151,49153],{"class":180,"line":816},[178,49150,47405],{"class":319},[178,49152,330],{"class":699},[178,49154,49155],{"class":319}," os.path.join(root, filename)\n",[178,49157,49158,49161,49163],{"class":180,"line":822},[178,49159,49160],{"class":319},"            image ",[178,49162,330],{"class":699},[178,49164,49165],{"class":319}," Image.open(image_path)\n",[178,49167,49168,49171,49173],{"class":180,"line":827},[178,49169,49170],{"class":319},"            image_array ",[178,49172,330],{"class":699},[178,49174,49175],{"class":319}," np.array(image)\n",[178,49177,49178],{"class":180,"line":832},[178,49179,722],{"emptyLinePlaceholder":721},[178,49181,49182],{"class":180,"line":850},[178,49183,49184],{"class":2008},"            # 归一化像素值到0-1之间\n",[178,49186,49187,49190,49192,49195,49197],{"class":180,"line":866},[178,49188,49189],{"class":319},"            normalized_image_array ",[178,49191,330],{"class":699},[178,49193,49194],{"class":319}," image_array ",[178,49196,2524],{"class":699},[178,49198,49199],{"class":195}," 255.0\n",[178,49201,49202],{"class":180,"line":877},[178,49203,722],{"emptyLinePlaceholder":721},[178,49205,49206],{"class":180,"line":882},[178,49207,49208],{"class":2008},"            # print(image_path)\n",[178,49210,49211],{"class":180,"line":898},[178,49212,49213],{"class":2008},"            # print(normalized_image_array.shape)\n",[178,49215,49216],{"class":180,"line":914},[178,49217,49218],{"class":2008},"            # 累积归一化后的像素值和像素数量\n",[178,49220,49221,49224,49226],{"class":180,"line":919},[178,49222,49223],{"class":319},"            total_pixels ",[178,49225,11238],{"class":699},[178,49227,49228],{"class":319}," normalized_image_array.size\n",[178,49230,49231],{"class":180,"line":935},[178,49232,49233],{"class":2008},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[178,49235,49236,49239,49241,49244,49247,49249,49251,49253,49255,49257],{"class":180,"line":952},[178,49237,49238],{"class":319},"            sum_normalized_pixel_values ",[178,49240,11238],{"class":699},[178,49242,49243],{"class":319}," np.sum(normalized_image_array, ",[178,49245,49246],{"class":6985},"axis",[178,49248,330],{"class":699},[178,49250,944],{"class":319},[178,49252,2133],{"class":195},[178,49254,14196],{"class":319},[178,49256,1665],{"class":195},[178,49258,32239],{"class":319},[178,49260,49261],{"class":180,"line":966},[178,49262,722],{"emptyLinePlaceholder":721},[178,49264,49265],{"class":180,"line":980},[178,49266,49267],{"class":2008},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[178,49269,49270,49273,49275,49278,49280],{"class":180,"line":985},[178,49271,49272],{"class":319},"mean ",[178,49274,330],{"class":699},[178,49276,49277],{"class":319}," sum_normalized_pixel_values ",[178,49279,2524],{"class":699},[178,49281,49282],{"class":319}," total_pixels\n",[178,49284,49285],{"class":180,"line":1008},[178,49286,722],{"emptyLinePlaceholder":721},[178,49288,49289,49292,49294,49296,49298],{"class":180,"line":1014},[178,49290,49291],{"class":319},"sum_squared_diff ",[178,49293,330],{"class":699},[178,49295,49075],{"class":319},[178,49297,2021],{"class":195},[178,49299,863],{"class":319},[178,49301,49302],{"class":180,"line":1019},[178,49303,722],{"emptyLinePlaceholder":721},[178,49305,49306],{"class":180,"line":1033},[178,49307,49308],{"class":2008},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[178,49310,49311],{"class":180,"line":1046},[178,49312,49313],{"class":2008},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[178,49315,49316],{"class":180,"line":1059},[178,49317,49318],{"class":2008},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[178,49320,49321],{"class":180,"line":1072},[178,49322,49323],{"class":2008},"# Image.open(image_path)：打开图片\n",[178,49325,49326],{"class":180,"line":1077},[178,49327,49328],{"class":2008},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[178,49330,49331,49333,49335,49337],{"class":180,"line":1082},[178,49332,1474],{"class":699},[178,49334,49098],{"class":319},[178,49336,994],{"class":699},[178,49338,49103],{"class":319},[178,49340,49341,49343,49345,49347],{"class":180,"line":1099},[178,49342,988],{"class":699},[178,49344,49110],{"class":319},[178,49346,994],{"class":699},[178,49348,49115],{"class":319},[178,49350,49351,49353,49355,49357,49359,49361,49363,49365,49367,49369],{"class":180,"line":9806},[178,49352,4280],{"class":699},[178,49354,49122],{"class":319},[178,49356,49125],{"class":188},[178,49358,14196],{"class":319},[178,49360,49130],{"class":188},[178,49362,14196],{"class":319},[178,49364,49135],{"class":188},[178,49366,14196],{"class":319},[178,49368,49140],{"class":188},[178,49370,49371],{"class":319},")):\n",[178,49373,49374,49376,49378],{"class":180,"line":9818},[178,49375,47405],{"class":319},[178,49377,330],{"class":699},[178,49379,49155],{"class":319},[178,49381,49382,49384,49386],{"class":180,"line":11477},[178,49383,49160],{"class":319},[178,49385,330],{"class":699},[178,49387,49165],{"class":319},[178,49389,49390,49392,49394],{"class":180,"line":11502},[178,49391,49170],{"class":319},[178,49393,330],{"class":699},[178,49395,49175],{"class":319},[178,49397,49398],{"class":180,"line":11525},[178,49399,49184],{"class":2008},[178,49401,49402,49404,49406,49408,49410],{"class":180,"line":11549},[178,49403,49189],{"class":319},[178,49405,330],{"class":699},[178,49407,49194],{"class":319},[178,49409,2524],{"class":699},[178,49411,49199],{"class":195},[178,49413,49414],{"class":180,"line":11554},[178,49415,49213],{"class":2008},[178,49417,49418],{"class":180,"line":11559},[178,49419,49420],{"class":2008},"            # print(mean.shape)\n",[178,49422,49423],{"class":180,"line":11564},[178,49424,49208],{"class":2008},[178,49426,49427],{"class":180,"line":11573},[178,49428,722],{"emptyLinePlaceholder":721},[178,49430,49431,49434],{"class":180,"line":11578},[178,49432,49433],{"class":699},"            try",[178,49435,847],{"class":319},[178,49437,49438,49441,49443,49446,49448,49451,49453],{"class":180,"line":11584},[178,49439,49440],{"class":319},"                diff ",[178,49442,330],{"class":699},[178,49444,49445],{"class":319}," (normalized_image_array ",[178,49447,2472],{"class":699},[178,49449,49450],{"class":319}," mean) ",[178,49452,12422],{"class":699},[178,49454,49455],{"class":195}," 2\n",[178,49457,49458,49461,49463,49466,49468,49470,49472,49474,49476,49478],{"class":180,"line":11605},[178,49459,49460],{"class":319},"                sum_squared_diff ",[178,49462,11238],{"class":699},[178,49464,49465],{"class":319}," np.sum(diff, ",[178,49467,49246],{"class":6985},[178,49469,330],{"class":699},[178,49471,944],{"class":319},[178,49473,2133],{"class":195},[178,49475,14196],{"class":319},[178,49477,1665],{"class":195},[178,49479,32239],{"class":319},[178,49481,49482,49485],{"class":180,"line":11611},[178,49483,49484],{"class":699},"            except",[178,49486,847],{"class":319},[178,49488,49489,49492,49494,49496,49499],{"class":180,"line":11625},[178,49490,49491],{"class":195},"                print",[178,49493,944],{"class":319},[178,49495,2002],{"class":699},[178,49497,49498],{"class":188},"\"捕获到自定义异常\"",[178,49500,863],{"class":319},[178,49502,49503],{"class":180,"line":11631},[178,49504,49505],{"class":2008},"            # diff = (normalized_image_array - mean) ** 2\n",[178,49507,49508],{"class":180,"line":11658},[178,49509,49510],{"class":2008},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[178,49512,49513],{"class":180,"line":11667},[178,49514,722],{"emptyLinePlaceholder":721},[178,49516,49517,49520,49522,49525,49527],{"class":180,"line":11673},[178,49518,49519],{"class":319},"variance ",[178,49521,330],{"class":699},[178,49523,49524],{"class":319}," sum_squared_diff ",[178,49526,2524],{"class":699},[178,49528,49282],{"class":319},[178,49530,49531],{"class":180,"line":11681},[178,49532,722],{"emptyLinePlaceholder":721},[178,49534,49535,49537,49539,49542],{"class":180,"line":11686},[178,49536,1504],{"class":195},[178,49538,944],{"class":319},[178,49540,49541],{"class":188},"\"Mean:\"",[178,49543,49544],{"class":319},", mean)\n",[178,49546,49547,49549,49551,49554],{"class":180,"line":18362},[178,49548,1504],{"class":195},[178,49550,944],{"class":319},[178,49552,49553],{"class":188},"\"Variance:\"",[178,49555,49556],{"class":319},", variance)\n",[154,49558,49560],{"className":690,"code":49559,"language":692,"meta":160,"style":160},"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",[70,49561,49562,49568,49574,49584,49590,49600,49614,49624,49634,49644,49648,49658,49668,49672,49676,49684,49689,49694,49713,49717,49722,49727,49732,49737,49778,49783,49793,49798,49811,49816,49821,49826,49831,49836,49840,49845,49850,49872,49876,49908,49922,49932,49942,49946,49956,49970,49980,49990,50000,50006,50010,50014,50018,50022,50026,50034,50054,50058,50062,50066,50070,50086,50090,50094,50102,50106,50110,50118,50122,50126,50130,50138,50142,50146,50150,50158,50162,50170,50174,50182,50186,50194,50198,50206,50210,50214,50222,50226,50230,50242,50266,50280,50284,50288,50292,50300,50304,50312,50316,50324,50328,50336,50340,50348,50352,50360,50364,50376,50380,50388,50392,50400,50404,50408,50412,50416,50424,50428,50444,50448,50456,50460,50464,50468,50472,50476,50480,50484,50500,50504,50516,50520,50532,50536,50548,50552,50560,50564,50572,50576,50580,50584,50590,50594,50602,50606,50622,50626,50634,50638,50654,50666,50670,50682,50686,50690,50698,50702,50706,50714,50718,50726,50730,50738,50742,50746,50788,50830,50834,50838,50854,50858,50874,50878,50882,50890,50894,50898,50910,50948,50952,50956,50964,50968,50982,50992,50998,51004,51010,51016,51020,51024,51030,51034,51038,51046,51050,51068,51072,51076,51080,51096,51100,51104,51108,51112,51116,51136,51156,51160,51164,51168,51176,51184,51188,51204,51224,51244,51248,51253,51262,51271,51276,51281,51286,51299,51304,51313,51322,51339],{"__ignoreMap":160},[178,49563,49564,49566],{"class":180,"line":181},[178,49565,700],{"class":699},[178,49567,33557],{"class":319},[178,49569,49570,49572],{"class":180,"line":263},[178,49571,700],{"class":699},[178,49573,33564],{"class":319},[178,49575,49576,49578,49580,49582],{"class":180,"line":274},[178,49577,700],{"class":699},[178,49579,33575],{"class":319},[178,49581,713],{"class":699},[178,49583,33580],{"class":319},[178,49585,49586,49588],{"class":180,"line":354},[178,49587,700],{"class":699},[178,49589,32138],{"class":319},[178,49591,49592,49594,49596,49598],{"class":180,"line":364},[178,49593,32479],{"class":699},[178,49595,33151],{"class":319},[178,49597,700],{"class":699},[178,49599,33597],{"class":319},[178,49601,49602,49604,49606,49608,49611],{"class":180,"line":740},[178,49603,32479],{"class":699},[178,49605,33107],{"class":319},[178,49607,700],{"class":699},[178,49609,49610],{"class":319}," ImageFolder ",[178,49612,49613],{"class":2008},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[178,49615,49616,49618,49620,49622],{"class":180,"line":746},[178,49617,32479],{"class":699},[178,49619,33134],{"class":319},[178,49621,700],{"class":699},[178,49623,33139],{"class":319},[178,49625,49626,49628,49630,49632],{"class":180,"line":752},[178,49627,700],{"class":699},[178,49629,33151],{"class":319},[178,49631,713],{"class":699},[178,49633,33156],{"class":319},[178,49635,49636,49638,49640,49642],{"class":180,"line":757},[178,49637,700],{"class":699},[178,49639,33168],{"class":319},[178,49641,713],{"class":699},[178,49643,33173],{"class":319},[178,49645,49646],{"class":180,"line":763},[178,49647,33642],{"class":2008},[178,49649,49650,49652,49654,49656],{"class":180,"line":769},[178,49651,32479],{"class":699},[178,49653,33649],{"class":319},[178,49655,700],{"class":699},[178,49657,44763],{"class":319},[178,49659,49660,49662,49664,49666],{"class":180,"line":774},[178,49661,32479],{"class":699},[178,49663,32482],{"class":319},[178,49665,700],{"class":699},[178,49667,32487],{"class":319},[178,49669,49670],{"class":180,"line":780},[178,49671,722],{"emptyLinePlaceholder":721},[178,49673,49674],{"class":180,"line":786},[178,49675,33677],{"class":2008},[178,49677,49678,49680,49682],{"class":180,"line":792},[178,49679,835],{"class":699},[178,49681,33684],{"class":184},[178,49683,33687],{"class":319},[178,49685,49686],{"class":180,"line":798},[178,49687,49688],{"class":2008},"    # 导入自己的数据集，并进行数据处理\n",[178,49690,49691],{"class":180,"line":804},[178,49692,49693],{"class":2008},"    # 定义数据集的路径\n",[178,49695,49696,49699,49701,49703,49705,49707,49711],{"class":180,"line":810},[178,49697,49698],{"class":195},"    ROOT_PATH",[178,49700,330],{"class":699},[178,49702,2610],{"class":699},[178,49704,2191],{"class":188},[178,49706,2498],{"class":195},[178,49708,49710],{"class":49709},"sA_wV","\u002Fdata\u002Ftrain",[178,49712,26885],{"class":188},[178,49714,49715],{"class":180,"line":816},[178,49716,722],{"emptyLinePlaceholder":721},[178,49718,49719],{"class":180,"line":822},[178,49720,49721],{"class":2008},"    # 定义归一化方法\n",[178,49723,49724],{"class":180,"line":827},[178,49725,49726],{"class":2008},"    # 这里需要先计算一下数据集的均值和方差\n",[178,49728,49729],{"class":180,"line":832},[178,49730,49731],{"class":2008},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[178,49733,49734],{"class":180,"line":850},[178,49735,49736],{"class":2008},"    # 第一个参数是均值，第二个参数是方差\n",[178,49738,49739,49742,49744,49747,49750,49752,49755,49757,49760,49763,49766,49768,49771,49773,49776],{"class":180,"line":866},[178,49740,49741],{"class":319},"    normalize",[178,49743,330],{"class":699},[178,49745,49746],{"class":319},"transforms.Normalize([",[178,49748,49749],{"class":195},"0.162",[178,49751,2318],{"class":319},[178,49753,49754],{"class":195},"0.151",[178,49756,2318],{"class":319},[178,49758,49759],{"class":195},"0.138",[178,49761,49762],{"class":319},"],[",[178,49764,49765],{"class":195},"0.058",[178,49767,2318],{"class":319},[178,49769,49770],{"class":195},"0.052",[178,49772,2318],{"class":319},[178,49774,49775],{"class":195},"0.048",[178,49777,6428],{"class":319},[178,49779,49780],{"class":180,"line":877},[178,49781,49782],{"class":2008},"    # 定义数据集处理方法变量\n",[178,49784,49785,49788,49790],{"class":180,"line":882},[178,49786,49787],{"class":319},"    train_transform",[178,49789,330],{"class":699},[178,49791,49792],{"class":319},"transforms.Compose([\n",[178,49794,49795],{"class":180,"line":898},[178,49796,49797],{"class":2008},"        # 调整图像大小为224*224\n",[178,49799,49800,49803,49805,49807,49809],{"class":180,"line":914},[178,49801,49802],{"class":319},"        transforms.Resize((",[178,49804,33236],{"class":195},[178,49806,2318],{"class":319},[178,49808,33236],{"class":195},[178,49810,44354],{"class":319},[178,49812,49813],{"class":180,"line":919},[178,49814,49815],{"class":2008},"        # 将图像转换为张量\n",[178,49817,49818],{"class":180,"line":935},[178,49819,49820],{"class":319},"        transforms.ToTensor(),\n",[178,49822,49823],{"class":180,"line":952},[178,49824,49825],{"class":319},"        normalize])\n",[178,49827,49828],{"class":180,"line":966},[178,49829,49830],{"class":2008},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[178,49832,49833],{"class":180,"line":980},[178,49834,49835],{"class":2008},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[178,49837,49838],{"class":180,"line":985},[178,49839,722],{"emptyLinePlaceholder":721},[178,49841,49842],{"class":180,"line":1008},[178,49843,49844],{"class":2008},"    # 加载数据集\n",[178,49846,49847],{"class":180,"line":1014},[178,49848,49849],{"class":2008},"    # 传入数据集路径与处理方法\n",[178,49851,49852,49854,49856,49859,49862,49864,49867,49869],{"class":180,"line":1019},[178,49853,33692],{"class":319},[178,49855,330],{"class":699},[178,49857,49858],{"class":319},"ImageFolder(",[178,49860,49861],{"class":195},"ROOT_PATH",[178,49863,2318],{"class":319},[178,49865,49866],{"class":6985},"transform",[178,49868,330],{"class":699},[178,49870,49871],{"class":319},"train_transform)\n",[178,49873,49874],{"class":180,"line":1033},[178,49875,722],{"emptyLinePlaceholder":721},[178,49877,49878,49880,49882,49884,49886,49888,49890,49892,49894,49896,49898,49900,49902,49904,49906],{"class":180,"line":1046},[178,49879,33744],{"class":319},[178,49881,330],{"class":699},[178,49883,33749],{"class":319},[178,49885,33752],{"class":195},[178,49887,944],{"class":319},[178,49889,33757],{"class":195},[178,49891,2395],{"class":699},[178,49893,9127],{"class":195},[178,49895,33764],{"class":319},[178,49897,33752],{"class":195},[178,49899,944],{"class":319},[178,49901,648],{"class":195},[178,49903,2395],{"class":699},[178,49905,9127],{"class":195},[178,49907,33777],{"class":319},[178,49909,49910,49912,49914,49916,49918,49920],{"class":180,"line":1059},[178,49911,33782],{"class":319},[178,49913,330],{"class":699},[178,49915,33787],{"class":319},[178,49917,33272],{"class":6985},[178,49919,330],{"class":699},[178,49921,33277],{"class":319},[178,49923,49924,49926,49928,49930],{"class":180,"line":1072},[178,49925,33798],{"class":6985},[178,49927,330],{"class":699},[178,49929,2139],{"class":195},[178,49931,33202],{"class":319},[178,49933,49934,49936,49938,49940],{"class":180,"line":1077},[178,49935,33810],{"class":6985},[178,49937,330],{"class":699},[178,49939,33212],{"class":195},[178,49941,33202],{"class":319},[178,49943,49944],{"class":180,"line":1082},[178,49945,33821],{"class":2008},[178,49947,49948,49950,49952,49954],{"class":180,"line":1099},[178,49949,33826],{"class":6985},[178,49951,330],{"class":699},[178,49953,2335],{"class":195},[178,49955,863],{"class":319},[178,49957,49958,49960,49962,49964,49966,49968],{"class":180,"line":9806},[178,49959,33837],{"class":319},[178,49961,330],{"class":699},[178,49963,33269],{"class":319},[178,49965,33272],{"class":6985},[178,49967,330],{"class":699},[178,49969,33848],{"class":319},[178,49971,49972,49974,49976,49978],{"class":180,"line":9818},[178,49973,33853],{"class":6985},[178,49975,330],{"class":699},[178,49977,2139],{"class":195},[178,49979,33202],{"class":319},[178,49981,49982,49984,49986,49988],{"class":180,"line":11477},[178,49983,33864],{"class":6985},[178,49985,330],{"class":699},[178,49987,33212],{"class":195},[178,49989,33202],{"class":319},[178,49991,49992,49994,49996,49998],{"class":180,"line":11502},[178,49993,33875],{"class":6985},[178,49995,330],{"class":699},[178,49997,2335],{"class":195},[178,49999,863],{"class":319},[178,50001,50002,50004],{"class":180,"line":11525},[178,50003,5862],{"class":699},[178,50005,33888],{"class":319},[178,50007,50008],{"class":180,"line":11549},[178,50009,722],{"emptyLinePlaceholder":721},[178,50011,50012],{"class":180,"line":11554},[178,50013,33897],{"class":2008},[178,50015,50016],{"class":180,"line":11559},[178,50017,33902],{"class":2008},[178,50019,50020],{"class":180,"line":11564},[178,50021,722],{"emptyLinePlaceholder":721},[178,50023,50024],{"class":180,"line":11573},[178,50025,33911],{"class":2008},[178,50027,50028,50030,50032],{"class":180,"line":11578},[178,50029,835],{"class":699},[178,50031,33918],{"class":184},[178,50033,33921],{"class":319},[178,50035,50036,50038,50040,50042,50044,50046,50048,50050,50052],{"class":180,"line":11584},[178,50037,32977],{"class":319},[178,50039,330],{"class":699},[178,50041,32193],{"class":319},[178,50043,32984],{"class":188},[178,50045,3499],{"class":699},[178,50047,32989],{"class":319},[178,50049,3496],{"class":699},[178,50051,33940],{"class":188},[178,50053,863],{"class":319},[178,50055,50056],{"class":180,"line":11605},[178,50057,722],{"emptyLinePlaceholder":721},[178,50059,50060],{"class":180,"line":11611},[178,50061,33955],{"class":2008},[178,50063,50064],{"class":180,"line":11625},[178,50065,33960],{"class":2008},[178,50067,50068],{"class":180,"line":11631},[178,50069,33965],{"class":2008},[178,50071,50072,50074,50076,50078,50080,50082,50084],{"class":180,"line":11658},[178,50073,33970],{"class":319},[178,50075,330],{"class":699},[178,50077,33975],{"class":319},[178,50079,33978],{"class":6985},[178,50081,330],{"class":699},[178,50083,33983],{"class":195},[178,50085,863],{"class":319},[178,50087,50088],{"class":180,"line":11667},[178,50089,722],{"emptyLinePlaceholder":721},[178,50091,50092],{"class":180,"line":11673},[178,50093,33994],{"class":2008},[178,50095,50096,50098,50100],{"class":180,"line":11681},[178,50097,33999],{"class":319},[178,50099,330],{"class":699},[178,50101,34004],{"class":319},[178,50103,50104],{"class":180,"line":11686},[178,50105,722],{"emptyLinePlaceholder":721},[178,50107,50108],{"class":180,"line":18362},[178,50109,34013],{"class":2008},[178,50111,50112,50114,50116],{"class":180,"line":18368},[178,50113,33029],{"class":319},[178,50115,330],{"class":699},[178,50117,34022],{"class":319},[178,50119,50120],{"class":180,"line":18391},[178,50121,34027],{"class":2008},[178,50123,50124],{"class":180,"line":18397},[178,50125,34032],{"class":2008},[178,50127,50128],{"class":180,"line":18420},[178,50129,34037],{"class":2008},[178,50131,50132,50134,50136],{"class":180,"line":18434},[178,50133,34042],{"class":319},[178,50135,330],{"class":699},[178,50137,34047],{"class":319},[178,50139,50140],{"class":180,"line":18454},[178,50141,722],{"emptyLinePlaceholder":721},[178,50143,50144],{"class":180,"line":18460},[178,50145,34060],{"class":2008},[178,50147,50148],{"class":180,"line":18471},[178,50149,34065],{"class":2008},[178,50151,50152,50154,50156],{"class":180,"line":18494},[178,50153,34070],{"class":319},[178,50155,330],{"class":699},[178,50157,34075],{"class":195},[178,50159,50160],{"class":180,"line":18516},[178,50161,34080],{"class":2008},[178,50163,50164,50166,50168],{"class":180,"line":18521},[178,50165,34085],{"class":319},[178,50167,330],{"class":699},[178,50169,34090],{"class":319},[178,50171,50172],{"class":180,"line":18527},[178,50173,34095],{"class":2008},[178,50175,50176,50178,50180],{"class":180,"line":18541},[178,50177,34100],{"class":319},[178,50179,330],{"class":699},[178,50181,34090],{"class":319},[178,50183,50184],{"class":180,"line":18554},[178,50185,34109],{"class":2008},[178,50187,50188,50190,50192],{"class":180,"line":18559},[178,50189,34114],{"class":319},[178,50191,330],{"class":699},[178,50193,34090],{"class":319},[178,50195,50196],{"class":180,"line":18573},[178,50197,34123],{"class":2008},[178,50199,50200,50202,50204],{"class":180,"line":18578},[178,50201,34128],{"class":319},[178,50203,330],{"class":699},[178,50205,34090],{"class":319},[178,50207,50208],{"class":180,"line":18584},[178,50209,722],{"emptyLinePlaceholder":721},[178,50211,50212],{"class":180,"line":18589},[178,50213,34141],{"class":2008},[178,50215,50216,50218,50220],{"class":180,"line":18603},[178,50217,34146],{"class":319},[178,50219,330],{"class":699},[178,50221,34151],{"class":319},[178,50223,50224],{"class":180,"line":18608},[178,50225,722],{"emptyLinePlaceholder":721},[178,50227,50228],{"class":180,"line":18613},[178,50229,34164],{"class":2008},[178,50231,50232,50234,50236,50238,50240],{"class":180,"line":18627},[178,50233,988],{"class":699},[178,50235,34171],{"class":319},[178,50237,994],{"class":699},[178,50239,997],{"class":195},[178,50241,34178],{"class":319},[178,50243,50244,50246,50248,50250,50252,50254,50256,50258,50260,50262,50264],{"class":180,"line":18639},[178,50245,34183],{"class":195},[178,50247,944],{"class":319},[178,50249,34188],{"class":188},[178,50251,34191],{"class":195},[178,50253,2524],{"class":188},[178,50255,34191],{"class":195},[178,50257,2191],{"class":188},[178,50259,34200],{"class":319},[178,50261,2472],{"class":699},[178,50263,1665],{"class":195},[178,50265,32239],{"class":319},[178,50267,50268,50270,50272,50274,50276,50278],{"class":180,"line":18644},[178,50269,34183],{"class":195},[178,50271,944],{"class":319},[178,50273,34215],{"class":188},[178,50275,2395],{"class":699},[178,50277,2386],{"class":195},[178,50279,863],{"class":319},[178,50281,50282],{"class":180,"line":18657},[178,50283,722],{"emptyLinePlaceholder":721},[178,50285,50286],{"class":180,"line":18662},[178,50287,34230],{"class":2008},[178,50289,50290],{"class":180,"line":18667},[178,50291,34235],{"class":2008},[178,50293,50294,50296,50298],{"class":180,"line":18672},[178,50295,34240],{"class":319},[178,50297,330],{"class":699},[178,50299,34075],{"class":195},[178,50301,50302],{"class":180,"line":18685},[178,50303,34249],{"class":2008},[178,50305,50306,50308,50310],{"class":180,"line":18690},[178,50307,34254],{"class":319},[178,50309,330],{"class":699},[178,50311,4860],{"class":195},[178,50313,50314],{"class":180,"line":34365},[178,50315,34263],{"class":2008},[178,50317,50318,50320,50322],{"class":180,"line":34371},[178,50319,34268],{"class":319},[178,50321,330],{"class":699},[178,50323,34075],{"class":195},[178,50325,50326],{"class":180,"line":34377},[178,50327,34277],{"class":2008},[178,50329,50330,50332,50334],{"class":180,"line":34383},[178,50331,34282],{"class":319},[178,50333,330],{"class":699},[178,50335,4860],{"class":195},[178,50337,50338],{"class":180,"line":34389},[178,50339,34291],{"class":2008},[178,50341,50342,50344,50346],{"class":180,"line":34400},[178,50343,34296],{"class":319},[178,50345,330],{"class":699},[178,50347,4860],{"class":195},[178,50349,50350],{"class":180,"line":34406},[178,50351,34305],{"class":2008},[178,50353,50354,50356,50358],{"class":180,"line":34426},[178,50355,34310],{"class":319},[178,50357,330],{"class":699},[178,50359,4860],{"class":195},[178,50361,50362],{"class":180,"line":34432},[178,50363,34319],{"class":2008},[178,50365,50366,50368,50370,50372,50374],{"class":180,"line":34443},[178,50367,5176],{"class":699},[178,50369,33336],{"class":319},[178,50371,994],{"class":699},[178,50373,33341],{"class":195},[178,50375,34332],{"class":319},[178,50377,50378],{"class":180,"line":34449},[178,50379,34337],{"class":2008},[178,50381,50382,50384,50386],{"class":180,"line":34455},[178,50383,34342],{"class":319},[178,50385,330],{"class":699},[178,50387,34347],{"class":319},[178,50389,50390],{"class":180,"line":34461},[178,50391,34352],{"class":2008},[178,50393,50394,50396,50398],{"class":180,"line":34467},[178,50395,34357],{"class":319},[178,50397,330],{"class":699},[178,50399,34362],{"class":319},[178,50401,50402],{"class":180,"line":34473},[178,50403,34368],{"class":2008},[178,50405,50406],{"class":180,"line":34479},[178,50407,34374],{"class":319},[178,50409,50410],{"class":180,"line":34485},[178,50411,34380],{"class":2008},[178,50413,50414],{"class":180,"line":34505},[178,50415,34386],{"class":2008},[178,50417,50418,50420,50422],{"class":180,"line":34511},[178,50419,34392],{"class":319},[178,50421,330],{"class":699},[178,50423,34397],{"class":319},[178,50425,50426],{"class":180,"line":34527},[178,50427,34403],{"class":2008},[178,50429,50430,50432,50434,50436,50438,50440,50442],{"class":180,"line":34533},[178,50431,34409],{"class":319},[178,50433,330],{"class":699},[178,50435,34414],{"class":319},[178,50437,34417],{"class":6985},[178,50439,330],{"class":699},[178,50441,1665],{"class":195},[178,50443,863],{"class":319},[178,50445,50446],{"class":180,"line":34547},[178,50447,34429],{"class":2008},[178,50449,50450,50452,50454],{"class":180,"line":34553},[178,50451,34435],{"class":319},[178,50453,330],{"class":699},[178,50455,34440],{"class":319},[178,50457,50458],{"class":180,"line":34568},[178,50459,34446],{"class":2008},[178,50461,50462],{"class":180,"line":34574},[178,50463,34452],{"class":319},[178,50465,50466],{"class":180,"line":34583},[178,50467,34458],{"class":2008},[178,50469,50470],{"class":180,"line":34589},[178,50471,34464],{"class":319},[178,50473,50474],{"class":180,"line":34598},[178,50475,34470],{"class":2008},[178,50477,50478],{"class":180,"line":34604},[178,50479,34476],{"class":319},[178,50481,50482],{"class":180,"line":34610},[178,50483,34482],{"class":2008},[178,50485,50486,50488,50490,50492,50494,50496,50498],{"class":180,"line":34619},[178,50487,34488],{"class":319},[178,50489,11238],{"class":699},[178,50491,34493],{"class":319},[178,50493,2395],{"class":699},[178,50495,34498],{"class":319},[178,50497,2133],{"class":195},[178,50499,863],{"class":319},[178,50501,50502],{"class":180,"line":34625},[178,50503,34508],{"class":2008},[178,50505,50506,50508,50510,50512,50514],{"class":180,"line":34636},[178,50507,34514],{"class":319},[178,50509,11238],{"class":699},[178,50511,34519],{"class":319},[178,50513,4725],{"class":699},[178,50515,34524],{"class":319},[178,50517,50518],{"class":180,"line":34642},[178,50519,34530],{"class":2008},[178,50521,50522,50524,50526,50528,50530],{"class":180,"line":34661},[178,50523,34536],{"class":319},[178,50525,11238],{"class":699},[178,50527,34498],{"class":319},[178,50529,2133],{"class":195},[178,50531,863],{"class":319},[178,50533,50534],{"class":180,"line":34667},[178,50535,34550],{"class":2008},[178,50537,50538,50540,50542,50544,50546],{"class":180,"line":34678},[178,50539,5176],{"class":699},[178,50541,34558],{"class":319},[178,50543,994],{"class":699},[178,50545,33341],{"class":195},[178,50547,34565],{"class":319},[178,50549,50550],{"class":180,"line":34684},[178,50551,34571],{"class":2008},[178,50553,50554,50556,50558],{"class":180,"line":34704},[178,50555,34342],{"class":319},[178,50557,330],{"class":699},[178,50559,34347],{"class":319},[178,50561,50562],{"class":180,"line":34720},[178,50563,34586],{"class":2008},[178,50565,50566,50568,50570],{"class":180,"line":34726},[178,50567,34357],{"class":319},[178,50569,330],{"class":699},[178,50571,34362],{"class":319},[178,50573,50574],{"class":180,"line":34740},[178,50575,34601],{"class":2008},[178,50577,50578],{"class":180,"line":34746},[178,50579,34607],{"class":319},[178,50581,50582],{"class":180,"line":34752},[178,50583,38088],{"class":2008},[178,50585,50586,50588],{"class":180,"line":34763},[178,50587,34613],{"class":699},[178,50589,34616],{"class":319},[178,50591,50592],{"class":180,"line":34769},[178,50593,34622],{"class":2008},[178,50595,50596,50598,50600],{"class":180,"line":34775},[178,50597,38103],{"class":319},[178,50599,330],{"class":699},[178,50601,34397],{"class":319},[178,50603,50604],{"class":180,"line":34785},[178,50605,34639],{"class":2008},[178,50607,50608,50610,50612,50614,50616,50618,50620],{"class":180,"line":34791},[178,50609,38116],{"class":319},[178,50611,330],{"class":699},[178,50613,34414],{"class":319},[178,50615,34417],{"class":6985},[178,50617,330],{"class":699},[178,50619,1665],{"class":195},[178,50621,863],{"class":319},[178,50623,50624],{"class":180,"line":34802},[178,50625,34664],{"class":2008},[178,50627,50628,50630,50632],{"class":180,"line":34808},[178,50629,38137],{"class":319},[178,50631,330],{"class":699},[178,50633,34440],{"class":319},[178,50635,50636],{"class":180,"line":34818},[178,50637,34681],{"class":2008},[178,50639,50640,50642,50644,50646,50648,50650,50652],{"class":180,"line":34823},[178,50641,38150],{"class":319},[178,50643,11238],{"class":699},[178,50645,38155],{"class":319},[178,50647,2395],{"class":699},[178,50649,34498],{"class":319},[178,50651,2133],{"class":195},[178,50653,863],{"class":319},[178,50655,50656,50658,50660,50662,50664],{"class":180,"line":34829},[178,50657,38168],{"class":319},[178,50659,11238],{"class":699},[178,50661,34519],{"class":319},[178,50663,4725],{"class":699},[178,50665,34524],{"class":319},[178,50667,50668],{"class":180,"line":34878},[178,50669,38181],{"class":2008},[178,50671,50672,50674,50676,50678,50680],{"class":180,"line":34925},[178,50673,38186],{"class":319},[178,50675,11238],{"class":699},[178,50677,34498],{"class":319},[178,50679,2133],{"class":195},[178,50681,863],{"class":319},[178,50683,50684],{"class":180,"line":34930},[178,50685,34743],{"class":2008},[178,50687,50688],{"class":180,"line":34936},[178,50689,34749],{"class":2008},[178,50691,50692,50694,50696],{"class":180,"line":34955},[178,50693,34755],{"class":319},[178,50695,2524],{"class":699},[178,50697,34760],{"class":319},[178,50699,50700],{"class":180,"line":34961},[178,50701,34766],{"class":2008},[178,50703,50704],{"class":180,"line":34981},[178,50705,34772],{"class":2008},[178,50707,50708,50710,50712],{"class":180,"line":34987},[178,50709,34778],{"class":319},[178,50711,2524],{"class":699},[178,50713,34760],{"class":319},[178,50715,50716],{"class":180,"line":34993},[178,50717,34788],{"class":2008},[178,50719,50720,50722,50724],{"class":180,"line":35003},[178,50721,34794],{"class":319},[178,50723,2524],{"class":699},[178,50725,34799],{"class":319},[178,50727,50728],{"class":180,"line":35008},[178,50729,34805],{"class":2008},[178,50731,50732,50734,50736],{"class":180,"line":35014},[178,50733,34811],{"class":319},[178,50735,2524],{"class":699},[178,50737,34799],{"class":319},[178,50739,50740],{"class":180,"line":35030},[178,50741,722],{"emptyLinePlaceholder":721},[178,50743,50744],{"class":180,"line":35075},[178,50745,34826],{"class":2008},[178,50747,50748,50750,50752,50754,50756,50758,50760,50762,50764,50766,50768,50770,50772,50774,50776,50778,50780,50782,50784,50786],{"class":180,"line":35081},[178,50749,34183],{"class":195},[178,50751,944],{"class":319},[178,50753,5365],{"class":188},[178,50755,34191],{"class":195},[178,50757,34840],{"class":188},[178,50759,2836],{"class":195},[178,50761,34845],{"class":699},[178,50763,2885],{"class":195},[178,50765,34850],{"class":188},[178,50767,2836],{"class":195},[178,50769,34845],{"class":699},[178,50771,2885],{"class":195},[178,50773,5365],{"class":188},[178,50775,34861],{"class":319},[178,50777,2472],{"class":699},[178,50779,1665],{"class":195},[178,50781,34868],{"class":319},[178,50783,2472],{"class":699},[178,50785,1665],{"class":195},[178,50787,34875],{"class":319},[178,50789,50790,50792,50794,50796,50798,50800,50802,50804,50806,50808,50810,50812,50814,50816,50818,50820,50822,50824,50826,50828],{"class":180,"line":35087},[178,50791,34183],{"class":195},[178,50793,944],{"class":319},[178,50795,5365],{"class":188},[178,50797,34191],{"class":195},[178,50799,34889],{"class":188},[178,50801,2836],{"class":195},[178,50803,34845],{"class":699},[178,50805,2885],{"class":195},[178,50807,34898],{"class":188},[178,50809,2836],{"class":195},[178,50811,34845],{"class":699},[178,50813,2885],{"class":195},[178,50815,5365],{"class":188},[178,50817,34909],{"class":319},[178,50819,2472],{"class":699},[178,50821,1665],{"class":195},[178,50823,34916],{"class":319},[178,50825,2472],{"class":699},[178,50827,1665],{"class":195},[178,50829,34875],{"class":319},[178,50831,50832],{"class":180,"line":35093},[178,50833,722],{"emptyLinePlaceholder":721},[178,50835,50836],{"class":180,"line":35104},[178,50837,34933],{"class":2008},[178,50839,50840,50842,50844,50846,50848,50850,50852],{"class":180,"line":35110},[178,50841,4280],{"class":699},[178,50843,34941],{"class":319},[178,50845,2472],{"class":699},[178,50847,1665],{"class":195},[178,50849,2879],{"class":319},[178,50851,2899],{"class":699},[178,50853,34952],{"class":319},[178,50855,50856],{"class":180,"line":35116},[178,50857,34958],{"class":2008},[178,50859,50860,50862,50864,50866,50868,50870,50872],{"class":180,"line":35122},[178,50861,34964],{"class":319},[178,50863,1991],{"class":195},[178,50865,330],{"class":699},[178,50867,34971],{"class":319},[178,50869,2472],{"class":699},[178,50871,1665],{"class":195},[178,50873,34978],{"class":319},[178,50875,50876],{"class":180,"line":35140},[178,50877,34984],{"class":2008},[178,50879,50880],{"class":180,"line":35154},[178,50881,34990],{"class":2008},[178,50883,50884,50886,50888],{"class":180,"line":35163},[178,50885,34996],{"class":319},[178,50887,330],{"class":699},[178,50889,34047],{"class":319},[178,50891,50892],{"class":180,"line":35172},[178,50893,722],{"emptyLinePlaceholder":721},[178,50895,50896],{"class":180,"line":35181},[178,50897,35011],{"class":2008},[178,50899,50900,50902,50904,50906,50908],{"class":180,"line":35190},[178,50901,35017],{"class":319},[178,50903,330],{"class":699},[178,50905,35022],{"class":319},[178,50907,2472],{"class":699},[178,50909,35027],{"class":319},[178,50911,50912,50914,50916,50918,50920,50922,50924,50926,50928,50930,50932,50934,50936,50938,50940,50942,50944,50946],{"class":180,"line":35196},[178,50913,34183],{"class":195},[178,50915,944],{"class":319},[178,50917,35037],{"class":188},[178,50919,2836],{"class":195},[178,50921,35042],{"class":699},[178,50923,2885],{"class":195},[178,50925,2484],{"class":188},[178,50927,2836],{"class":195},[178,50929,35042],{"class":699},[178,50931,2885],{"class":195},[178,50933,35055],{"class":188},[178,50935,35058],{"class":319},[178,50937,35061],{"class":699},[178,50939,2847],{"class":195},[178,50941,35066],{"class":319},[178,50943,2268],{"class":699},[178,50945,2847],{"class":195},[178,50947,32239],{"class":319},[178,50949,50950],{"class":180,"line":35202},[178,50951,38465],{"class":2008},[178,50953,50954],{"class":180,"line":35210},[178,50955,38470],{"class":2008},[178,50957,50958,50960,50962],{"class":180,"line":35215},[178,50959,38475],{"class":319},[178,50961,35099],{"class":188},[178,50963,863],{"class":319},[178,50965,50966],{"class":180,"line":35221},[178,50967,35119],{"class":2008},[178,50969,50970,50972,50974,50976,50978,50980],{"class":180,"line":35232},[178,50971,35125],{"class":319},[178,50973,330],{"class":699},[178,50975,35130],{"class":319},[178,50977,35133],{"class":6985},[178,50979,330],{"class":699},[178,50981,3352],{"class":319},[178,50983,50984,50986,50988,50990],{"class":180,"line":35238},[178,50985,35143],{"class":188},[178,50987,2799],{"class":319},[178,50989,35148],{"class":195},[178,50991,35151],{"class":319},[178,50993,50994,50996],{"class":180,"line":35258},[178,50995,35157],{"class":188},[178,50997,35160],{"class":319},[178,50999,51000,51002],{"class":180,"line":35264},[178,51001,35166],{"class":188},[178,51003,35169],{"class":319},[178,51005,51006,51008],{"class":180,"line":35270},[178,51007,35175],{"class":188},[178,51009,35178],{"class":319},[178,51011,51012,51014],{"class":180,"line":35276},[178,51013,35184],{"class":188},[178,51015,35187],{"class":319},[178,51017,51018],{"class":180,"line":35293},[178,51019,35193],{"class":319},[178,51021,51022],{"class":180,"line":35299},[178,51023,35199],{"class":2008},[178,51025,51026,51028],{"class":180,"line":35305},[178,51027,5862],{"class":699},[178,51029,35207],{"class":319},[178,51031,51032],{"class":180,"line":35311},[178,51033,722],{"emptyLinePlaceholder":721},[178,51035,51036],{"class":180,"line":35317},[178,51037,35218],{"class":2008},[178,51039,51040,51042,51044],{"class":180,"line":35323},[178,51041,835],{"class":699},[178,51043,35226],{"class":184},[178,51045,35229],{"class":319},[178,51047,51048],{"class":180,"line":35350},[178,51049,35235],{"class":2008},[178,51051,51052,51054,51056,51058,51060,51062,51064,51066],{"class":180,"line":35374},[178,51053,35241],{"class":319},[178,51055,33428],{"class":6985},[178,51057,330],{"class":699},[178,51059,944],{"class":319},[178,51061,2438],{"class":195},[178,51063,2318],{"class":319},[178,51065,2233],{"class":195},[178,51067,32239],{"class":319},[178,51069,51070],{"class":180,"line":35380},[178,51071,35261],{"class":2008},[178,51073,51074],{"class":180,"line":35386},[178,51075,35267],{"class":2008},[178,51077,51078],{"class":180,"line":35392},[178,51079,35273],{"class":2008},[178,51081,51082,51084,51086,51088,51090,51092,51094],{"class":180,"line":35403},[178,51083,33462],{"class":319},[178,51085,1665],{"class":195},[178,51087,2318],{"class":319},[178,51089,1669],{"class":195},[178,51091,2318],{"class":319},[178,51093,1665],{"class":195},[178,51095,863],{"class":319},[178,51097,51098],{"class":180,"line":35414},[178,51099,35296],{"class":2008},[178,51101,51102],{"class":180,"line":35420},[178,51103,35302],{"class":2008},[178,51105,51106],{"class":180,"line":35437},[178,51107,35308],{"class":2008},[178,51109,51110],{"class":180,"line":35460},[178,51111,35314],{"class":2008},[178,51113,51114],{"class":180,"line":35483},[178,51115,35320],{"class":2008},[178,51117,51118,51120,51122,51124,51126,51128,51130,51132,51134],{"class":180,"line":35489},[178,51119,35326],{"class":319},[178,51121,35329],{"class":188},[178,51123,35332],{"class":319},[178,51125,35335],{"class":188},[178,51127,2318],{"class":319},[178,51129,35340],{"class":6985},[178,51131,330],{"class":699},[178,51133,35345],{"class":188},[178,51135,863],{"class":319},[178,51137,51138,51140,51142,51144,51146,51148,51150,51152,51154],{"class":180,"line":35494},[178,51139,35326],{"class":319},[178,51141,35329],{"class":188},[178,51143,35357],{"class":319},[178,51145,35360],{"class":188},[178,51147,2318],{"class":319},[178,51149,35340],{"class":6985},[178,51151,330],{"class":699},[178,51153,35369],{"class":188},[178,51155,863],{"class":319},[178,51157,51158],{"class":180,"line":35503},[178,51159,35377],{"class":2008},[178,51161,51162],{"class":180,"line":35513},[178,51163,35383],{"class":319},[178,51165,51166],{"class":180,"line":35519},[178,51167,35389],{"class":2008},[178,51169,51170,51172,51174],{"class":180,"line":35524},[178,51171,35395],{"class":319},[178,51173,35398],{"class":188},[178,51175,863],{"class":319},[178,51177,51178,51180,51182],{"class":180,"line":35530},[178,51179,35406],{"class":319},[178,51181,35409],{"class":188},[178,51183,863],{"class":319},[178,51185,51186],{"class":180,"line":35543},[178,51187,35417],{"class":2008},[178,51189,51190,51192,51194,51196,51198,51200,51202],{"class":180,"line":35549},[178,51191,33462],{"class":319},[178,51193,1665],{"class":195},[178,51195,2318],{"class":319},[178,51197,1669],{"class":195},[178,51199,2318],{"class":319},[178,51201,1669],{"class":195},[178,51203,863],{"class":319},[178,51205,51206,51208,51210,51212,51214,51216,51218,51220,51222],{"class":180,"line":35560},[178,51207,35326],{"class":319},[178,51209,35329],{"class":188},[178,51211,35444],{"class":319},[178,51213,35335],{"class":188},[178,51215,2318],{"class":319},[178,51217,35340],{"class":6985},[178,51219,330],{"class":699},[178,51221,35455],{"class":188},[178,51223,863],{"class":319},[178,51225,51226,51228,51230,51232,51234,51236,51238,51240,51242],{"class":180,"line":35571},[178,51227,35326],{"class":319},[178,51229,35329],{"class":188},[178,51231,35467],{"class":319},[178,51233,35360],{"class":188},[178,51235,2318],{"class":319},[178,51237,35340],{"class":6985},[178,51239,330],{"class":699},[178,51241,35478],{"class":188},[178,51243,863],{"class":319},[178,51245,51246],{"class":180,"line":35590},[178,51247,35486],{"class":2008},[178,51249,51251],{"class":180,"line":51250},219,[178,51252,35383],{"class":319},[178,51254,51256,51258,51260],{"class":180,"line":51255},220,[178,51257,35395],{"class":319},[178,51259,35329],{"class":188},[178,51261,863],{"class":319},[178,51263,51265,51267,51269],{"class":180,"line":51264},221,[178,51266,35406],{"class":319},[178,51268,35508],{"class":188},[178,51270,863],{"class":319},[178,51272,51274],{"class":180,"line":51273},222,[178,51275,35516],{"class":319},[178,51277,51279],{"class":180,"line":51278},223,[178,51280,722],{"emptyLinePlaceholder":721},[178,51282,51284],{"class":180,"line":51283},224,[178,51285,35527],{"class":2008},[178,51287,51289,51291,51293,51295,51297],{"class":180,"line":51288},225,[178,51290,1085],{"class":699},[178,51292,1088],{"class":195},[178,51294,4725],{"class":699},[178,51296,32965],{"class":188},[178,51298,847],{"class":319},[178,51300,51302],{"class":180,"line":51301},226,[178,51303,35546],{"class":2008},[178,51305,51307,51309,51311],{"class":180,"line":51306},227,[178,51308,46278],{"class":319},[178,51310,330],{"class":699},[178,51312,46283],{"class":319},[178,51314,51316,51318,51320],{"class":180,"line":51315},228,[178,51317,35563],{"class":319},[178,51319,330],{"class":699},[178,51321,35568],{"class":319},[178,51323,51325,51327,51329,51331,51333,51335,51337],{"class":180,"line":51324},229,[178,51326,35125],{"class":319},[178,51328,330],{"class":699},[178,51330,46300],{"class":319},[178,51332,35581],{"class":6985},[178,51334,330],{"class":699},[178,51336,2847],{"class":195},[178,51338,863],{"class":319},[178,51340,51342],{"class":180,"line":51341},230,[178,51343,35593],{"class":319},[23756,51345,51347],{"id":51346},"_242测试代码","2.4.2.测试代码",[19,51349,51350],{},"使用测试集进行测试与推理",[154,51352,51354],{"className":690,"code":51353,"language":692,"meta":160,"style":160},"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",[70,51355,51356,51362,51372,51382,51393,51403,51407,51411,51419,51424,51428,51445,51449,51453,51457,51461,51465,51497,51501,51509,51513,51525,51529,51533,51537,51541,51545,51549,51553,51557,51575,51589,51593,51603,51613,51623,51629,51633,51637,51645,51649,51665,51673,51677,51681,51689,51697,51701,51705,51709,51713,51719,51723,51733,51741,51749,51753,51757,51761,51769,51773,51789,51793,51797,51801,51813,51817,51829,51833,51837,51849,51853,51863,51867,51871,51883,51887,51895,51899,51903,51911,51915,51923,51927,51931,51935,51939,51943,51959,51967,51971,51975,51993,51999,52003,52013,52021,52029,52033,52037,52041,52045,52053,52057,52073,52077,52085,52093],{"__ignoreMap":160},[178,51357,51358,51360],{"class":180,"line":181},[178,51359,700],{"class":699},[178,51361,32138],{"class":319},[178,51363,51364,51366,51368,51370],{"class":180,"line":263},[178,51365,700],{"class":699},[178,51367,33151],{"class":319},[178,51369,713],{"class":699},[178,51371,33156],{"class":319},[178,51373,51374,51376,51378,51380],{"class":180,"line":274},[178,51375,32479],{"class":699},[178,51377,33134],{"class":319},[178,51379,700],{"class":699},[178,51381,33139],{"class":319},[178,51383,51384,51386,51388,51390],{"class":180,"line":354},[178,51385,32479],{"class":699},[178,51387,33107],{"class":319},[178,51389,700],{"class":699},[178,51391,51392],{"class":319}," ImageFolder\n",[178,51394,51395,51397,51399,51401],{"class":180,"line":364},[178,51396,32479],{"class":699},[178,51398,33649],{"class":319},[178,51400,700],{"class":699},[178,51402,46372],{"class":319},[178,51404,51405],{"class":180,"line":740},[178,51406,722],{"emptyLinePlaceholder":721},[178,51408,51409],{"class":180,"line":746},[178,51410,35683],{"class":2008},[178,51412,51413,51415,51417],{"class":180,"line":752},[178,51414,835],{"class":699},[178,51416,35690],{"class":184},[178,51418,33687],{"class":319},[178,51420,51421],{"class":180,"line":757},[178,51422,51423],{"class":2008},"   # 导入自己的数据集，并进行数据处理\n",[178,51425,51426],{"class":180,"line":763},[178,51427,49693],{"class":2008},[178,51429,51430,51432,51434,51436,51438,51440,51443],{"class":180,"line":769},[178,51431,49698],{"class":195},[178,51433,330],{"class":699},[178,51435,2610],{"class":699},[178,51437,2191],{"class":188},[178,51439,2498],{"class":195},[178,51441,51442],{"class":49709},"\u002Fdata\u002Ftest",[178,51444,26885],{"class":188},[178,51446,51447],{"class":180,"line":774},[178,51448,722],{"emptyLinePlaceholder":721},[178,51450,51451],{"class":180,"line":780},[178,51452,49721],{"class":2008},[178,51454,51455],{"class":180,"line":786},[178,51456,49726],{"class":2008},[178,51458,51459],{"class":180,"line":792},[178,51460,49731],{"class":2008},[178,51462,51463],{"class":180,"line":798},[178,51464,49736],{"class":2008},[178,51466,51467,51469,51471,51473,51475,51477,51479,51481,51483,51485,51487,51489,51491,51493,51495],{"class":180,"line":804},[178,51468,49741],{"class":319},[178,51470,330],{"class":699},[178,51472,49746],{"class":319},[178,51474,49749],{"class":195},[178,51476,2318],{"class":319},[178,51478,49754],{"class":195},[178,51480,2318],{"class":319},[178,51482,49759],{"class":195},[178,51484,49762],{"class":319},[178,51486,49765],{"class":195},[178,51488,2318],{"class":319},[178,51490,49770],{"class":195},[178,51492,2318],{"class":319},[178,51494,49775],{"class":195},[178,51496,6428],{"class":319},[178,51498,51499],{"class":180,"line":810},[178,51500,49782],{"class":2008},[178,51502,51503,51505,51507],{"class":180,"line":816},[178,51504,49787],{"class":319},[178,51506,330],{"class":699},[178,51508,49792],{"class":319},[178,51510,51511],{"class":180,"line":822},[178,51512,49797],{"class":2008},[178,51514,51515,51517,51519,51521,51523],{"class":180,"line":827},[178,51516,49802],{"class":319},[178,51518,33236],{"class":195},[178,51520,2318],{"class":319},[178,51522,33236],{"class":195},[178,51524,44354],{"class":319},[178,51526,51527],{"class":180,"line":832},[178,51528,49815],{"class":2008},[178,51530,51531],{"class":180,"line":850},[178,51532,49820],{"class":319},[178,51534,51535],{"class":180,"line":866},[178,51536,49825],{"class":319},[178,51538,51539],{"class":180,"line":877},[178,51540,49830],{"class":2008},[178,51542,51543],{"class":180,"line":882},[178,51544,49835],{"class":2008},[178,51546,51547],{"class":180,"line":898},[178,51548,722],{"emptyLinePlaceholder":721},[178,51550,51551],{"class":180,"line":914},[178,51552,49844],{"class":2008},[178,51554,51555],{"class":180,"line":919},[178,51556,49849],{"class":2008},[178,51558,51559,51561,51563,51565,51567,51569,51571,51573],{"class":180,"line":935},[178,51560,35697],{"class":319},[178,51562,330],{"class":699},[178,51564,49858],{"class":319},[178,51566,49861],{"class":195},[178,51568,2318],{"class":319},[178,51570,49866],{"class":6985},[178,51572,330],{"class":699},[178,51574,49871],{"class":319},[178,51576,51577,51579,51581,51583,51585,51587],{"class":180,"line":952},[178,51578,35754],{"class":319},[178,51580,330],{"class":699},[178,51582,33269],{"class":319},[178,51584,33272],{"class":6985},[178,51586,330],{"class":699},[178,51588,35765],{"class":319},[178,51590,51591],{"class":180,"line":966},[178,51592,35770],{"class":2008},[178,51594,51595,51597,51599,51601],{"class":180,"line":980},[178,51596,35775],{"class":6985},[178,51598,330],{"class":699},[178,51600,1665],{"class":195},[178,51602,33202],{"class":319},[178,51604,51605,51607,51609,51611],{"class":180,"line":985},[178,51606,35786],{"class":6985},[178,51608,330],{"class":699},[178,51610,33212],{"class":195},[178,51612,33202],{"class":319},[178,51614,51615,51617,51619,51621],{"class":180,"line":1008},[178,51616,35797],{"class":6985},[178,51618,330],{"class":699},[178,51620,2133],{"class":195},[178,51622,863],{"class":319},[178,51624,51625,51627],{"class":180,"line":1014},[178,51626,5862],{"class":699},[178,51628,35810],{"class":319},[178,51630,51631],{"class":180,"line":1019},[178,51632,722],{"emptyLinePlaceholder":721},[178,51634,51635],{"class":180,"line":1033},[178,51636,35819],{"class":2008},[178,51638,51639,51641,51643],{"class":180,"line":1046},[178,51640,835],{"class":699},[178,51642,35826],{"class":184},[178,51644,35829],{"class":319},[178,51646,51647],{"class":180,"line":1059},[178,51648,35834],{"class":2008},[178,51650,51651,51653,51655,51657,51659,51661,51663],{"class":180,"line":1072},[178,51652,32977],{"class":319},[178,51654,330],{"class":699},[178,51656,32984],{"class":188},[178,51658,3499],{"class":699},[178,51660,32989],{"class":319},[178,51662,3496],{"class":699},[178,51664,35851],{"class":188},[178,51666,51667,51669,51671],{"class":180,"line":1077},[178,51668,33029],{"class":319},[178,51670,330],{"class":699},[178,51672,34022],{"class":319},[178,51674,51675],{"class":180,"line":1082},[178,51676,722],{"emptyLinePlaceholder":721},[178,51678,51679],{"class":180,"line":1099},[178,51680,35868],{"class":2008},[178,51682,51683,51685,51687],{"class":180,"line":9806},[178,51684,35873],{"class":319},[178,51686,330],{"class":699},[178,51688,34075],{"class":195},[178,51690,51691,51693,51695],{"class":180,"line":9818},[178,51692,35882],{"class":319},[178,51694,330],{"class":699},[178,51696,4860],{"class":195},[178,51698,51699],{"class":180,"line":11477},[178,51700,722],{"emptyLinePlaceholder":721},[178,51702,51703],{"class":180,"line":11502},[178,51704,35895],{"class":2008},[178,51706,51707],{"class":180,"line":11525},[178,51708,35900],{"class":2008},[178,51710,51711],{"class":180,"line":11549},[178,51712,35905],{"class":2008},[178,51714,51715,51717],{"class":180,"line":11554},[178,51716,35910],{"class":699},[178,51718,34616],{"class":319},[178,51720,51721],{"class":180,"line":11559},[178,51722,35917],{"class":2008},[178,51724,51725,51727,51729,51731],{"class":180,"line":11564},[178,51726,5176],{"class":699},[178,51728,35924],{"class":319},[178,51730,994],{"class":699},[178,51732,35929],{"class":319},[178,51734,51735,51737,51739],{"class":180,"line":11573},[178,51736,35934],{"class":319},[178,51738,330],{"class":699},[178,51740,35939],{"class":319},[178,51742,51743,51745,51747],{"class":180,"line":11578},[178,51744,35944],{"class":319},[178,51746,330],{"class":699},[178,51748,35949],{"class":319},[178,51750,51751],{"class":180,"line":11584},[178,51752,35954],{"class":2008},[178,51754,51755],{"class":180,"line":11605},[178,51756,34607],{"class":319},[178,51758,51759],{"class":180,"line":11611},[178,51760,35963],{"class":2008},[178,51762,51763,51765,51767],{"class":180,"line":11625},[178,51764,34392],{"class":319},[178,51766,330],{"class":699},[178,51768,35972],{"class":319},[178,51770,51771],{"class":180,"line":11631},[178,51772,35977],{"class":2008},[178,51774,51775,51777,51779,51781,51783,51785,51787],{"class":180,"line":11658},[178,51776,34409],{"class":319},[178,51778,330],{"class":699},[178,51780,34414],{"class":319},[178,51782,34417],{"class":6985},[178,51784,330],{"class":699},[178,51786,1665],{"class":195},[178,51788,863],{"class":319},[178,51790,51791],{"class":180,"line":11667},[178,51792,35998],{"class":2008},[178,51794,51795],{"class":180,"line":11673},[178,51796,36003],{"class":2008},[178,51798,51799],{"class":180,"line":11681},[178,51800,36008],{"class":2008},[178,51802,51803,51805,51807,51809,51811],{"class":180,"line":11686},[178,51804,36013],{"class":319},[178,51806,11238],{"class":699},[178,51808,34519],{"class":319},[178,51810,4725],{"class":699},[178,51812,36022],{"class":319},[178,51814,51815],{"class":180,"line":18362},[178,51816,36027],{"class":2008},[178,51818,51819,51821,51823,51825,51827],{"class":180,"line":18368},[178,51820,36032],{"class":319},[178,51822,11238],{"class":699},[178,51824,36037],{"class":319},[178,51826,2133],{"class":195},[178,51828,863],{"class":319},[178,51830,51831],{"class":180,"line":18391},[178,51832,722],{"emptyLinePlaceholder":721},[178,51834,51835],{"class":180,"line":18397},[178,51836,36050],{"class":2008},[178,51838,51839,51841,51843,51845,51847],{"class":180,"line":18420},[178,51840,36055],{"class":319},[178,51842,330],{"class":699},[178,51844,36060],{"class":319},[178,51846,2524],{"class":699},[178,51848,36065],{"class":319},[178,51850,51851],{"class":180,"line":18434},[178,51852,36070],{"class":2008},[178,51854,51855,51857,51859,51861],{"class":180,"line":18454},[178,51856,34183],{"class":195},[178,51858,944],{"class":319},[178,51860,36079],{"class":188},[178,51862,36082],{"class":319},[178,51864,51865],{"class":180,"line":18460},[178,51866,722],{"emptyLinePlaceholder":721},[178,51868,51869],{"class":180,"line":18471},[178,51870,36091],{"class":2008},[178,51872,51873,51875,51877,51879,51881],{"class":180,"line":18494},[178,51874,1085],{"class":699},[178,51876,1088],{"class":195},[178,51878,4725],{"class":699},[178,51880,32965],{"class":188},[178,51882,847],{"class":319},[178,51884,51885],{"class":180,"line":18516},[178,51886,36108],{"class":2008},[178,51888,51889,51891,51893],{"class":180,"line":18521},[178,51890,33029],{"class":319},[178,51892,330],{"class":699},[178,51894,46283],{"class":319},[178,51896,51897],{"class":180,"line":18527},[178,51898,36121],{"class":2008},[178,51900,51901],{"class":180,"line":18541},[178,51902,36126],{"class":2008},[178,51904,51905,51907,51909],{"class":180,"line":18554},[178,51906,36131],{"class":319},[178,51908,36134],{"class":188},[178,51910,32239],{"class":319},[178,51912,51913],{"class":180,"line":18559},[178,51914,36141],{"class":2008},[178,51916,51917,51919,51921],{"class":180,"line":18573},[178,51918,35754],{"class":319},[178,51920,330],{"class":699},[178,51922,36150],{"class":319},[178,51924,51925],{"class":180,"line":18578},[178,51926,36155],{"class":2008},[178,51928,51929],{"class":180,"line":18584},[178,51930,36160],{"class":319},[178,51932,51933],{"class":180,"line":18589},[178,51934,722],{"emptyLinePlaceholder":721},[178,51936,51937],{"class":180,"line":18603},[178,51938,36169],{"class":2008},[178,51940,51941],{"class":180,"line":18608},[178,51942,36174],{"class":2008},[178,51944,51945,51947,51949,51951,51953,51955,51957],{"class":180,"line":18613},[178,51946,32977],{"class":319},[178,51948,330],{"class":699},[178,51950,32984],{"class":188},[178,51952,3499],{"class":699},[178,51954,32989],{"class":319},[178,51956,3496],{"class":699},[178,51958,35851],{"class":188},[178,51960,51961,51963,51965],{"class":180,"line":18627},[178,51962,33029],{"class":319},[178,51964,330],{"class":699},[178,51966,34022],{"class":319},[178,51968,51969],{"class":180,"line":18639},[178,51970,36203],{"class":2008},[178,51972,51973],{"class":180,"line":18644},[178,51974,36208],{"class":2008},[178,51976,51977,51979,51981,51983,51986,51988,51991],{"class":180,"line":18657},[178,51978,36213],{"class":319},[178,51980,330],{"class":699},[178,51982,2830],{"class":319},[178,51984,51985],{"class":188},"'猫'",[178,51987,2318],{"class":319},[178,51989,51990],{"class":188},"'狗'",[178,51992,34978],{"class":319},[178,51994,51995,51997],{"class":180,"line":18662},[178,51996,35910],{"class":699},[178,51998,34616],{"class":319},[178,52000,52001],{"class":180,"line":18667},[178,52002,36278],{"class":2008},[178,52004,52005,52007,52009,52011],{"class":180,"line":18672},[178,52006,5176],{"class":699},[178,52008,36285],{"class":319},[178,52010,994],{"class":699},[178,52012,35929],{"class":319},[178,52014,52015,52017,52019],{"class":180,"line":18685},[178,52016,34342],{"class":319},[178,52018,330],{"class":699},[178,52020,34347],{"class":319},[178,52022,52023,52025,52027],{"class":180,"line":18690},[178,52024,34357],{"class":319},[178,52026,330],{"class":699},[178,52028,34362],{"class":319},[178,52030,52031],{"class":180,"line":34365},[178,52032,722],{"emptyLinePlaceholder":721},[178,52034,52035],{"class":180,"line":34371},[178,52036,36314],{"class":2008},[178,52038,52039],{"class":180,"line":34377},[178,52040,34607],{"class":319},[178,52042,52043],{"class":180,"line":34383},[178,52044,36323],{"class":2008},[178,52046,52047,52049,52051],{"class":180,"line":34389},[178,52048,34392],{"class":319},[178,52050,330],{"class":699},[178,52052,34397],{"class":319},[178,52054,52055],{"class":180,"line":34400},[178,52056,36336],{"class":2008},[178,52058,52059,52061,52063,52065,52067,52069,52071],{"class":180,"line":34406},[178,52060,34409],{"class":319},[178,52062,330],{"class":699},[178,52064,34414],{"class":319},[178,52066,34417],{"class":6985},[178,52068,330],{"class":699},[178,52070,1665],{"class":195},[178,52072,863],{"class":319},[178,52074,52075],{"class":180,"line":34426},[178,52076,36357],{"class":2008},[178,52078,52079,52081,52083],{"class":180,"line":34432},[178,52080,36362],{"class":319},[178,52082,330],{"class":699},[178,52084,36367],{"class":319},[178,52086,52087,52089,52091],{"class":180,"line":34443},[178,52088,36372],{"class":319},[178,52090,330],{"class":699},[178,52092,36377],{"class":319},[178,52094,52095,52097,52099,52101,52103,52105,52107,52109],{"class":180,"line":34449},[178,52096,36382],{"class":195},[178,52098,944],{"class":319},[178,52100,36387],{"class":188},[178,52102,36390],{"class":319},[178,52104,36393],{"class":188},[178,52106,2318],{"class":319},[178,52108,36398],{"class":188},[178,52110,36401],{"class":319},[1853,52112,52113],{},"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":160,"searchDepth":263,"depth":263,"links":52115},[52116,52117,52118,52119],{"id":32333,"depth":274,"text":32334},{"id":39571,"depth":274,"text":39572},{"id":43004,"depth":274,"text":43005},{"id":47013,"depth":274,"text":47014},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32325,"description":25135},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52126,"title":52127,"body":52128,"description":25135,"extension":1880,"meta":52135,"navigation":721,"path":52136,"seo":52137,"stem":52138,"__hash__":52139},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52129,"toc":52133},[52130],[10,52131,52127],{"id":52132},"_3yolo模型学习",{"title":160,"searchDepth":263,"depth":263,"links":52134},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52127,"description":25135},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52141,"title":52142,"body":52143,"description":52150,"extension":1880,"meta":52151,"navigation":721,"path":52153,"seo":52154,"stem":52155,"__hash__":52156},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52144,"toc":52148},[52145],[19,52146,52147],{},"yolo模型还未补充",{"title":160,"searchDepth":263,"depth":263,"links":52149},[],"深度学习学习",{"category":52152},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52142,"description":52150},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52158,"title":52159,"body":52160,"description":25135,"extension":1880,"meta":52185,"navigation":721,"path":52186,"seo":52187,"stem":52188,"__hash__":52189},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52161,"toc":52183},[52162,52165,52168,52173,52180],[10,52163,52159],{"id":52164},"_1工具",[19,52166,52167],{},"提示错误插件：有问题会提前报错",[19,52169,52170],{},[3269,52171],{"alt":160,"src":52172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,52174,52175],{},[2178,52176,52179],{"href":52177,"rel":52178},"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",[25619],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,52181,52182],{},"alt键加上下箭头可以实现语句的移动",{"title":160,"searchDepth":263,"depth":263,"links":52184},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52159,"description":25135},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52191,"title":52192,"body":52193,"description":25135,"extension":1880,"meta":55049,"navigation":721,"path":55050,"seo":55051,"stem":55052,"__hash__":55053},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52194,"toc":55000},[52195,52198,52202,52206,52211,52214,52219,52223,52230,52235,52242,52247,52254,52259,52263,52268,52271,52275,52280,52284,52289,52292,52295,52298,52301,52304,52307,52310,52313,52318,52323,52328,52332,52335,52338,52342,52347,52350,52358,52363,52380,52388,52393,52398,52403,52408,52413,52416,52421,52426,52430,52439,52444,52449,52453,52458,52461,52465,52470,52478,52483,52488,52491,52496,52501,52506,52509,52512,52515,52520,52525,52528,52533,52536,52541,52544,52547,52550,52555,52558,52561,52576,52581,52586,52591,52594,52597,52600,52614,52617,52622,52627,52630,52633,52636,52639,52642,52645,52648,52652,52656,52661,52665,52668,52673,52678,52681,52686,52689,52693,52698,52701,52704,52707,52710,52713,52716,52719,52722,52725,52729,52734,52739,52744,52747,52750,52754,52759,52762,52766,52769,52772,52777,52780,52783,52787,52791,52794,52799,52804,52807,52836,52841,52846,52851,52856,52860,52865,52869,52874,52877,52881,52885,52890,52894,52899,52904,52908,52913,52916,52918,52921,52926,52930,52935,52939,52943,52948,52953,52958,52963,52967,52972,52977,52982,52985,52988,52993,52996,53001,53006,53011,53016,53020,53823,53827,54168,54173,54176,54179,54182,54185,54188,54191,54194,54197,54199,54202,54204,54207,54211,54216,54219,54222,54225,54229,54234,54239,54259,54262,54266,54271,54276,54293,54297,54326,54330,54352,54354,54393,54401,54407,54411,54414,54417,54422,54427,54430,54433,54436,54441,54446,54449,54452,54455,54458,54461,54464,54467,54470,54473,54476,54479,54481,54484,54487,54490,54493,54496,54499,54502,54505,54509,54514,54517,54522,54525,54528,54531,54534,54537,54540,54543,54545,54548,54551,54554,54557,54560,54563,54567,54570,54579,54582,54587,54590,54595,54598,54601,54604,54607,54610,54613,54616,54620,54624,54627,54630,54635,54640,54645,54649,54654,54659,54662,54665,54668,54671,54674,54679,54682,54687,54689,54694,54697,54701,54706,54709,54712,54717,54721,54724,54729,54732,54735,54764,54769,54772,54775,54778,54781,54784,54788,54791,54875,54879,54882,54887,54892,54899,54902,54905,54908,54911,54914,54919,54924,54927,54930,54933,54936,54939,54942,54945,54948,54951,54953,54956,54960,54965,54970,54975,54978,54983,54988,54991,54994,54997],[10,52196,52192],{"id":52197},"_2基础语法",[14,52199,52201],{"id":52200},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[387,52203,52205],{"id":52204},"_211-js组成","2.1.1 js组成",[26,52207,52208],{},[29,52209,52210],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,52212,52213],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[26,52215,52216],{"start":263},[29,52217,52218],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[387,52220,52222],{"id":52221},"_212-js书写位置","2.1.2 js书写位置",[26,52224,52225],{},[29,52226,52227],{},[2093,52228,52229],{},"内部 JavaScript",[19,52231,52232],{},[3269,52233],{"alt":160,"src":52234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[26,52236,52237],{"start":263},[29,52238,52239],{},[2093,52240,52241],{},"外部 JavaScript",[19,52243,52244],{},[3269,52245],{"alt":160,"src":52246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[26,52248,52249],{"start":274},[29,52250,52251],{},[2093,52252,52253],{},"内联 JavaScript",[19,52255,52256],{},[3269,52257],{"alt":160,"src":52258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[387,52260,52262],{"id":52261},"_213-javascript注释","2.1.3 JavaScript注释",[19,52264,52265],{},[3269,52266],{"alt":160,"src":52267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,52269,52270],{},"alt+shift+a一定要记住！",[387,52272,52274],{"id":52273},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,52276,52277],{},[3269,52278],{"alt":160,"src":52279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[387,52281,52283],{"id":52282},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[26,52285,52286],{},[29,52287,52288],{},"输出语法：",[19,52290,52291],{},"①document.write('要出的内容')",[19,52293,52294],{},"向body内输出内容；",[19,52296,52297],{},"如果输出的内容写的是标签，也会被解析cheng",[19,52299,52300],{},"②alert('要出的内容')",[19,52302,52303],{},"页面弹出警告对话框",[19,52305,52306],{},"③console.log('控制台打印')",[19,52308,52309],{},"控制台输出语法，程序员调试使用",[19,52311,52312],{},"输入log就行，自动生成：",[19,52314,52315],{},[3269,52316],{"alt":160,"src":52317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[26,52319,52320],{"start":263},[29,52321,52322],{},"输入语法：",[19,52324,52325],{},[3269,52326],{"alt":160,"src":52327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[387,52329,52331],{"id":52330},"_2116-字面量","21.1.6 字面量",[19,52333,52334],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,52336,52337],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52339,52341],{"id":52340},"_22-变量","2.2 变量",[26,52343,52344],{},[29,52345,52346],{},"变量声明",[19,52348,52349],{},"let 变量名",[2946,52351,52352,52355],{},[29,52353,52354],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[29,52356,52357],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[26,52359,52360],{"start":263},[29,52361,52362],{},"变量赋值",[154,52364,52368],{"className":52365,"code":52366,"language":52367,"meta":160,"style":160},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[70,52369,52370,52375],{"__ignoreMap":160},[178,52371,52372],{"class":180,"line":181},[178,52373,52374],{"class":319},"let age\n",[178,52376,52377],{"class":180,"line":263},[178,52378,52379],{"class":319},"age=18\n",[26,52381,52382,52385],{"start":274},[29,52383,52384],{},"连这些（变量的初始化）：let age=18",[29,52386,52387],{},"更新变量",[19,52389,52390],{},[3269,52391],{"alt":160,"src":52392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[26,52394,52395],{"start":364},[29,52396,52397],{},"声明多个变量",[19,52399,52400],{},[3269,52401],{"alt":160,"src":52402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[26,52404,52405],{"start":740},[29,52406,52407],{},"变量命名规则与规范",[19,52409,52410],{},[3269,52411],{"alt":160,"src":52412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,52414,52415],{},"遵守小驼峰！",[26,52417,52418],{"start":746},[29,52419,52420],{},"变量拓展-let和var的区别",[19,52422,52423],{},[3269,52424],{"alt":160,"src":52425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52427,52429],{"id":52428},"_23-数组","2.3 数组",[154,52431,52433],{"className":52365,"code":52432,"language":52367,"meta":160,"style":160},"let arr = []\n",[70,52434,52435],{"__ignoreMap":160},[178,52436,52437],{"class":180,"line":181},[178,52438,52432],{"class":319},[19,52440,52441],{},[3269,52442],{"alt":160,"src":52443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,52445,52446],{},[3269,52447],{"alt":160,"src":52448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52450,52452],{"id":52451},"_24-常量","2.4 常量",[19,52454,52455],{},[3269,52456],{"alt":160,"src":52457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,52459,52460],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52462,52464],{"id":52463},"_25-数据类型","2.5 数据类型",[19,52466,52467],{},[3269,52468],{"alt":160,"src":52469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[26,52471,52472,52475],{},[29,52473,52474],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[29,52476,52477],{},"算数运算符：",[19,52479,52480],{},[3269,52481],{"alt":160,"src":52482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[26,52484,52485],{"start":274},[29,52486,52487],{},"数字类型（Number）",[19,52489,52490],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,52492,52493],{},[3269,52494],{"alt":160,"src":52495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[26,52497,52498],{"start":354},[29,52499,52500],{},"字符串类型（string）",[19,52502,52503],{},[3269,52504],{"alt":160,"src":52505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,52507,52508],{},"反引号也是可以使用的",[19,52510,52511],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,52513,52514],{},"例如：document.write(\"我今年\"+age+\"岁\")",[26,52516,52517],{"start":364},[29,52518,52519],{},"模板字符串",[19,52521,52522],{},[3269,52523],{"alt":160,"src":52524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,52526,52527],{},"类似于python的字符串格式化",[26,52529,52530],{"start":740},[29,52531,52532],{},"布尔类型",[19,52534,52535],{},"true 和 false",[26,52537,52538],{"start":746},[29,52539,52540],{},"未定义类型（underfined）",[19,52542,52543],{},"表示没有赋值",[19,52545,52546],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,52548,52549],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[26,52551,52552],{"start":752},[29,52553,52554],{},"null（空类型）",[19,52556,52557],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,52559,52560],{},"赋值了，但是内容为空",[154,52562,52564],{"className":52365,"code":52563,"language":52367,"meta":160,"style":160},"typeof null\n输出的是'object'，是一个对象数据类型\n",[70,52565,52566,52571],{"__ignoreMap":160},[178,52567,52568],{"class":180,"line":181},[178,52569,52570],{"class":319},"typeof null\n",[178,52572,52573],{"class":180,"line":263},[178,52574,52575],{"class":319},"输出的是'object'，是一个对象数据类型\n",[26,52577,52578],{"start":757},[29,52579,52580],{},"控制台检测数据类型",[19,52582,52583],{},[3269,52584],{"alt":160,"src":52585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[26,52587,52588],{"start":763},[29,52589,52590],{},"类型转换",[19,52592,52593],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,52595,52596],{},"转换方式：隐式转换和显示转换",[19,52598,52599],{},"①隐式转换",[2946,52601,52602,52605,52608,52611],{},[29,52603,52604],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[29,52606,52607],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[29,52609,52610],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[29,52612,52613],{},"任何数据和字符串相加结果都是字符串",[19,52615,52616],{},"②显示转换",[19,52618,52619],{},[3269,52620],{"alt":160,"src":52621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,52623,52624],{},[3269,52625],{"alt":160,"src":52626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,52628,52629],{},"在输入的时候要用好隐式转换，简单写起来",[19,52631,52632],{},"let num = +prompt(’请输入数字：‘)",[19,52634,52635],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,52637,52638],{},"console.log(parseInt('12.333px'))",[19,52640,52641],{},"输出为：12",[19,52643,52644],{},"console.log(parseInt('a'a'a12.333px'))",[19,52646,52647],{},"输出：NaN",[14,52649,52651],{"id":52650},"_26-运算符","2.6 运算符",[387,52653,52655],{"id":52654},"_261-赋值运算符","2.6.1 赋值运算符",[19,52657,52658],{},[3269,52659],{"alt":160,"src":52660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[387,52662,52664],{"id":52663},"_262-一元运算符","2.6.2 一元运算符",[19,52666,52667],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,52669,52670],{},[3269,52671],{"alt":160,"src":52672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,52674,52675],{},[3269,52676],{"alt":160,"src":52677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,52679,52680],{},"两者的区别：",[19,52682,52683],{},[3269,52684],{"alt":160,"src":52685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,52687,52688],{},"前置先自加；后置后加，代码执行完之后再加",[387,52690,52692],{"id":52691},"_263-比较运算符","2.6.3 比较运算符",[19,52694,52695],{},[3269,52696],{"alt":160,"src":52697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,52699,52700],{},"比较运算符也有隐式转换",[19,52702,52703],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,52705,52706],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,52708,52709],{},"要使用三等，开发的时候",[19,52711,52712],{},"NaN不等于任何人，包括它自己",[19,52714,52715],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,52717,52718],{},"7\u002F10=0.7",[19,52720,52721],{},"最后：0.5+0.2=0.7",[19,52723,52724],{},"字符串比较，比较的是字符对应的ASCII码",[387,52726,52728],{"id":52727},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,52730,52731],{},[3269,52732],{"alt":160,"src":52733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,52735,52736],{},[3269,52737],{"alt":160,"src":52738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,52740,52741],{},[3269,52742],{"alt":160,"src":52743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,52745,52746],{},"上述题目选D",[19,52748,52749],{},"与真2假1；或真1假2",[387,52751,52753],{"id":52752},"_265-运算符优先级","2.6.5 运算符优先级",[19,52755,52756],{},[3269,52757],{"alt":160,"src":52758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,52760,52761],{},"先算逻辑与，后算逻辑或",[14,52763,52765],{"id":52764},"_27-语句","2.7 语句",[19,52767,52768],{},"表达式：是可以被求值的代码，会有结果给我们",[19,52770,52771],{},"语句：语句是可以被执行的代码，例如prompt()",[19,52773,52774],{},[3269,52775],{"alt":160,"src":52776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,52778,52779],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,52781,52782],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[387,52784,52786],{"id":52785},"_271-分支语句","2.7.1 分支语句",[23756,52788,52790],{"id":52789},"_2711-if分支语句","2.7.1.1 if分支语句",[19,52792,52793],{},"if语句单行简单的话，可以不写{}，写在一行就行",[26,52795,52796],{},[29,52797,52798],{},"单分支语句",[19,52800,52801],{},[3269,52802],{"alt":160,"src":52803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,52805,52806],{},"除了0，所有数字都为真",[154,52808,52810],{"className":52365,"code":52809,"language":52367,"meta":160,"style":160},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[70,52811,52812,52817,52822,52827,52831],{"__ignoreMap":160},[178,52813,52814],{"class":180,"line":181},[178,52815,52816],{"class":319},"if（0) {\n",[178,52818,52819],{"class":180,"line":263},[178,52820,52821],{"class":319},"    let a=1\n",[178,52823,52824],{"class":180,"line":274},[178,52825,52826],{"class":319},"    alert(typeof a)\n",[178,52828,52829],{"class":180,"line":354},[178,52830,3371],{"class":319},[178,52832,52833],{"class":180,"line":364},[178,52834,52835],{"class":319},"不输出，括号为假\n",[26,52837,52838],{"start":263},[29,52839,52840],{},"双分支语句",[19,52842,52843],{},[3269,52844],{"alt":160,"src":52845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[26,52847,52848],{"start":274},[29,52849,52850],{},"多分支语句",[19,52852,52853],{},[3269,52854],{"alt":160,"src":52855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[23756,52857,52859],{"id":52858},"_2712-三元运算符","2.7.1.2 三元运算符",[19,52861,52862],{},[3269,52863],{"alt":160,"src":52864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[23756,52866,52868],{"id":52867},"_2713-switch语句","2.7.1.3 switch语句",[19,52870,52871],{},[3269,52872],{"alt":160,"src":52873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,52875,52876],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[387,52878,52880],{"id":52879},"_272-循环语句","2.7.2 循环语句",[23756,52882,52884],{"id":52883},"_2721-断点演示","2.7.2.1 断点演示",[19,52886,52887],{},[3269,52888],{"alt":160,"src":52889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[23756,52891,52893],{"id":52892},"_2722-while循环","2.7.2.2 while循环",[19,52895,52896],{},[3269,52897],{"alt":160,"src":52898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,52900,52901],{},[3269,52902],{"alt":160,"src":52903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[23756,52905,52907],{"id":52906},"_2723-for循环","2.7.2.3 for循环",[19,52909,52910],{},[3269,52911],{"alt":160,"src":52912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,52914,52915],{},"for(;;) {",[19,52917,2885],{},[19,52919,52920],{},"表示无限循环",[19,52922,52923],{},[3269,52924],{"alt":160,"src":52925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[23756,52927,52929],{"id":52928},"_2724-循环的退出","2.7.2.4 循环的退出",[19,52931,52932],{},[3269,52933],{"alt":160,"src":52934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,52936,52938],{"id":52937},"_28-数组","2.8 数组",[387,52940,52942],{"id":52941},"_281-基础认识","2.8.1 基础认识",[19,52944,52945],{},[3269,52946],{"alt":160,"src":52947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,52949,52950],{},[3269,52951],{"alt":160,"src":52952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,52954,52955],{},[3269,52956],{"alt":160,"src":52957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,52959,52960],{},[3269,52961],{"alt":160,"src":52962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[387,52964,52966],{"id":52965},"_282-操作数组","2.8.2 操作数组",[19,52968,52969],{},[3269,52970],{"alt":160,"src":52971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[26,52973,52974],{},[29,52975,52976],{},"添加元素",[19,52978,52979],{},[3269,52980],{"alt":160,"src":52981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,52983,52984],{},"console.log(arr.push('green'))",[19,52986,52987],{},"输出结果：为新数组的长度",[19,52989,52990],{},[3269,52991],{"alt":160,"src":52992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,52994,52995],{},"push用的非常多，一定要记住",[26,52997,52998],{},[29,52999,53000],{},"删除元素",[19,53002,53003],{},[3269,53004],{"alt":160,"src":53005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,53007,53008],{},[3269,53009],{"alt":160,"src":53010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,53012,53013],{},[3269,53014],{"alt":160,"src":53015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[387,53017,53019],{"id":53018},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[154,53021,53023],{"className":52365,"code":53022,"language":52367,"meta":160,"style":160},"\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",[70,53024,53025,53038,53054,53058,53067,53085,53109,53131,53145,53153,53160,53172,53183,53187,53191,53198,53210,53225,53238,53257,53274,53289,53301,53313,53325,53329,53333,53344,53354,53366,53378,53390,53401,53405,53409,53421,53425,53439,53443,53447,53458,53472,53484,53498,53502,53511,53519,53523,53531,53535,53544,53549,53554,53567,53595,53600,53605,53630,53635,53639,53644,53649,53664,53668,53673,53703,53715,53731,53747,53761,53766,53773,53777,53782,53795,53803,53811,53815],{"__ignoreMap":160},[178,53026,53027,53030,53033,53036],{"class":180,"line":181},[178,53028,53029],{"class":319},"\u003C!",[178,53031,53032],{"class":323},"DOCTYPE",[178,53034,53035],{"class":184}," html",[178,53037,336],{"class":319},[178,53039,53040,53042,53044,53047,53049,53052],{"class":180,"line":263},[178,53041,320],{"class":319},[178,53043,52367],{"class":323},[178,53045,53046],{"class":184}," lang",[178,53048,330],{"class":319},[178,53050,53051],{"class":188},"\"en\"",[178,53053,336],{"class":319},[178,53055,53056],{"class":180,"line":274},[178,53057,722],{"emptyLinePlaceholder":721},[178,53059,53060,53062,53065],{"class":180,"line":354},[178,53061,320],{"class":319},[178,53063,53064],{"class":323},"head",[178,53066,336],{"class":319},[178,53068,53069,53072,53075,53078,53080,53083],{"class":180,"line":364},[178,53070,53071],{"class":319},"    \u003C",[178,53073,53074],{"class":323},"meta",[178,53076,53077],{"class":184}," charset",[178,53079,330],{"class":319},[178,53081,53082],{"class":188},"\"UTF-8\"",[178,53084,336],{"class":319},[178,53086,53087,53089,53091,53094,53096,53099,53102,53104,53107],{"class":180,"line":740},[178,53088,53071],{"class":319},[178,53090,53074],{"class":323},[178,53092,53093],{"class":184}," http-equiv",[178,53095,330],{"class":319},[178,53097,53098],{"class":188},"\"X-UA-Compatible\"",[178,53100,53101],{"class":184}," content",[178,53103,330],{"class":319},[178,53105,53106],{"class":188},"\"IE=edge\"",[178,53108,336],{"class":319},[178,53110,53111,53113,53115,53117,53119,53122,53124,53126,53129],{"class":180,"line":746},[178,53112,53071],{"class":319},[178,53114,53074],{"class":323},[178,53116,426],{"class":184},[178,53118,330],{"class":319},[178,53120,53121],{"class":188},"\"viewport\"",[178,53123,53101],{"class":184},[178,53125,330],{"class":319},[178,53127,53128],{"class":188},"\"width=device-width, initial-scale=1.0\"",[178,53130,336],{"class":319},[178,53132,53133,53135,53138,53141,53143],{"class":180,"line":752},[178,53134,53071],{"class":319},[178,53136,53137],{"class":323},"title",[178,53139,53140],{"class":319},">Document\u003C\u002F",[178,53142,53137],{"class":323},[178,53144,336],{"class":319},[178,53146,53147,53149,53151],{"class":180,"line":757},[178,53148,53071],{"class":319},[178,53150,1853],{"class":323},[178,53152,336],{"class":319},[178,53154,53155,53158],{"class":180,"line":763},[178,53156,53157],{"class":323},"        *",[178,53159,17330],{"class":319},[178,53161,53162,53165,53168,53170],{"class":180,"line":769},[178,53163,53164],{"class":195},"            margin",[178,53166,53167],{"class":319},": ",[178,53169,2133],{"class":195},[178,53171,3100],{"class":319},[178,53173,53174,53177,53179,53181],{"class":180,"line":774},[178,53175,53176],{"class":195},"            padding",[178,53178,53167],{"class":319},[178,53180,2133],{"class":195},[178,53182,3100],{"class":319},[178,53184,53185],{"class":180,"line":780},[178,53186,4312],{"class":319},[178,53188,53189],{"class":180,"line":786},[178,53190,722],{"emptyLinePlaceholder":721},[178,53192,53193,53196],{"class":180,"line":792},[178,53194,53195],{"class":184},"        .box",[178,53197,17330],{"class":319},[178,53199,53200,53203,53205,53208],{"class":180,"line":798},[178,53201,53202],{"class":195},"            display",[178,53204,53167],{"class":319},[178,53206,53207],{"class":195},"flex",[178,53209,3100],{"class":319},[178,53211,53212,53215,53217,53220,53223],{"class":180,"line":804},[178,53213,53214],{"class":195},"            width",[178,53216,53167],{"class":319},[178,53218,53219],{"class":195},"700",[178,53221,53222],{"class":699},"px",[178,53224,3100],{"class":319},[178,53226,53227,53230,53232,53234,53236],{"class":180,"line":810},[178,53228,53229],{"class":195},"            height",[178,53231,53167],{"class":319},[178,53233,5745],{"class":195},[178,53235,53222],{"class":699},[178,53237,3100],{"class":319},[178,53239,53240,53243,53245,53247,53249,53252,53255],{"class":180,"line":816},[178,53241,53242],{"class":195},"            border-left",[178,53244,53167],{"class":319},[178,53246,1665],{"class":195},[178,53248,53222],{"class":699},[178,53250,53251],{"class":195}," solid",[178,53253,53254],{"class":195}," pink",[178,53256,3100],{"class":319},[178,53258,53259,53262,53264,53266,53268,53270,53272],{"class":180,"line":822},[178,53260,53261],{"class":195},"            border-bottom",[178,53263,53167],{"class":319},[178,53265,1665],{"class":195},[178,53267,53222],{"class":699},[178,53269,53251],{"class":195},[178,53271,53254],{"class":195},[178,53273,3100],{"class":319},[178,53275,53276,53278,53280,53282,53284,53287],{"class":180,"line":827},[178,53277,53164],{"class":195},[178,53279,53167],{"class":319},[178,53281,2596],{"class":195},[178,53283,53222],{"class":699},[178,53285,53286],{"class":195}," auto",[178,53288,3100],{"class":319},[178,53290,53291,53294,53296,53299],{"class":180,"line":832},[178,53292,53293],{"class":195},"            justify-content",[178,53295,53167],{"class":319},[178,53297,53298],{"class":195},"space-around",[178,53300,3100],{"class":319},[178,53302,53303,53306,53308,53311],{"class":180,"line":850},[178,53304,53305],{"class":195},"            align-items",[178,53307,53167],{"class":319},[178,53309,53310],{"class":195},"flex-end",[178,53312,3100],{"class":319},[178,53314,53315,53318,53320,53323],{"class":180,"line":866},[178,53316,53317],{"class":195},"            text-align",[178,53319,53167],{"class":319},[178,53321,53322],{"class":195},"center",[178,53324,3100],{"class":319},[178,53326,53327],{"class":180,"line":877},[178,53328,4312],{"class":319},[178,53330,53331],{"class":180,"line":882},[178,53332,722],{"emptyLinePlaceholder":721},[178,53334,53335,53337,53339,53342],{"class":180,"line":898},[178,53336,53195],{"class":184},[178,53338,2899],{"class":699},[178,53340,53341],{"class":323},"div",[178,53343,17330],{"class":319},[178,53345,53346,53348,53350,53352],{"class":180,"line":914},[178,53347,53202],{"class":195},[178,53349,53167],{"class":319},[178,53351,53207],{"class":195},[178,53353,3100],{"class":319},[178,53355,53356,53358,53360,53362,53364],{"class":180,"line":919},[178,53357,53214],{"class":195},[178,53359,53167],{"class":319},[178,53361,2596],{"class":195},[178,53363,53222],{"class":699},[178,53365,3100],{"class":319},[178,53367,53368,53371,53373,53376],{"class":180,"line":935},[178,53369,53370],{"class":195},"            background-color",[178,53372,53167],{"class":319},[178,53374,53375],{"class":195},"pink",[178,53377,3100],{"class":319},[178,53379,53380,53383,53385,53388],{"class":180,"line":952},[178,53381,53382],{"class":195},"            flex-direction",[178,53384,53167],{"class":319},[178,53386,53387],{"class":195},"column",[178,53389,3100],{"class":319},[178,53391,53392,53394,53396,53399],{"class":180,"line":966},[178,53393,53293],{"class":195},[178,53395,53167],{"class":319},[178,53397,53398],{"class":195},"space-between",[178,53400,3100],{"class":319},[178,53402,53403],{"class":180,"line":980},[178,53404,4312],{"class":319},[178,53406,53407],{"class":180,"line":985},[178,53408,722],{"emptyLinePlaceholder":721},[178,53410,53411,53413,53416,53419],{"class":180,"line":1008},[178,53412,53195],{"class":184},[178,53414,53415],{"class":323}," div",[178,53417,53418],{"class":323}," span",[178,53420,17330],{"class":319},[178,53422,53423],{"class":180,"line":1014},[178,53424,722],{"emptyLinePlaceholder":721},[178,53426,53427,53430,53432,53435,53437],{"class":180,"line":1019},[178,53428,53429],{"class":195},"            margin-top",[178,53431,53167],{"class":319},[178,53433,53434],{"class":195},"-20",[178,53436,53222],{"class":699},[178,53438,3100],{"class":319},[178,53440,53441],{"class":180,"line":1033},[178,53442,4312],{"class":319},[178,53444,53445],{"class":180,"line":1046},[178,53446,722],{"emptyLinePlaceholder":721},[178,53448,53449,53451,53453,53456],{"class":180,"line":1059},[178,53450,53195],{"class":184},[178,53452,53415],{"class":323},[178,53454,53455],{"class":323}," h4",[178,53457,17330],{"class":319},[178,53459,53460,53463,53465,53468,53470],{"class":180,"line":1072},[178,53461,53462],{"class":195},"            margin-bottom",[178,53464,53167],{"class":319},[178,53466,53467],{"class":195},"-35",[178,53469,53222],{"class":699},[178,53471,3100],{"class":319},[178,53473,53474,53476,53478,53480,53482],{"class":180,"line":1077},[178,53475,53214],{"class":195},[178,53477,53167],{"class":319},[178,53479,2296],{"class":195},[178,53481,53222],{"class":699},[178,53483,3100],{"class":319},[178,53485,53486,53489,53491,53494,53496],{"class":180,"line":1082},[178,53487,53488],{"class":195},"            margin-left",[178,53490,53167],{"class":319},[178,53492,53493],{"class":195},"-10",[178,53495,53222],{"class":699},[178,53497,3100],{"class":319},[178,53499,53500],{"class":180,"line":1099},[178,53501,4312],{"class":319},[178,53503,53504,53507,53509],{"class":180,"line":9806},[178,53505,53506],{"class":319},"    \u003C\u002F",[178,53508,1853],{"class":323},[178,53510,336],{"class":319},[178,53512,53513,53515,53517],{"class":180,"line":9818},[178,53514,367],{"class":319},[178,53516,53064],{"class":323},[178,53518,336],{"class":319},[178,53520,53521],{"class":180,"line":11477},[178,53522,722],{"emptyLinePlaceholder":721},[178,53524,53525,53527,53529],{"class":180,"line":11502},[178,53526,320],{"class":319},[178,53528,376],{"class":323},[178,53530,336],{"class":319},[178,53532,53533],{"class":180,"line":11525},[178,53534,722],{"emptyLinePlaceholder":721},[178,53536,53537,53539,53542],{"class":180,"line":11549},[178,53538,53071],{"class":319},[178,53540,53541],{"class":323},"script",[178,53543,336],{"class":319},[178,53545,53546],{"class":180,"line":11554},[178,53547,53548],{"class":2008},"        \u002F\u002F 1. 四次弹框效果\n",[178,53550,53551],{"class":180,"line":11559},[178,53552,53553],{"class":2008},"        \u002F\u002F 声明一个新的数组\n",[178,53555,53556,53559,53562,53564],{"class":180,"line":11564},[178,53557,53558],{"class":699},"        let",[178,53560,53561],{"class":319}," arr ",[178,53563,330],{"class":699},[178,53565,53566],{"class":319}," []\n",[178,53568,53569,53571,53573,53576,53578,53580,53582,53584,53586,53589,53591,53593],{"class":180,"line":11573},[178,53570,5176],{"class":699},[178,53572,3457],{"class":319},[178,53574,53575],{"class":699},"let",[178,53577,11199],{"class":319},[178,53579,330],{"class":699},[178,53581,26870],{"class":195},[178,53583,11206],{"class":319},[178,53585,3394],{"class":699},[178,53587,53588],{"class":195}," 4",[178,53590,4987],{"class":319},[178,53592,4076],{"class":699},[178,53594,14203],{"class":319},[178,53596,53597],{"class":180,"line":11578},[178,53598,53599],{"class":2008},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[178,53601,53602],{"class":180,"line":11584},[178,53603,53604],{"class":2008},"            \u002F\u002F arr.push(num)\n",[178,53606,53607,53610,53613,53615,53618,53620,53623,53625,53628],{"class":180,"line":11605},[178,53608,53609],{"class":319},"            arr.",[178,53611,53612],{"class":184},"push",[178,53614,944],{"class":319},[178,53616,53617],{"class":184},"prompt",[178,53619,944],{"class":319},[178,53621,53622],{"class":188},"`请输入第${",[178,53624,2381],{"class":319},[178,53626,53627],{"class":188},"}季度的数据:`",[178,53629,32239],{"class":319},[178,53631,53632],{"class":180,"line":11611},[178,53633,53634],{"class":2008},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[178,53636,53637],{"class":180,"line":11625},[178,53638,4312],{"class":319},[178,53640,53641],{"class":180,"line":11631},[178,53642,53643],{"class":2008},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[178,53645,53646],{"class":180,"line":11658},[178,53647,53648],{"class":2008},"        \u002F\u002F 盒子开头\n",[178,53650,53651,53654,53657,53659,53662],{"class":180,"line":11667},[178,53652,53653],{"class":319},"        document.",[178,53655,53656],{"class":184},"write",[178,53658,944],{"class":319},[178,53660,53661],{"class":188},"` \u003Cdiv class=\"box\">`",[178,53663,863],{"class":319},[178,53665,53666],{"class":180,"line":11673},[178,53667,722],{"emptyLinePlaceholder":721},[178,53669,53670],{"class":180,"line":11681},[178,53671,53672],{"class":2008},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[178,53674,53675,53677,53679,53681,53683,53685,53687,53689,53691,53694,53697,53699,53701],{"class":180,"line":11686},[178,53676,5176],{"class":699},[178,53678,3457],{"class":319},[178,53680,53575],{"class":699},[178,53682,11199],{"class":319},[178,53684,330],{"class":699},[178,53686,930],{"class":195},[178,53688,11206],{"class":319},[178,53690,320],{"class":699},[178,53692,53693],{"class":319}," arr.",[178,53695,53696],{"class":195},"length",[178,53698,4987],{"class":319},[178,53700,4076],{"class":699},[178,53702,14203],{"class":319},[178,53704,53705,53708,53710,53712],{"class":180,"line":18362},[178,53706,53707],{"class":319},"            document.",[178,53709,53656],{"class":184},[178,53711,944],{"class":319},[178,53713,53714],{"class":188},"`\n",[178,53716,53717,53720,53722,53724,53726,53728],{"class":180,"line":18368},[178,53718,53719],{"class":188},"              \u003Cdiv style=\"height: ${",[178,53721,5652],{"class":319},[178,53723,2830],{"class":188},[178,53725,2381],{"class":319},[178,53727,2879],{"class":188},[178,53729,53730],{"class":188},"}px;\">\n",[178,53732,53733,53736,53738,53740,53742,53744],{"class":180,"line":18391},[178,53734,53735],{"class":188},"                \u003Cspan>${",[178,53737,5652],{"class":319},[178,53739,2830],{"class":188},[178,53741,2381],{"class":319},[178,53743,2879],{"class":188},[178,53745,53746],{"class":188},"}\u003C\u002Fspan>\n",[178,53748,53749,53752,53754,53756,53758],{"class":180,"line":18397},[178,53750,53751],{"class":188},"                \u003Ch4>第${",[178,53753,2381],{"class":319},[178,53755,47298],{"class":699},[178,53757,26870],{"class":195},[178,53759,53760],{"class":188},"}季度\u003C\u002Fh4>\n",[178,53762,53763],{"class":180,"line":18420},[178,53764,53765],{"class":188},"              \u003C\u002Fdiv>          \n",[178,53767,53768,53771],{"class":180,"line":18434},[178,53769,53770],{"class":188},"            `",[178,53772,863],{"class":319},[178,53774,53775],{"class":180,"line":18454},[178,53776,4312],{"class":319},[178,53778,53779],{"class":180,"line":18460},[178,53780,53781],{"class":2008},"        \u002F\u002F 盒子结尾\n",[178,53783,53784,53786,53788,53790,53793],{"class":180,"line":18471},[178,53785,53653],{"class":319},[178,53787,53656],{"class":184},[178,53789,944],{"class":319},[178,53791,53792],{"class":188},"` \u003C\u002Fdiv>`",[178,53794,863],{"class":319},[178,53796,53797,53799,53801],{"class":180,"line":18494},[178,53798,53506],{"class":319},[178,53800,53541],{"class":323},[178,53802,336],{"class":319},[178,53804,53805,53807,53809],{"class":180,"line":18516},[178,53806,367],{"class":319},[178,53808,376],{"class":323},[178,53810,336],{"class":319},[178,53812,53813],{"class":180,"line":18521},[178,53814,722],{"emptyLinePlaceholder":721},[178,53816,53817,53819,53821],{"class":180,"line":18527},[178,53818,367],{"class":319},[178,53820,52367],{"class":323},[178,53822,336],{"class":319},[387,53824,53826],{"id":53825},"_284-冒泡排序","2.8.4 冒泡排序",[154,53828,53830],{"className":52365,"code":53829,"language":52367,"meta":160,"style":160},"\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",[70,53831,53832,53842,53856,53860,53868,53882,53902,53914,53922,53926,53934,53942,53974,54007,54044,54049,54068,54073,54086,54101,54117,54121,54126,54130,54140,54148,54156,54160],{"__ignoreMap":160},[178,53833,53834,53836,53838,53840],{"class":180,"line":181},[178,53835,53029],{"class":319},[178,53837,53032],{"class":323},[178,53839,53035],{"class":184},[178,53841,336],{"class":319},[178,53843,53844,53846,53848,53850,53852,53854],{"class":180,"line":263},[178,53845,320],{"class":319},[178,53847,52367],{"class":323},[178,53849,53046],{"class":184},[178,53851,330],{"class":319},[178,53853,53051],{"class":188},[178,53855,336],{"class":319},[178,53857,53858],{"class":180,"line":274},[178,53859,722],{"emptyLinePlaceholder":721},[178,53861,53862,53864,53866],{"class":180,"line":354},[178,53863,320],{"class":319},[178,53865,53064],{"class":323},[178,53867,336],{"class":319},[178,53869,53870,53872,53874,53876,53878,53880],{"class":180,"line":364},[178,53871,341],{"class":319},[178,53873,53074],{"class":323},[178,53875,53077],{"class":184},[178,53877,330],{"class":319},[178,53879,53082],{"class":188},[178,53881,336],{"class":319},[178,53883,53884,53886,53888,53890,53892,53894,53896,53898,53900],{"class":180,"line":740},[178,53885,341],{"class":319},[178,53887,53074],{"class":323},[178,53889,426],{"class":184},[178,53891,330],{"class":319},[178,53893,53121],{"class":188},[178,53895,53101],{"class":184},[178,53897,330],{"class":319},[178,53899,53128],{"class":188},[178,53901,336],{"class":319},[178,53903,53904,53906,53908,53910,53912],{"class":180,"line":746},[178,53905,341],{"class":319},[178,53907,53137],{"class":323},[178,53909,53140],{"class":319},[178,53911,53137],{"class":323},[178,53913,336],{"class":319},[178,53915,53916,53918,53920],{"class":180,"line":752},[178,53917,367],{"class":319},[178,53919,53064],{"class":323},[178,53921,336],{"class":319},[178,53923,53924],{"class":180,"line":757},[178,53925,722],{"emptyLinePlaceholder":721},[178,53927,53928,53930,53932],{"class":180,"line":763},[178,53929,320],{"class":319},[178,53931,376],{"class":323},[178,53933,336],{"class":319},[178,53935,53936,53938,53940],{"class":180,"line":769},[178,53937,341],{"class":319},[178,53939,53541],{"class":323},[178,53941,336],{"class":319},[178,53943,53944,53947,53949,53951,53954,53956,53958,53960,53962,53964,53966,53968,53970,53972],{"class":180,"line":774},[178,53945,53946],{"class":699},"    let",[178,53948,53561],{"class":319},[178,53950,330],{"class":699},[178,53952,53953],{"class":319}," [",[178,53955,2259],{"class":195},[178,53957,14196],{"class":319},[178,53959,2233],{"class":195},[178,53961,14196],{"class":319},[178,53963,2021],{"class":195},[178,53965,14196],{"class":319},[178,53967,1669],{"class":195},[178,53969,14196],{"class":319},[178,53971,1665],{"class":195},[178,53973,34978],{"class":319},[178,53975,53976,53978,53980,53982,53984,53986,53988,53990,53992,53994,53996,53999,54001,54003,54005],{"class":180,"line":780},[178,53977,988],{"class":699},[178,53979,3457],{"class":319},[178,53981,53575],{"class":699},[178,53983,11199],{"class":319},[178,53985,330],{"class":699},[178,53987,930],{"class":195},[178,53989,11206],{"class":319},[178,53991,320],{"class":699},[178,53993,53693],{"class":319},[178,53995,53696],{"class":195},[178,53997,53998],{"class":699}," -",[178,54000,26870],{"class":195},[178,54002,4987],{"class":319},[178,54004,4076],{"class":699},[178,54006,14203],{"class":319},[178,54008,54009,54012,54014,54016,54018,54020,54022,54024,54026,54028,54030,54032,54034,54036,54038,54040,54042],{"class":180,"line":786},[178,54010,54011],{"class":699},"      for",[178,54013,3457],{"class":319},[178,54015,53575],{"class":699},[178,54017,11261],{"class":319},[178,54019,330],{"class":699},[178,54021,930],{"class":195},[178,54023,11268],{"class":319},[178,54025,320],{"class":699},[178,54027,53693],{"class":319},[178,54029,53696],{"class":195},[178,54031,53998],{"class":699},[178,54033,11199],{"class":319},[178,54035,2472],{"class":699},[178,54037,26870],{"class":195},[178,54039,11275],{"class":319},[178,54041,4076],{"class":699},[178,54043,14203],{"class":319},[178,54045,54046],{"class":180,"line":792},[178,54047,54048],{"class":2008},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[178,54050,54051,54053,54056,54058,54061,54063,54065],{"class":180,"line":798},[178,54052,4280],{"class":699},[178,54054,54055],{"class":319}," (arr[j] ",[178,54057,2899],{"class":699},[178,54059,54060],{"class":319}," arr[j ",[178,54062,2421],{"class":699},[178,54064,26870],{"class":195},[178,54066,54067],{"class":319},"]) {\n",[178,54069,54070],{"class":180,"line":804},[178,54071,54072],{"class":2008},"          \u002F\u002F 交换两个变量\n",[178,54074,54075,54078,54081,54083],{"class":180,"line":810},[178,54076,54077],{"class":699},"          let",[178,54079,54080],{"class":319}," tmp ",[178,54082,330],{"class":699},[178,54084,54085],{"class":319}," arr[j]\n",[178,54087,54088,54091,54093,54095,54097,54099],{"class":180,"line":816},[178,54089,54090],{"class":319},"          arr[j] ",[178,54092,330],{"class":699},[178,54094,54060],{"class":319},[178,54096,2421],{"class":699},[178,54098,26870],{"class":195},[178,54100,34978],{"class":319},[178,54102,54103,54106,54108,54110,54112,54114],{"class":180,"line":822},[178,54104,54105],{"class":319},"          arr[j ",[178,54107,2421],{"class":699},[178,54109,26870],{"class":195},[178,54111,6214],{"class":319},[178,54113,330],{"class":699},[178,54115,54116],{"class":319}," tmp\n",[178,54118,54119],{"class":180,"line":827},[178,54120,4312],{"class":319},[178,54122,54123],{"class":180,"line":832},[178,54124,54125],{"class":319},"      }\n",[178,54127,54128],{"class":180,"line":850},[178,54129,3971],{"class":319},[178,54131,54132,54135,54137],{"class":180,"line":866},[178,54133,54134],{"class":319},"    document.",[178,54136,53656],{"class":184},[178,54138,54139],{"class":319},"(arr)\n",[178,54141,54142,54144,54146],{"class":180,"line":877},[178,54143,357],{"class":319},[178,54145,53541],{"class":323},[178,54147,336],{"class":319},[178,54149,54150,54152,54154],{"class":180,"line":882},[178,54151,367],{"class":319},[178,54153,376],{"class":323},[178,54155,336],{"class":319},[178,54157,54158],{"class":180,"line":898},[178,54159,722],{"emptyLinePlaceholder":721},[178,54161,54162,54164,54166],{"class":180,"line":914},[178,54163,367],{"class":319},[178,54165,52367],{"class":323},[178,54167,336],{"class":319},[19,54169,54170],{},[3269,54171],{"alt":160,"src":54172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,54174,54175],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,54177,54178],{},"let arr = [4, 2, 5, 1, 3]",[19,54180,54181],{},"\u002F\u002F 1.升序排列写法",[19,54183,54184],{},"arr.sort(function (a, b) {",[19,54186,54187],{},"return a - b",[19,54189,54190],{},"})",[19,54192,54193],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,54195,54196],{},"\u002F\u002F 降序排列写法",[19,54198,54184],{},[19,54200,54201],{},"return b - a",[19,54203,54190],{},[19,54205,54206],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54208,54210],{"id":54209},"_29-函数","2.9 函数",[19,54212,54213],{},[3269,54214],{"alt":160,"src":54215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,54217,54218],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,54220,54221],{},"函数的声明用function",[19,54223,54224],{},"函数里边可以嵌套函数",[387,54226,54228],{"id":54227},"_291-函数传参","2.9.1 函数传参",[19,54230,54231],{},[3269,54232],{"alt":160,"src":54233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,54235,54236],{},[3269,54237],{"alt":160,"src":54238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[2946,54240,54241,54244,54247,54250,54253,54256],{},[29,54242,54243],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[29,54245,54246],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[29,54248,54249],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[29,54251,54252],{},"开发中尽量保持形参和实参个数一致",[29,54254,54255],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[29,54257,54258],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,54260,54261],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[387,54263,54265],{"id":54264},"_292-函数的返回值","2.9.2 函数的返回值",[19,54267,54268],{},[3269,54269],{"alt":160,"src":54270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,54272,54273],{},[3269,54274],{"alt":160,"src":54275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[2946,54277,54278,54281,54284,54287,54290],{},[29,54279,54280],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[29,54282,54283],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[29,54285,54286],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[29,54288,54289],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[29,54291,54292],{},"断点调试:进入函数内部看执行过程F11",[387,54294,54296],{"id":54295},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[154,54298,54300],{"className":52365,"code":54299,"language":52367,"meta":160,"style":160},"    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",[70,54301,54302,54307,54312,54316,54321],{"__ignoreMap":160},[178,54303,54304],{"class":180,"line":181},[178,54305,54306],{"class":319},"    function fn(a, b) {\n",[178,54308,54309],{"class":180,"line":263},[178,54310,54311],{"class":319},"      console.log(a + b);\n",[178,54313,54314],{"class":180,"line":274},[178,54315,3971],{"class":319},[178,54317,54318],{"class":180,"line":354},[178,54319,54320],{"class":319},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[178,54322,54323],{"class":180,"line":364},[178,54324,54325],{"class":319},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[387,54327,54329],{"id":54328},"_294-作用域","2.9.4 作用域",[2946,54331,54332,54338,54343,54346,54349],{},[29,54333,54334,54335],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[2093,54336,54337],{},"作用域",[29,54339,54340],{},[2093,54341,54342],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[29,54344,54345],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[29,54347,54348],{},"函数内部可以直接所使用全局变量",[29,54350,54351],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,54353,528],{},[154,54355,54357],{"className":52365,"code":54356,"language":52367,"meta":160,"style":160},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[70,54358,54359,54364,54369,54373,54378,54383,54388],{"__ignoreMap":160},[178,54360,54361],{"class":180,"line":181},[178,54362,54363],{"class":319},"    function fun() {\n",[178,54365,54366],{"class":180,"line":263},[178,54367,54368],{"class":319},"      num = 10\n",[178,54370,54371],{"class":180,"line":274},[178,54372,3971],{"class":319},[178,54374,54375],{"class":180,"line":354},[178,54376,54377],{"class":319},"    fun()\n",[178,54379,54380],{"class":180,"line":364},[178,54381,54382],{"class":319},"    console.log(num)\n",[178,54384,54385],{"class":180,"line":740},[178,54386,54387],{"class":319},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[178,54389,54390],{"class":180,"line":746},[178,54391,54392],{"class":319},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[2946,54394,54395,54398],{},[29,54396,54397],{},"函数内部的形参可以看做是局部变量",[29,54399,54400],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,54402,54403,54404],{},"变量访问原则： ",[2093,54405,54406],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[387,54408,54410],{"id":54409},"_295-匿名函数","2.9.5 匿名函数",[19,54412,54413],{},"函数可以分为具名函数和匿名函数",[19,54415,54416],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[26,54418,54419],{},[29,54420,54421],{},"函数表达式",[19,54423,54424],{},[3269,54425],{"alt":160,"src":54426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,54428,54429],{},"里边也可以写参数",[19,54431,54432],{},"具名函数调用位置可以随意调整；",[19,54434,54435],{},"匿名函数函数表达式形式只能在声明后才可以使用",[26,54437,54438],{"start":263},[29,54439,54440],{},"立即执行函数",[19,54442,54443],{},[3269,54444],{"alt":160,"src":54445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,54447,54448],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,54450,54451],{},"写法：两个小括号，然后在第一个小括号中写function",[19,54453,54454],{},"(function () {})();",[19,54456,54457],{},"不要落下最后的;",[19,54459,54460],{},"立即执行函数必须要加;",[19,54462,54463],{},"分号写前写后都没问题",[19,54465,54466],{},"写前：",[19,54468,54469],{},"(function() {})()",[19,54471,54472],{},";(function () {})();",[19,54474,54475],{},"写后:",[19,54477,54478],{},"(function() {})();",[19,54480,54454],{},[19,54482,54483],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,54485,54486],{},"还有一种写法：",[19,54488,54489],{},"(function(){}());",[19,54491,54492],{},"或者:",[19,54494,54495],{},"!function(){}();",[19,54497,54498],{},"立即执行函数有时候也是可以加名字的：",[19,54500,54501],{},"(function flexible(window,document) {}(window,document));",[19,54503,54504],{},"省一些调用方法",[387,54506,54508],{"id":54507},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,54510,54511],{},[3269,54512],{"alt":160,"src":54513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,54515,54516],{},"这样就不用非得给x,y初始化了",[19,54518,54519],{},[3269,54520],{"alt":160,"src":54521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,54523,54524],{},"代码执行时先看左边",[19,54526,54527],{},"例如：console.log(false && 3+5)",[19,54529,54530],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,54532,54533],{},"&&都是真时，就返回最后一个真值",[19,54535,54536],{},"console.log(11 && 22)",[19,54538,54539],{},"输出22",[19,54541,54542],{},"逻辑与：遇真则真",[19,54544,528],{},[19,54546,54547],{},"let age=1",[19,54549,54550],{},"console.log(11 || age++)",[19,54552,54553],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,54555,54556],{},"console.log(11 || 22)",[19,54558,54559],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,54561,54562],{},"||如果都是假的话，就取最后一个假的值了",[387,54564,54566],{"id":54565},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,54568,54569],{},"显示转换：",[19,54571,54572,54575,54576],{},[2093,54573,54574],{},"记忆","： ",[2093,54577,54578],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,54580,54581],{},"空字符串为假，其他字符串全为真",[19,54583,54584],{},[3269,54585],{"alt":160,"src":54586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,54588,54589],{},"隐式转换：",[19,54591,54592],{},[3269,54593],{"alt":160,"src":54594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,54596,54597],{},"隐式转换:",[19,54599,54600],{},"null+3=3",[19,54602,54603],{},"undefined+3=NaN",[19,54605,54606],{},"null==undefined 输出true,他两个都当0看",[19,54608,54609],{},"null===undefined 输出false",[19,54611,54612],{},"undefined做任何操作都是NaN",[19,54614,54615],{},"NaN不等于NaN，NaN表示计算错误",[14,54617,54619],{"id":54618},"_210-对象","2.10 对象",[387,54621,54623],{"id":54622},"_2101-对象的介绍","2.10.1 对象的介绍",[19,54625,54626],{},"对象也是一种数据类型，里边的数据是无序的",[19,54628,54629],{},"对象由属性和方法组成",[19,54631,54632],{},[3269,54633],{"alt":160,"src":54634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,54636,54637],{},[3269,54638],{"alt":160,"src":54639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,54641,54642],{},[3269,54643],{"alt":160,"src":54644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[387,54646,54648],{"id":54647},"_2102-对象属性","2.10.2 对象属性",[19,54650,54651],{},[3269,54652],{"alt":160,"src":54653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[26,54655,54656],{},[29,54657,54658],{},"查询对象",[19,54660,54661],{},"对象名.属性 goods.uname",[19,54663,54664],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,54666,54667],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,54669,54670],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,54672,54673],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[26,54675,54676],{"start":263},[29,54677,54678],{},"重新赋值",[19,54680,54681],{},"对象名.属性=新值",[26,54683,54684],{"start":274},[29,54685,54686],{},"增加新数据",[19,54688,54681],{},[26,54690,54691],{"start":354},[29,54692,54693],{},"删除对象中的属性",[19,54695,54696],{},"delete 对象名.属性",[387,54698,54700],{"id":54699},"_2103-对象方法","2.10.3 对象方法",[19,54702,54703],{},[3269,54704],{"alt":160,"src":54705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,54707,54708],{},"后边跟的是匿名函数",[19,54710,54711],{},"对象外面的叫函数；对象内部的叫方法",[19,54713,54714],{},[3269,54715],{"alt":160,"src":54716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[387,54718,54720],{"id":54719},"_2104-遍历对象","2.10.4 遍历对象",[19,54722,54723],{},"理解为加括号的python字典遍历",[19,54725,54726],{},[3269,54727],{"alt":160,"src":54728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,54730,54731],{},"k是字符串类型",[19,54733,54734],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[154,54736,54738],{"className":52365,"code":54737,"language":52367,"meta":160,"style":160},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[70,54739,54740,54745,54750,54755,54760],{"__ignoreMap":160},[178,54741,54742],{"class":180,"line":181},[178,54743,54744],{"class":319},"   let arr = [1, 2, 3]\n",[178,54746,54747],{"class":180,"line":263},[178,54748,54749],{"class":319},"    for (let k in arr) {\n",[178,54751,54752],{"class":180,"line":274},[178,54753,54754],{"class":319},"      console.log(k)\n",[178,54756,54757],{"class":180,"line":354},[178,54758,54759],{"class":319},"      console.log(arr[k])\n",[178,54761,54762],{"class":180,"line":364},[178,54763,3971],{"class":319},[19,54765,54766],{},[3269,54767],{"alt":160,"src":54768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,54770,54771],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,54773,54774],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,54776,54777],{},"for in 得到的k是属性名",[53541,54779,54780],{},"\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,54782,54783],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[387,54785,54787],{"id":54786},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,54789,54790],{},"数组中放对象信息",[154,54792,54794],{"className":310,"code":54793,"language":312,"meta":160,"style":160},"\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",[70,54795,54796,54804,54809,54814,54819,54824,54829,54834,54839,54844,54849,54854,54859,54863,54867],{"__ignoreMap":160},[178,54797,54798,54800,54802],{"class":180,"line":181},[178,54799,320],{"class":319},[178,54801,53541],{"class":323},[178,54803,336],{"class":319},[178,54805,54806],{"class":180,"line":263},[178,54807,54808],{"class":319},"    let students = [\n",[178,54810,54811],{"class":180,"line":274},[178,54812,54813],{"class":319},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[178,54815,54816],{"class":180,"line":354},[178,54817,54818],{"class":319},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[178,54820,54821],{"class":180,"line":364},[178,54822,54823],{"class":319},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[178,54825,54826],{"class":180,"line":740},[178,54827,54828],{"class":319},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[178,54830,54831],{"class":180,"line":746},[178,54832,54833],{"class":319},"    ]\n",[178,54835,54836],{"class":180,"line":752},[178,54837,54838],{"class":319},"    for (let i = 0; i \u003C students.length; i++) {\n",[178,54840,54841],{"class":180,"line":757},[178,54842,54843],{"class":319},"      for (let k in students[i]) {\n",[178,54845,54846],{"class":180,"line":763},[178,54847,54848],{"class":319},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[178,54850,54851],{"class":180,"line":769},[178,54852,54853],{"class":319},"        \u002F\u002F输出每个人的名字：\n",[178,54855,54856],{"class":180,"line":774},[178,54857,54858],{"class":319},"        \u002F\u002Fconsole.log(students[i].name)\n",[178,54860,54861],{"class":180,"line":780},[178,54862,54125],{"class":319},[178,54864,54865],{"class":180,"line":786},[178,54866,3971],{"class":319},[178,54868,54869,54871,54873],{"class":180,"line":792},[178,54870,357],{"class":319},[178,54872,53541],{"class":323},[178,54874,336],{"class":319},[387,54876,54878],{"id":54877},"_2106-内置对象","2.10.6 内置对象",[19,54880,54881],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[26,54883,54884],{},[29,54885,54886],{},"数学对象Math",[19,54888,54889],{},[3269,54890],{"alt":160,"src":54891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,54893,54894],{},[2178,54895,54898],{"href":54896,"rel":54897},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[25619],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,54900,54901],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,54903,54904],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,54906,54907],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,54909,54910],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,54912,54913],{},"null属于对象数据类型",[26,54915,54916],{"start":263},[29,54917,54918],{},"生成任意范围随机数",[19,54920,54921],{},[3269,54922],{"alt":160,"src":54923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,54925,54926],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,54928,54929],{},"乘以几就取不到几",[19,54931,54932],{},"取数组中的随机元素：",[19,54934,54935],{},"let arr = ['red', 'green', 'blue']",[19,54937,54938],{},"let random = Math.floor(Math.random() * arr.length)",[19,54940,54941],{},"console.log(arr[random])",[19,54943,54944],{},"这个函数得到的是全闭区间",[19,54946,54947],{},"function getRandom(N, M) {",[19,54949,54950],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,54952,2885],{},[19,54954,54955],{},"console.log(getRandom(4, 8))",[387,54957,54959],{"id":54958},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,54961,54962],{},[3269,54963],{"alt":160,"src":54964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,54966,54967],{},[3269,54968],{"alt":160,"src":54969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,54971,54972],{},[3269,54973],{"alt":160,"src":54974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,54976,54977],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,54979,54980],{},[3269,54981],{"alt":160,"src":54982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,54984,54985],{},[3269,54986],{"alt":160,"src":54987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,54989,54990],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,54992,54993],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,54995,54996],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[1853,54998,54999],{},"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":160,"searchDepth":263,"depth":263,"links":55001},[55002,55010,55011,55012,55013,55014,55021,55025,55031,55040],{"id":52200,"depth":263,"text":52201,"children":55003},[55004,55005,55006,55007,55008,55009],{"id":52204,"depth":274,"text":52205},{"id":52221,"depth":274,"text":52222},{"id":52261,"depth":274,"text":52262},{"id":52273,"depth":274,"text":52274},{"id":52282,"depth":274,"text":52283},{"id":52330,"depth":274,"text":52331},{"id":52340,"depth":263,"text":52341},{"id":52428,"depth":263,"text":52429},{"id":52451,"depth":263,"text":52452},{"id":52463,"depth":263,"text":52464},{"id":52650,"depth":263,"text":52651,"children":55015},[55016,55017,55018,55019,55020],{"id":52654,"depth":274,"text":52655},{"id":52663,"depth":274,"text":52664},{"id":52691,"depth":274,"text":52692},{"id":52727,"depth":274,"text":52728},{"id":52752,"depth":274,"text":52753},{"id":52764,"depth":263,"text":52765,"children":55022},[55023,55024],{"id":52785,"depth":274,"text":52786},{"id":52879,"depth":274,"text":52880},{"id":52937,"depth":263,"text":52938,"children":55026},[55027,55028,55029,55030],{"id":52941,"depth":274,"text":52942},{"id":52965,"depth":274,"text":52966},{"id":53018,"depth":274,"text":53019},{"id":53825,"depth":274,"text":53826},{"id":54209,"depth":263,"text":54210,"children":55032},[55033,55034,55035,55036,55037,55038,55039],{"id":54227,"depth":274,"text":54228},{"id":54264,"depth":274,"text":54265},{"id":54295,"depth":274,"text":54296},{"id":54328,"depth":274,"text":54329},{"id":54409,"depth":274,"text":54410},{"id":54507,"depth":274,"text":54508},{"id":54565,"depth":274,"text":54566},{"id":54618,"depth":263,"text":54619,"children":55041},[55042,55043,55044,55045,55046,55047,55048],{"id":54622,"depth":274,"text":54623},{"id":54647,"depth":274,"text":54648},{"id":54699,"depth":274,"text":54700},{"id":54719,"depth":274,"text":54720},{"id":54786,"depth":274,"text":54787},{"id":54877,"depth":274,"text":54878},{"id":54958,"depth":274,"text":54959},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52192,"description":25135},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":55055,"title":55056,"body":55057,"description":25135,"extension":1880,"meta":78393,"navigation":721,"path":78394,"seo":78395,"stem":78396,"__hash__":78397},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55058,"toc":78333},[55059,55062,55065,55068,55073,55076,55079,55082,55086,55090,55096,55101,55109,55116,55119,55123,55128,55133,55138,55141,55144,55155,55158,55162,55165,55168,55173,55178,55183,55186,55189,55280,55283,55288,55291,55296,55299,55302,55307,55310,55315,55319,55322,55336,55340,55345,55348,55351,55355,55360,55363,55367,55371,55376,55380,55385,55388,55391,55394,55397,55400,55403,55408,55413,55440,55443,55446,55449,55454,55457,55460,55463,55466,55470,55499,55503,55508,55513,55516,55519,55522,55527,55641,55646,55651,55812,55817,55820,55824,55829,55834,55837,55840,55843,55846,55849,55852,55855,55858,55861,55864,55867,55870,55873,55876,55878,55881,55884,55887,55892,55896,56293,56296,56302,56306,56311,57593,57598,57601,57604,57607,57612,58808,58812,58818,58823,58826,58831,58836,58840,58844,58849,58852,58857,58860,58863,58867,59775,59778,59782,60003,60006,60009,60012,60238,60241,60465,60468,60472,60477,60480,60483,60711,60714,60747,60750,60754,60759,60763,60766,60769,60772,60775,60778,60781,60784,60789,62069,62073,62076,63169,63173,63176,63179,63182,63185,63189,63192,63195,63197,63205,64685,64689,64692,64695,64698,64907,64910,64914,64918,64923,64928,64931,64934,64939,64943,64948,64951,65060,65064,65069,65074,65077,65080,65084,65089,65094,65099,65102,65105,65116,65119,65124,65129,65132,65135,65208,65212,65217,65220,65222,65233,65237,65242,66568,66571,66574,66577,66579,66582,66585,66588,66591,66594,66597,66600,66603,66606,66609,66612,66615,66617,66619,66622,66626,67720,67723,67726,67742,67756,67759,67764,67770,67775,67779,67783,67788,67792,67797,68239,68244,68247,68251,68256,68259,68262,68266,68271,68275,68280,68285,68289,68294,68299,68302,68307,68312,68316,68321,68326,68430,68433,68437,68442,68808,68811,68814,68817,68820,68823,68826,68829,68832,70128,70132,70137,70142,70145,70148,70151,70154,70156,70161,70166,70169,70173,70178,70183,70188,70191,70194,70197,70200,70203,70208,70211,70215,70220,70225,70229,70234,70237,70242,70245,70248,70251,70254,70257,70262,70265,70268,70271,70274,70278,70283,70286,70290,70295,70298,70301,70305,70334,70337,70341,70345,70350,70354,70359,70362,70365,70368,70371,70374,70377,70380,70383,70386,70389,70392,70395,70398,70401,70405,70410,70415,70418,70422,70426,70431,70434,70438,70441,70444,70449,70454,70459,70464,70469,70472,70475,70480,70485,70489,70494,70497,70502,70505,70508,70511,70514,70519,70522,70531,70535,70540,70543,70546,70550,70553,70558,70562,70565,70571,70577,70581,70607,70610,72171,72174,72670,72673,72678,72683,72688,72692,72697,72702,72707,72711,72716,72719,72722,72725,72728,72732,72735,72740,72743,72748,72752,72757,72760,72765,72770,72775,72778,72781,72786,72791,72794,72797,72801,72804,72809,72812,72817,72820,72825,72830,72835,72838,72843,72908,72911,72922,72926,72931,73103,73107,73112,73115,73118,73121,73125,73136,73140,73143,73148,73153,73156,73159,73162,73165,73168,73170,73173,73176,73179,73184,73187,73192,73195,73199,73202,73205,73219,73223,73226,73281,73286,73289,73292,73297,73300,73304,73309,73439,73443,73448,73453,73534,73539,73543,73546,73551,73556,73562,73565,73568,73571,73575,73580,73583,73594,73598,73615,76662,76666,76669,76672,76675,76696,76700,76703,76711,76714,76719,76722,76725,76730,76735,76739,76760,76764,76769,76772,76775,76778,76781,76785,76790,76793,76797,76802,76805,76810,76813,76818,76821,76826,78029,78033,78038,78041,78046,78330],[10,55060,55056],{"id":55061},"_3web-apis",[19,55063,55064],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,55066,55067],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,55069,55070],{},[3269,55071],{"alt":160,"src":55072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,55074,55075],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,55077,55078],{},"建议数组和对象使用 const 来声明",[19,55080,55081],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55083,55085],{"id":55084},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[387,55087,55089],{"id":55088},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,55091,55092,55095],{},[70,55093,55094],{},"document"," = HTML 文件解析后的对象化表示；",[19,55097,55098,55100],{},[70,55099,55094],{}," ≠ HTML 文件本身",[19,55102,55103,55108],{},[2093,55104,55105],{},[70,55106,55107],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,55110,55111,55115],{},[2093,55112,55113],{},[70,55114,55094],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,55117,55118],{},"document实际上为window.document的简写",[387,55120,55122],{"id":55121},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,55124,55125],{},[3269,55126],{"alt":160,"src":55127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,55129,55130],{},[3269,55131],{"alt":160,"src":55132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,55134,55135],{},[3269,55136],{"alt":160,"src":55137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,55139,55140],{},"console.dir()",[19,55142,55143],{},"dir用来打印对象",[2946,55145,55146,55149,55152],{},[29,55147,55148],{},"任何一个标签，都是一个对象",[29,55150,55151],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[29,55153,55154],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,55156,55157],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[387,55159,55161],{"id":55160},"_312-获取dom对象","3.1.2 获取DoM对象",[19,55163,55164],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,55166,55167],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,55169,55170],{},[2093,55171,55172],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[26,55174,55175],{},[29,55176,55177],{},"利用CSS选择器来获取标签元素",[19,55179,55180],{},[3269,55181],{"alt":160,"src":55182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,55184,55185],{},"里边的选择器必须必须加引号！！！",[19,55187,55188],{},"只选择第一个元素",[154,55190,55192],{"className":310,"code":55191,"language":312,"meta":160,"style":160},"\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",[70,55193,55194,55202,55222,55241,55249,55254,55259,55264,55272],{"__ignoreMap":160},[178,55195,55196,55198,55200],{"class":180,"line":181},[178,55197,320],{"class":319},[178,55199,376],{"class":323},[178,55201,336],{"class":319},[178,55203,55204,55206,55208,55211,55213,55215,55218,55220],{"class":180,"line":263},[178,55205,341],{"class":319},[178,55207,53341],{"class":323},[178,55209,55210],{"class":184}," class",[178,55212,330],{"class":319},[178,55214,431],{"class":188},[178,55216,55217],{"class":319},">123\u003C\u002F",[178,55219,53341],{"class":323},[178,55221,336],{"class":319},[178,55223,55224,55226,55228,55230,55232,55234,55237,55239],{"class":180,"line":274},[178,55225,341],{"class":319},[178,55227,53341],{"class":323},[178,55229,55210],{"class":184},[178,55231,330],{"class":319},[178,55233,431],{"class":188},[178,55235,55236],{"class":319},">456\u003C\u002F",[178,55238,53341],{"class":323},[178,55240,336],{"class":319},[178,55242,55243,55245,55247],{"class":180,"line":354},[178,55244,341],{"class":319},[178,55246,53541],{"class":323},[178,55248,336],{"class":319},[178,55250,55251],{"class":180,"line":364},[178,55252,55253],{"class":319},"    \u002F\u002F 1.获取匹配的第一个元素\n",[178,55255,55256],{"class":180,"line":740},[178,55257,55258],{"class":319},"    const box = document.querySelector('div')\n",[178,55260,55261],{"class":180,"line":746},[178,55262,55263],{"class":319},"    console.dir(box)\n",[178,55265,55266,55268,55270],{"class":180,"line":752},[178,55267,357],{"class":319},[178,55269,53541],{"class":323},[178,55271,336],{"class":319},[178,55273,55274,55276,55278],{"class":180,"line":757},[178,55275,367],{"class":319},[178,55277,376],{"class":323},[178,55279,336],{"class":319},[19,55281,55282],{},"只选123，不选456",[19,55284,55285],{},[3269,55286],{"alt":160,"src":55287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,55289,55290],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,55292,55293],{},[3269,55294],{"alt":160,"src":55295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,55297,55298],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,55300,55301],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[26,55303,55304],{"start":263},[29,55305,55306],{},"其他方法来获取标签元素",[19,55308,55309],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,55311,55312],{},[3269,55313],{"alt":160,"src":55314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[387,55316,55318],{"id":55317},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,55320,55321],{},"设置修改DOM元素内容有两种方式：",[2946,55323,55324,55327,55330,55333],{},[29,55325,55326],{},"元素.innerText=''",[29,55328,55329],{},"元素.innerHTML=''",[29,55331,55332],{},"不写字符串输出数字也是可以的",[29,55334,55335],{},"元素.innerHtml=1",[23756,55337,55339],{"id":55338},"_3131-innertext","3.1.3.1 innerText",[19,55341,55342],{},[3269,55343],{"alt":160,"src":55344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,55346,55347],{},"思路：实现了修改盒子中的内容！",[19,55349,55350],{},"它只显示纯文本，不解析标签",[23756,55352,55354],{"id":55353},"_3132-innerhtml","3.1.3.2 innerHTML",[19,55356,55357],{},[3269,55358],{"alt":160,"src":55359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,55361,55362],{},"相比于innerText，他的强大之处在于可以解析标签",[387,55364,55366],{"id":55365},"_314-操作元素属性","3.1.4 操作元素属性",[23756,55368,55370],{"id":55369},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,55372,55373],{},[3269,55374],{"alt":160,"src":55375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[23756,55377,55379],{"id":55378},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,55381,55382],{},[3269,55383],{"alt":160,"src":55384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,55386,55387],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,55389,55390],{},"div.style.backgroundColor = 'hotpink'",[19,55392,55393],{},"如果按照css的写法，-表示减，就会出错",[19,55395,55396],{},"body元素不需要再获取，直接用就行！！！！！！",[19,55398,55399],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,55401,55402],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,55404,55405],{},[3269,55406],{"alt":160,"src":55407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,55409,55410],{},[3269,55411],{"alt":160,"src":55412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[26,55414,55415,55418,55421,55424,55427,55430],{},[29,55416,55417],{},"className这个方式就是修改很多样式的时候来使用的！",[29,55419,55420],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[29,55422,55423],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[29,55425,55426],{},"className为属性名，如果还用class的话就导致与关键字冲突",[29,55428,55429],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[29,55431,55432,55433,55437],{},"解析标签的时候就变为了",[53341,55434],{"className":55435},[55436,500],"nav",[55438,55439],"br",{},[19,55441,55442],{},"例子：",[53341,55444],{"className":55445},[55436],[53541,55447,55448],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,55450,55451],{},[3269,55452],{"alt":160,"src":55453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,55455,55456],{},"追加和删除类名用classList",[19,55458,55459],{},"常用于类似于开关的操作",[19,55461,55462],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,55464,55465],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[23756,55467,55469],{"id":55468},"_3143-牢记点","3.1.4.3 牢记点",[26,55471,55472,55475,55478,55481,55484,55487,55490,55493,55496],{},[29,55473,55474],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[29,55476,55477],{},"使用style属性操作css时不要忘记引号",[29,55479,55480],{},"使用className或者classList时也不要忘记引号",[29,55482,55483],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[29,55485,55486],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[29,55488,55489],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[29,55491,55492],{},"若： let arr=['1','2',3] arr[0]=1",[29,55494,55495],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[29,55497,55498],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[387,55500,55502],{"id":55501},"_315-操作表单元素","3.1.5 操作表单元素",[26,55504,55505],{},[29,55506,55507],{},"天生的属性",[19,55509,55510],{},[3269,55511],{"alt":160,"src":55512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,55514,55515],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,55517,55518],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,55520,55521],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,55523,55524],{},[3269,55525],{"alt":160,"src":55526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[154,55528,55530],{"className":52365,"code":55529,"language":52367,"meta":160,"style":160},"在复选框中如果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",[70,55531,55532,55537,55568,55573,55578,55583,55588,55592,55597,55602,55619,55631,55636],{"__ignoreMap":160},[178,55533,55534],{"class":180,"line":181},[178,55535,55536],{"class":319},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[178,55538,55539,55541,55544,55546,55548,55551,55553,55555,55557,55559,55561,55563,55566],{"class":180,"line":263},[178,55540,320],{"class":319},[178,55542,55543],{"class":323},"input",[178,55545,467],{"class":184},[178,55547,330],{"class":319},[178,55549,55550],{"class":188},"\"checkbox\"",[178,55552,426],{"class":184},[178,55554,330],{"class":319},[178,55556,9421],{"class":188},[178,55558,16717],{"class":184},[178,55560,330],{"class":319},[178,55562,9421],{"class":188},[178,55564,55565],{"class":184}," checked",[178,55567,336],{"class":319},[178,55569,55570],{"class":180,"line":274},[178,55571,55572],{"class":319},"不选的话：\n",[178,55574,55575],{"class":180,"line":354},[178,55576,55577],{"class":319},"const input = document.querySelector('input')\n",[178,55579,55580],{"class":180,"line":364},[178,55581,55582],{"class":319},"input.checked=false\n",[178,55584,55585],{"class":180,"line":740},[178,55586,55587],{"class":319},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[178,55589,55590],{"class":180,"line":746},[178,55591,722],{"emptyLinePlaceholder":721},[178,55593,55594],{"class":180,"line":752},[178,55595,55596],{"class":319},"禁用按钮：\n",[178,55598,55599],{"class":180,"line":757},[178,55600,55601],{"class":319},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[178,55603,55604,55606,55609,55612,55615,55617],{"class":180,"line":763},[178,55605,320],{"class":319},[178,55607,55608],{"class":323},"button",[178,55610,55611],{"class":184}," disabled",[178,55613,55614],{"class":319},">点击\u003C\u002F",[178,55616,55608],{"class":323},[178,55618,336],{"class":319},[178,55620,55621,55623,55625,55627,55629],{"class":180,"line":769},[178,55622,320],{"class":319},[178,55624,55608],{"class":323},[178,55626,55614],{"class":319},[178,55628,55608],{"class":323},[178,55630,336],{"class":319},[178,55632,55633],{"class":180,"line":774},[178,55634,55635],{"class":319},"const bt = document.querySelector('button')\n",[178,55637,55638],{"class":180,"line":780},[178,55639,55640],{"class":319},"bt.disabled = false\n",[26,55642,55643],{"start":263},[29,55644,55645],{},"自定义属性",[19,55647,55648],{},[3269,55649],{"alt":160,"src":55650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[154,55652,55654],{"className":310,"code":55653,"language":312,"meta":160,"style":160},"\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",[70,55655,55656,55664,55692,55711,55730,55749,55768,55776,55781,55786,55791,55796,55804],{"__ignoreMap":160},[178,55657,55658,55660,55662],{"class":180,"line":181},[178,55659,320],{"class":319},[178,55661,376],{"class":323},[178,55663,336],{"class":319},[178,55665,55666,55668,55670,55673,55675,55677,55680,55682,55685,55688,55690],{"class":180,"line":263},[178,55667,341],{"class":319},[178,55669,53341],{"class":323},[178,55671,55672],{"class":184}," data-id",[178,55674,330],{"class":319},[178,55676,5451],{"class":188},[178,55678,55679],{"class":184}," data-spm",[178,55681,330],{"class":319},[178,55683,55684],{"class":188},"\"我不知道\"",[178,55686,55687],{"class":319},">1\u003C\u002F",[178,55689,53341],{"class":323},[178,55691,336],{"class":319},[178,55693,55694,55696,55698,55700,55702,55704,55707,55709],{"class":180,"line":274},[178,55695,341],{"class":319},[178,55697,53341],{"class":323},[178,55699,55672],{"class":184},[178,55701,330],{"class":319},[178,55703,5474],{"class":188},[178,55705,55706],{"class":319},">2\u003C\u002F",[178,55708,53341],{"class":323},[178,55710,336],{"class":319},[178,55712,55713,55715,55717,55719,55721,55723,55726,55728],{"class":180,"line":354},[178,55714,341],{"class":319},[178,55716,53341],{"class":323},[178,55718,55672],{"class":184},[178,55720,330],{"class":319},[178,55722,5487],{"class":188},[178,55724,55725],{"class":319},">3\u003C\u002F",[178,55727,53341],{"class":323},[178,55729,336],{"class":319},[178,55731,55732,55734,55736,55738,55740,55742,55745,55747],{"class":180,"line":364},[178,55733,341],{"class":319},[178,55735,53341],{"class":323},[178,55737,55672],{"class":184},[178,55739,330],{"class":319},[178,55741,5500],{"class":188},[178,55743,55744],{"class":319},">4\u003C\u002F",[178,55746,53341],{"class":323},[178,55748,336],{"class":319},[178,55750,55751,55753,55755,55757,55759,55761,55764,55766],{"class":180,"line":740},[178,55752,341],{"class":319},[178,55754,53341],{"class":323},[178,55756,55672],{"class":184},[178,55758,330],{"class":319},[178,55760,5520],{"class":188},[178,55762,55763],{"class":319},">5\u003C\u002F",[178,55765,53341],{"class":323},[178,55767,336],{"class":319},[178,55769,55770,55772,55774],{"class":180,"line":746},[178,55771,341],{"class":319},[178,55773,53541],{"class":323},[178,55775,336],{"class":319},[178,55777,55778],{"class":180,"line":752},[178,55779,55780],{"class":319},"    const one = document.querySelector('div')\n",[178,55782,55783],{"class":180,"line":757},[178,55784,55785],{"class":319},"    console.log(one.dataset)\n",[178,55787,55788],{"class":180,"line":763},[178,55789,55790],{"class":319},"    console.log(one.dataset.id)\n",[178,55792,55793],{"class":180,"line":769},[178,55794,55795],{"class":319},"    console.log(one.dataset.spm)\n",[178,55797,55798,55800,55802],{"class":180,"line":774},[178,55799,357],{"class":319},[178,55801,53541],{"class":323},[178,55803,336],{"class":319},[178,55805,55806,55808,55810],{"class":180,"line":780},[178,55807,367],{"class":319},[178,55809,376],{"class":323},[178,55811,336],{"class":319},[19,55813,55814],{},[3269,55815],{"alt":160,"src":55816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,55818,55819],{},"document.querySelector选择的是第一个对象（元素）",[387,55821,55823],{"id":55822},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,55825,55826],{},[3269,55827],{"alt":160,"src":55828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,55830,55831],{},[3269,55832],{"alt":160,"src":55833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,55835,55836],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53541,55838,55839],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,55841,55842],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53541,55844,55845],{},"\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,55847,55848],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,55850,55851],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,55853,55854],{},"单位为毫秒！！！",[19,55856,55857],{},"可以搭配匿名函数来用！！！",[19,55859,55860],{},"setInterval(function () {",[19,55862,55863],{},"alert('两秒执行一次')",[19,55865,55866],{},"}, 2000)",[19,55868,55869],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,55871,55872],{},"function fn() {",[19,55874,55875],{},"document.write(1)",[19,55877,2885],{},[19,55879,55880],{},"setInterval(fn, 1000)",[19,55882,55883],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,55885,55886],{},"setInterval('fn()', 1000)",[19,55888,55889],{},[3269,55890],{"alt":160,"src":55891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[23756,55893,55895],{"id":55894},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[154,55897,55899],{"className":52365,"code":55898,"language":52367,"meta":160,"style":160},"\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",[70,55900,55901,55911,55925,55929,55937,55951,55971,55983,55991,55995,56003,56040,56045,56050,56055,56063,56071,56093,56101,56106,56128,56133,56138,56149,56154,56174,56182,56197,56212,56223,56228,56238,56248,56252,56261,56265,56273,56281,56285],{"__ignoreMap":160},[178,55902,55903,55905,55907,55909],{"class":180,"line":181},[178,55904,53029],{"class":319},[178,55906,53032],{"class":323},[178,55908,53035],{"class":184},[178,55910,336],{"class":319},[178,55912,55913,55915,55917,55919,55921,55923],{"class":180,"line":263},[178,55914,320],{"class":319},[178,55916,52367],{"class":323},[178,55918,53046],{"class":184},[178,55920,330],{"class":319},[178,55922,53051],{"class":188},[178,55924,336],{"class":319},[178,55926,55927],{"class":180,"line":274},[178,55928,722],{"emptyLinePlaceholder":721},[178,55930,55931,55933,55935],{"class":180,"line":354},[178,55932,320],{"class":319},[178,55934,53064],{"class":323},[178,55936,336],{"class":319},[178,55938,55939,55941,55943,55945,55947,55949],{"class":180,"line":364},[178,55940,341],{"class":319},[178,55942,53074],{"class":323},[178,55944,53077],{"class":184},[178,55946,330],{"class":319},[178,55948,53082],{"class":188},[178,55950,336],{"class":319},[178,55952,55953,55955,55957,55959,55961,55963,55965,55967,55969],{"class":180,"line":740},[178,55954,341],{"class":319},[178,55956,53074],{"class":323},[178,55958,426],{"class":184},[178,55960,330],{"class":319},[178,55962,53121],{"class":188},[178,55964,53101],{"class":184},[178,55966,330],{"class":319},[178,55968,53128],{"class":188},[178,55970,336],{"class":319},[178,55972,55973,55975,55977,55979,55981],{"class":180,"line":746},[178,55974,341],{"class":319},[178,55976,53137],{"class":323},[178,55978,53140],{"class":319},[178,55980,53137],{"class":323},[178,55982,336],{"class":319},[178,55984,55985,55987,55989],{"class":180,"line":752},[178,55986,367],{"class":319},[178,55988,53064],{"class":323},[178,55990,336],{"class":319},[178,55992,55993],{"class":180,"line":757},[178,55994,722],{"emptyLinePlaceholder":721},[178,55996,55997,55999,56001],{"class":180,"line":763},[178,55998,320],{"class":319},[178,56000,376],{"class":323},[178,56002,336],{"class":319},[178,56004,56005,56007,56010,56012,56014,56016,56018,56020,56022,56025,56027,56030,56033,56035,56038],{"class":180,"line":769},[178,56006,341],{"class":319},[178,56008,56009],{"class":323},"textarea",[178,56011,426],{"class":184},[178,56013,330],{"class":319},[178,56015,9421],{"class":188},[178,56017,16717],{"class":184},[178,56019,330],{"class":319},[178,56021,9421],{"class":188},[178,56023,56024],{"class":184}," cols",[178,56026,330],{"class":319},[178,56028,56029],{"class":188},"\"30\"",[178,56031,56032],{"class":184}," rows",[178,56034,330],{"class":319},[178,56036,56037],{"class":188},"\"10\"",[178,56039,336],{"class":319},[178,56041,56042],{"class":180,"line":774},[178,56043,56044],{"class":319},"        用户注册协议\n",[178,56046,56047],{"class":180,"line":780},[178,56048,56049],{"class":319},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[178,56051,56052],{"class":180,"line":786},[178,56053,56054],{"class":319},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[178,56056,56057,56059,56061],{"class":180,"line":792},[178,56058,53506],{"class":319},[178,56060,56009],{"class":323},[178,56062,336],{"class":319},[178,56064,56065,56067,56069],{"class":180,"line":798},[178,56066,341],{"class":319},[178,56068,55438],{"class":323},[178,56070,336],{"class":319},[178,56072,56073,56075,56077,56079,56081,56084,56086,56089,56091],{"class":180,"line":804},[178,56074,341],{"class":319},[178,56076,55608],{"class":323},[178,56078,55210],{"class":184},[178,56080,330],{"class":319},[178,56082,56083],{"class":188},"\"btn\"",[178,56085,55611],{"class":184},[178,56087,56088],{"class":319},">我已经阅读用户协议(5)\u003C\u002F",[178,56090,55608],{"class":323},[178,56092,336],{"class":319},[178,56094,56095,56097,56099],{"class":180,"line":810},[178,56096,341],{"class":319},[178,56098,53541],{"class":323},[178,56100,336],{"class":319},[178,56102,56103],{"class":180,"line":816},[178,56104,56105],{"class":2008},"    \u002F\u002F 1. 获取元素\n",[178,56107,56108,56110,56113,56115,56118,56121,56123,56126],{"class":180,"line":822},[178,56109,12982],{"class":699},[178,56111,56112],{"class":195}," btn",[178,56114,734],{"class":699},[178,56116,56117],{"class":319}," document.",[178,56119,56120],{"class":184},"querySelector",[178,56122,944],{"class":319},[178,56124,56125],{"class":188},"'.btn'",[178,56127,863],{"class":319},[178,56129,56130],{"class":180,"line":827},[178,56131,56132],{"class":2008},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[178,56134,56135],{"class":180,"line":832},[178,56136,56137],{"class":2008},"    \u002F\u002F 2. 倒计时\n",[178,56139,56140,56142,56144,56146],{"class":180,"line":850},[178,56141,53946],{"class":699},[178,56143,11199],{"class":319},[178,56145,330],{"class":699},[178,56147,56148],{"class":195}," 5\n",[178,56150,56151],{"class":180,"line":866},[178,56152,56153],{"class":2008},"    \u002F\u002F 2.1 开启定时器\n",[178,56155,56156,56158,56161,56163,56166,56168,56171],{"class":180,"line":877},[178,56157,53946],{"class":699},[178,56159,56160],{"class":319}," n ",[178,56162,330],{"class":699},[178,56164,56165],{"class":184}," setInterval",[178,56167,944],{"class":319},[178,56169,56170],{"class":699},"function",[178,56172,56173],{"class":319}," () {\n",[178,56175,56176,56179],{"class":180,"line":882},[178,56177,56178],{"class":319},"      i",[178,56180,56181],{"class":699},"--\n",[178,56183,56184,56187,56189,56192,56194],{"class":180,"line":898},[178,56185,56186],{"class":319},"      btn.innerHTML ",[178,56188,330],{"class":699},[178,56190,56191],{"class":188}," `我已经阅读用户协议(${",[178,56193,2381],{"class":319},[178,56195,56196],{"class":188},"})`\n",[178,56198,56199,56202,56205,56208,56210],{"class":180,"line":914},[178,56200,56201],{"class":699},"      if",[178,56203,56204],{"class":319}," (i ",[178,56206,56207],{"class":699},"===",[178,56209,930],{"class":195},[178,56211,14203],{"class":319},[178,56213,56214,56217,56220],{"class":180,"line":919},[178,56215,56216],{"class":184},"        clearInterval",[178,56218,56219],{"class":319},"(n)  ",[178,56221,56222],{"class":2008},"\u002F\u002F 关闭定时器\n",[178,56224,56225],{"class":180,"line":935},[178,56226,56227],{"class":2008},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[178,56229,56230,56233,56235],{"class":180,"line":952},[178,56231,56232],{"class":319},"        btn.disabled ",[178,56234,330],{"class":699},[178,56236,56237],{"class":195}," false\n",[178,56239,56240,56243,56245],{"class":180,"line":966},[178,56241,56242],{"class":319},"        btn.innerHTML ",[178,56244,330],{"class":699},[178,56246,56247],{"class":188}," '同意'\n",[178,56249,56250],{"class":180,"line":980},[178,56251,54125],{"class":319},[178,56253,56254,56257,56259],{"class":180,"line":985},[178,56255,56256],{"class":319},"    }, ",[178,56258,8179],{"class":195},[178,56260,863],{"class":319},[178,56262,56263],{"class":180,"line":1008},[178,56264,722],{"emptyLinePlaceholder":721},[178,56266,56267,56269,56271],{"class":180,"line":1014},[178,56268,357],{"class":319},[178,56270,53541],{"class":323},[178,56272,336],{"class":319},[178,56274,56275,56277,56279],{"class":180,"line":1019},[178,56276,367],{"class":319},[178,56278,376],{"class":323},[178,56280,336],{"class":319},[178,56282,56283],{"class":180,"line":1033},[178,56284,722],{"emptyLinePlaceholder":721},[178,56286,56287,56289,56291],{"class":180,"line":1046},[178,56288,367],{"class":319},[178,56290,52367],{"class":323},[178,56292,336],{"class":319},[19,56294,56295],{},"不要一直想着用死循环,避免死循环",[19,56297,56298,56301],{},[70,56299,56300],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[23756,56303,56305],{"id":56304},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[26,56307,56308],{},[29,56309,56310],{},"法1",[154,56312,56314],{"className":52365,"code":56313,"language":52367,"meta":160,"style":160},"\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",[70,56315,56316,56326,56340,56344,56352,56366,56386,56398,56406,56412,56423,56434,56438,56442,56449,56461,56465,56469,56476,56488,56502,56515,56529,56533,56537,56544,56555,56566,56577,56589,56601,56613,56617,56621,56629,56639,56652,56664,56677,56681,56685,56692,56702,56714,56726,56737,56748,56758,56770,56782,56786,56790,56799,56811,56823,56851,56864,56868,56872,56879,56890,56894,56902,56910,56914,56922,56936,56951,56975,56983,56998,57011,57019,57040,57052,57064,57076,57088,57100,57112,57124,57133,57141,57149,57157,57169,57192,57211,57230,57249,57268,57287,57306,57326,57330,57350,57369,57389,57410,57421,57438,57448,57458,57468,57473,57478,57483,57488,57513,57526,57530,57553,57557,57565,57573,57581,57585],{"__ignoreMap":160},[178,56317,56318,56320,56322,56324],{"class":180,"line":181},[178,56319,53029],{"class":319},[178,56321,53032],{"class":323},[178,56323,53035],{"class":184},[178,56325,336],{"class":319},[178,56327,56328,56330,56332,56334,56336,56338],{"class":180,"line":263},[178,56329,320],{"class":319},[178,56331,52367],{"class":323},[178,56333,53046],{"class":184},[178,56335,330],{"class":319},[178,56337,53051],{"class":188},[178,56339,336],{"class":319},[178,56341,56342],{"class":180,"line":274},[178,56343,722],{"emptyLinePlaceholder":721},[178,56345,56346,56348,56350],{"class":180,"line":354},[178,56347,320],{"class":319},[178,56349,53064],{"class":323},[178,56351,336],{"class":319},[178,56353,56354,56356,56358,56360,56362,56364],{"class":180,"line":364},[178,56355,341],{"class":319},[178,56357,53074],{"class":323},[178,56359,53077],{"class":184},[178,56361,330],{"class":319},[178,56363,53082],{"class":188},[178,56365,336],{"class":319},[178,56367,56368,56370,56372,56374,56376,56378,56380,56382,56384],{"class":180,"line":740},[178,56369,341],{"class":319},[178,56371,53074],{"class":323},[178,56373,426],{"class":184},[178,56375,330],{"class":319},[178,56377,53121],{"class":188},[178,56379,53101],{"class":184},[178,56381,330],{"class":319},[178,56383,53128],{"class":188},[178,56385,336],{"class":319},[178,56387,56388,56390,56392,56394,56396],{"class":180,"line":746},[178,56389,341],{"class":319},[178,56391,53137],{"class":323},[178,56393,53140],{"class":319},[178,56395,53137],{"class":323},[178,56397,336],{"class":319},[178,56399,56400,56402,56404],{"class":180,"line":752},[178,56401,341],{"class":319},[178,56403,1853],{"class":323},[178,56405,336],{"class":319},[178,56407,56408,56410],{"class":180,"line":757},[178,56409,8172],{"class":323},[178,56411,17330],{"class":319},[178,56413,56414,56417,56419,56421],{"class":180,"line":763},[178,56415,56416],{"class":195},"      padding",[178,56418,53167],{"class":319},[178,56420,2133],{"class":195},[178,56422,3100],{"class":319},[178,56424,56425,56428,56430,56432],{"class":180,"line":769},[178,56426,56427],{"class":195},"      margin",[178,56429,53167],{"class":319},[178,56431,2133],{"class":195},[178,56433,3100],{"class":319},[178,56435,56436],{"class":180,"line":774},[178,56437,3971],{"class":319},[178,56439,56440],{"class":180,"line":780},[178,56441,722],{"emptyLinePlaceholder":721},[178,56443,56444,56447],{"class":180,"line":786},[178,56445,56446],{"class":323},"    li",[178,56448,17330],{"class":319},[178,56450,56451,56454,56456,56459],{"class":180,"line":792},[178,56452,56453],{"class":195},"      list-style",[178,56455,53167],{"class":319},[178,56457,56458],{"class":195},"none",[178,56460,3100],{"class":319},[178,56462,56463],{"class":180,"line":798},[178,56464,3971],{"class":319},[178,56466,56467],{"class":180,"line":804},[178,56468,722],{"emptyLinePlaceholder":721},[178,56470,56471,56474],{"class":180,"line":810},[178,56472,56473],{"class":184},"    .box",[178,56475,17330],{"class":319},[178,56477,56478,56481,56483,56486],{"class":180,"line":816},[178,56479,56480],{"class":195},"      position",[178,56482,53167],{"class":319},[178,56484,56485],{"class":195},"relative",[178,56487,3100],{"class":319},[178,56489,56490,56493,56495,56498,56500],{"class":180,"line":822},[178,56491,56492],{"class":195},"      width",[178,56494,53167],{"class":319},[178,56496,56497],{"class":195},"976",[178,56499,53222],{"class":699},[178,56501,3100],{"class":319},[178,56503,56504,56507,56509,56511,56513],{"class":180,"line":827},[178,56505,56506],{"class":195},"      height",[178,56508,53167],{"class":319},[178,56510,3345],{"class":195},[178,56512,53222],{"class":699},[178,56514,3100],{"class":319},[178,56516,56517,56519,56521,56523,56525,56527],{"class":180,"line":832},[178,56518,56427],{"class":195},[178,56520,53167],{"class":319},[178,56522,2251],{"class":195},[178,56524,53222],{"class":699},[178,56526,53286],{"class":195},[178,56528,3100],{"class":319},[178,56530,56531],{"class":180,"line":850},[178,56532,3971],{"class":319},[178,56534,56535],{"class":180,"line":866},[178,56536,722],{"emptyLinePlaceholder":721},[178,56538,56539,56542],{"class":180,"line":877},[178,56540,56541],{"class":184},"    .slider-footer",[178,56543,17330],{"class":319},[178,56545,56546,56548,56550,56553],{"class":180,"line":882},[178,56547,56480],{"class":195},[178,56549,53167],{"class":319},[178,56551,56552],{"class":195},"absolute",[178,56554,3100],{"class":319},[178,56556,56557,56560,56562,56564],{"class":180,"line":898},[178,56558,56559],{"class":195},"      left",[178,56561,53167],{"class":319},[178,56563,2133],{"class":195},[178,56565,3100],{"class":319},[178,56567,56568,56571,56573,56575],{"class":180,"line":914},[178,56569,56570],{"class":195},"      bottom",[178,56572,53167],{"class":319},[178,56574,2133],{"class":195},[178,56576,3100],{"class":319},[178,56578,56579,56581,56583,56585,56587],{"class":180,"line":919},[178,56580,56492],{"class":195},[178,56582,53167],{"class":319},[178,56584,2251],{"class":195},[178,56586,2268],{"class":699},[178,56588,3100],{"class":319},[178,56590,56591,56593,56595,56597,56599],{"class":180,"line":935},[178,56592,56506],{"class":195},[178,56594,53167],{"class":319},[178,56596,2515],{"class":195},[178,56598,2268],{"class":699},[178,56600,3100],{"class":319},[178,56602,56603,56606,56608,56611],{"class":180,"line":952},[178,56604,56605],{"class":195},"      background-color",[178,56607,53167],{"class":319},[178,56609,56610],{"class":195},"skyblue",[178,56612,3100],{"class":319},[178,56614,56615],{"class":180,"line":966},[178,56616,3971],{"class":319},[178,56618,56619],{"class":180,"line":980},[178,56620,722],{"emptyLinePlaceholder":721},[178,56622,56623,56625,56627],{"class":180,"line":985},[178,56624,56541],{"class":184},[178,56626,8594],{"class":323},[178,56628,17330],{"class":319},[178,56630,56631,56633,56635,56637],{"class":180,"line":1008},[178,56632,56480],{"class":195},[178,56634,53167],{"class":319},[178,56636,56552],{"class":195},[178,56638,3100],{"class":319},[178,56640,56641,56644,56646,56648,56650],{"class":180,"line":1014},[178,56642,56643],{"class":195},"      font-size",[178,56645,53167],{"class":319},[178,56647,2841],{"class":195},[178,56649,53222],{"class":699},[178,56651,3100],{"class":319},[178,56653,56654,56656,56658,56660,56662],{"class":180,"line":1019},[178,56655,56559],{"class":195},[178,56657,53167],{"class":319},[178,56659,2640],{"class":195},[178,56661,53222],{"class":699},[178,56663,3100],{"class":319},[178,56665,56666,56669,56671,56673,56675],{"class":180,"line":1033},[178,56667,56668],{"class":195},"      top",[178,56670,53167],{"class":319},[178,56672,2259],{"class":195},[178,56674,53222],{"class":699},[178,56676,3100],{"class":319},[178,56678,56679],{"class":180,"line":1046},[178,56680,3971],{"class":319},[178,56682,56683],{"class":180,"line":1059},[178,56684,722],{"emptyLinePlaceholder":721},[178,56686,56687,56690],{"class":180,"line":1072},[178,56688,56689],{"class":323},"    ul",[178,56691,17330],{"class":319},[178,56693,56694,56696,56698,56700],{"class":180,"line":1077},[178,56695,56480],{"class":195},[178,56697,53167],{"class":319},[178,56699,56552],{"class":195},[178,56701,3100],{"class":319},[178,56703,56704,56706,56708,56710,56712],{"class":180,"line":1082},[178,56705,56668],{"class":195},[178,56707,53167],{"class":319},[178,56709,2721],{"class":195},[178,56711,53222],{"class":699},[178,56713,3100],{"class":319},[178,56715,56716,56718,56720,56722,56724],{"class":180,"line":1099},[178,56717,56559],{"class":195},[178,56719,53167],{"class":319},[178,56721,2640],{"class":195},[178,56723,53222],{"class":699},[178,56725,3100],{"class":319},[178,56727,56728,56731,56733,56735],{"class":180,"line":9806},[178,56729,56730],{"class":195},"      display",[178,56732,53167],{"class":319},[178,56734,53207],{"class":195},[178,56736,3100],{"class":319},[178,56738,56739,56742,56744,56746],{"class":180,"line":9818},[178,56740,56741],{"class":195},"      justify-content",[178,56743,53167],{"class":319},[178,56745,53398],{"class":195},[178,56747,3100],{"class":319},[178,56749,56750,56752,56754,56756],{"class":180,"line":11477},[178,56751,56480],{"class":195},[178,56753,53167],{"class":319},[178,56755,56552],{"class":195},[178,56757,3100],{"class":319},[178,56759,56760,56762,56764,56766,56768],{"class":180,"line":11502},[178,56761,56492],{"class":195},[178,56763,53167],{"class":319},[178,56765,5764],{"class":195},[178,56767,53222],{"class":699},[178,56769,3100],{"class":319},[178,56771,56772,56774,56776,56778,56780],{"class":180,"line":11525},[178,56773,56506],{"class":195},[178,56775,53167],{"class":319},[178,56777,2640],{"class":195},[178,56779,53222],{"class":699},[178,56781,3100],{"class":319},[178,56783,56784],{"class":180,"line":11549},[178,56785,3971],{"class":319},[178,56787,56788],{"class":180,"line":11554},[178,56789,722],{"emptyLinePlaceholder":721},[178,56791,56792,56794,56797],{"class":180,"line":11559},[178,56793,56689],{"class":323},[178,56795,56796],{"class":323}," li",[178,56798,17330],{"class":319},[178,56800,56801,56803,56805,56807,56809],{"class":180,"line":11564},[178,56802,56492],{"class":195},[178,56804,53167],{"class":319},[178,56806,2640],{"class":195},[178,56808,53222],{"class":699},[178,56810,3100],{"class":319},[178,56812,56813,56815,56817,56819,56821],{"class":180,"line":11573},[178,56814,56506],{"class":195},[178,56816,53167],{"class":319},[178,56818,2640],{"class":195},[178,56820,53222],{"class":699},[178,56822,3100],{"class":319},[178,56824,56825,56827,56829,56832,56834,56836,56838,56840,56842,56844,56846,56849],{"class":180,"line":11578},[178,56826,56605],{"class":195},[178,56828,53167],{"class":319},[178,56830,56831],{"class":195},"rgba",[178,56833,944],{"class":319},[178,56835,2133],{"class":195},[178,56837,14196],{"class":319},[178,56839,2133],{"class":195},[178,56841,14196],{"class":319},[178,56843,2133],{"class":195},[178,56845,14196],{"class":319},[178,56847,56848],{"class":195},".4",[178,56850,4495],{"class":319},[178,56852,56853,56856,56858,56860,56862],{"class":180,"line":11584},[178,56854,56855],{"class":195},"      border-radius",[178,56857,53167],{"class":319},[178,56859,2386],{"class":195},[178,56861,53222],{"class":699},[178,56863,3100],{"class":319},[178,56865,56866],{"class":180,"line":11605},[178,56867,3971],{"class":319},[178,56869,56870],{"class":180,"line":11611},[178,56871,722],{"emptyLinePlaceholder":721},[178,56873,56874,56877],{"class":180,"line":11625},[178,56875,56876],{"class":184},"    .activate",[178,56878,17330],{"class":319},[178,56880,56881,56883,56885,56888],{"class":180,"line":11631},[178,56882,56605],{"class":195},[178,56884,53167],{"class":319},[178,56886,56887],{"class":195},"#f7f7f7",[178,56889,3100],{"class":319},[178,56891,56892],{"class":180,"line":11658},[178,56893,3971],{"class":319},[178,56895,56896,56898,56900],{"class":180,"line":11667},[178,56897,357],{"class":319},[178,56899,1853],{"class":323},[178,56901,336],{"class":319},[178,56903,56904,56906,56908],{"class":180,"line":11673},[178,56905,367],{"class":319},[178,56907,53064],{"class":323},[178,56909,336],{"class":319},[178,56911,56912],{"class":180,"line":11681},[178,56913,722],{"emptyLinePlaceholder":721},[178,56915,56916,56918,56920],{"class":180,"line":11686},[178,56917,320],{"class":319},[178,56919,376],{"class":323},[178,56921,336],{"class":319},[178,56923,56924,56926,56928,56930,56932,56934],{"class":180,"line":18362},[178,56925,341],{"class":319},[178,56927,53341],{"class":323},[178,56929,55210],{"class":184},[178,56931,330],{"class":319},[178,56933,431],{"class":188},[178,56935,336],{"class":319},[178,56937,56938,56940,56942,56944,56946,56949],{"class":180,"line":18368},[178,56939,53071],{"class":319},[178,56941,53341],{"class":323},[178,56943,55210],{"class":184},[178,56945,330],{"class":319},[178,56947,56948],{"class":188},"\"slider-wrapper\"",[178,56950,336],{"class":319},[178,56952,56953,56956,56958,56961,56963,56966,56969,56971,56973],{"class":180,"line":18391},[178,56954,56955],{"class":319},"      \u003C",[178,56957,3269],{"class":323},[178,56959,56960],{"class":184}," src",[178,56962,330],{"class":319},[178,56964,56965],{"class":188},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[178,56967,56968],{"class":184}," alt",[178,56970,330],{"class":319},[178,56972,9421],{"class":188},[178,56974,336],{"class":319},[178,56976,56977,56979,56981],{"class":180,"line":18397},[178,56978,53506],{"class":319},[178,56980,53341],{"class":323},[178,56982,336],{"class":319},[178,56984,56985,56987,56989,56991,56993,56996],{"class":180,"line":18420},[178,56986,53071],{"class":319},[178,56988,53341],{"class":323},[178,56990,55210],{"class":184},[178,56992,330],{"class":319},[178,56994,56995],{"class":188},"\"slider-footer\"",[178,56997,336],{"class":319},[178,56999,57000,57002,57004,57007,57009],{"class":180,"line":18434},[178,57001,56955],{"class":319},[178,57003,19],{"class":323},[178,57005,57006],{"class":319},">对人类来说会不会太超前了?\u003C\u002F",[178,57008,19],{"class":323},[178,57010,336],{"class":319},[178,57012,57013,57015,57017],{"class":180,"line":18454},[178,57014,56955],{"class":319},[178,57016,2946],{"class":323},[178,57018,336],{"class":319},[178,57020,57021,57024,57026,57028,57030,57033,57036,57038],{"class":180,"line":18460},[178,57022,57023],{"class":319},"        \u003C",[178,57025,29],{"class":323},[178,57027,55210],{"class":184},[178,57029,330],{"class":319},[178,57031,57032],{"class":188},"\"activate\"",[178,57034,57035],{"class":319},">\u003C\u002F",[178,57037,29],{"class":323},[178,57039,336],{"class":319},[178,57041,57042,57044,57046,57048,57050],{"class":180,"line":18471},[178,57043,57023],{"class":319},[178,57045,29],{"class":323},[178,57047,57035],{"class":319},[178,57049,29],{"class":323},[178,57051,336],{"class":319},[178,57053,57054,57056,57058,57060,57062],{"class":180,"line":18494},[178,57055,57023],{"class":319},[178,57057,29],{"class":323},[178,57059,57035],{"class":319},[178,57061,29],{"class":323},[178,57063,336],{"class":319},[178,57065,57066,57068,57070,57072,57074],{"class":180,"line":18516},[178,57067,57023],{"class":319},[178,57069,29],{"class":323},[178,57071,57035],{"class":319},[178,57073,29],{"class":323},[178,57075,336],{"class":319},[178,57077,57078,57080,57082,57084,57086],{"class":180,"line":18521},[178,57079,57023],{"class":319},[178,57081,29],{"class":323},[178,57083,57035],{"class":319},[178,57085,29],{"class":323},[178,57087,336],{"class":319},[178,57089,57090,57092,57094,57096,57098],{"class":180,"line":18527},[178,57091,57023],{"class":319},[178,57093,29],{"class":323},[178,57095,57035],{"class":319},[178,57097,29],{"class":323},[178,57099,336],{"class":319},[178,57101,57102,57104,57106,57108,57110],{"class":180,"line":18541},[178,57103,57023],{"class":319},[178,57105,29],{"class":323},[178,57107,57035],{"class":319},[178,57109,29],{"class":323},[178,57111,336],{"class":319},[178,57113,57114,57116,57118,57120,57122],{"class":180,"line":18554},[178,57115,57023],{"class":319},[178,57117,29],{"class":323},[178,57119,57035],{"class":319},[178,57121,29],{"class":323},[178,57123,336],{"class":319},[178,57125,57126,57129,57131],{"class":180,"line":18559},[178,57127,57128],{"class":319},"      \u003C\u002F",[178,57130,2946],{"class":323},[178,57132,336],{"class":319},[178,57134,57135,57137,57139],{"class":180,"line":18573},[178,57136,53506],{"class":319},[178,57138,53341],{"class":323},[178,57140,336],{"class":319},[178,57142,57143,57145,57147],{"class":180,"line":18578},[178,57144,357],{"class":319},[178,57146,53341],{"class":323},[178,57148,336],{"class":319},[178,57150,57151,57153,57155],{"class":180,"line":18584},[178,57152,341],{"class":319},[178,57154,53541],{"class":323},[178,57156,336],{"class":319},[178,57158,57159,57161,57164,57166],{"class":180,"line":18589},[178,57160,12982],{"class":699},[178,57162,57163],{"class":195}," arrImage",[178,57165,734],{"class":699},[178,57167,57168],{"class":319}," [\n",[178,57170,57171,57174,57177,57180,57183,57186,57189],{"class":180,"line":18603},[178,57172,57173],{"class":319},"      { url: ",[178,57175,57176],{"class":188},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[178,57178,57179],{"class":319},", title: ",[178,57181,57182],{"class":188},"'对人类来说会不会太超前了?'",[178,57184,57185],{"class":319},", color: ",[178,57187,57188],{"class":188},"'rgba(100,67,68)'",[178,57190,57191],{"class":319}," },\n",[178,57193,57194,57196,57199,57201,57204,57206,57209],{"class":180,"line":18608},[178,57195,57173],{"class":319},[178,57197,57198],{"class":188},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[178,57200,57179],{"class":319},[178,57202,57203],{"class":188},"'开启剑与雪的黑暗传说!'",[178,57205,57185],{"class":319},[178,57207,57208],{"class":188},"'rgba(43,35,26)'",[178,57210,57191],{"class":319},[178,57212,57213,57215,57218,57220,57223,57225,57228],{"class":180,"line":18613},[178,57214,57173],{"class":319},[178,57216,57217],{"class":188},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[178,57219,57179],{"class":319},[178,57221,57222],{"class":188},"'真正的jo厨出现了!'",[178,57224,57185],{"class":319},[178,57226,57227],{"class":188},"'rgba(36,31,33)'",[178,57229,57191],{"class":319},[178,57231,57232,57234,57237,57239,57242,57244,57247],{"class":180,"line":18627},[178,57233,57173],{"class":319},[178,57235,57236],{"class":188},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[178,57238,57179],{"class":319},[178,57240,57241],{"class":188},"'李玉刚:让世界通过b站看到东方大国文化'",[178,57243,57185],{"class":319},[178,57245,57246],{"class":188},"'rgba(139,98,66)'",[178,57248,57191],{"class":319},[178,57250,57251,57253,57256,57258,57261,57263,57266],{"class":180,"line":18639},[178,57252,57173],{"class":319},[178,57254,57255],{"class":188},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[178,57257,57179],{"class":319},[178,57259,57260],{"class":188},"'快来分享你的寒假日常吧'",[178,57262,57185],{"class":319},[178,57264,57265],{"class":188},"'rgba(67,90,92)'",[178,57267,57191],{"class":319},[178,57269,57270,57272,57275,57277,57280,57282,57285],{"class":180,"line":18644},[178,57271,57173],{"class":319},[178,57273,57274],{"class":188},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[178,57276,57179],{"class":319},[178,57278,57279],{"class":188},"'哔哩哔哩小年YEAR'",[178,57281,57185],{"class":319},[178,57283,57284],{"class":188},"'rgba(166,131,143)'",[178,57286,57191],{"class":319},[178,57288,57289,57291,57294,57296,57299,57301,57304],{"class":180,"line":18657},[178,57290,57173],{"class":319},[178,57292,57293],{"class":188},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[178,57295,57179],{"class":319},[178,57297,57298],{"class":188},"'一站式解决你的电脑配置问题'",[178,57300,57185],{"class":319},[178,57302,57303],{"class":188},"'rgba(53,29,25)'",[178,57305,57191],{"class":319},[178,57307,57308,57310,57313,57315,57318,57320,57323],{"class":180,"line":18662},[178,57309,57173],{"class":319},[178,57311,57312],{"class":188},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[178,57314,57179],{"class":319},[178,57316,57317],{"class":188},"'谁不想和小猫咪贴贴呢?'",[178,57319,57185],{"class":319},[178,57321,57322],{"class":188},"'rgba(99,72,114)'",[178,57324,57325],{"class":319}," }\n",[178,57327,57328],{"class":180,"line":18667},[178,57329,54833],{"class":319},[178,57331,57332,57334,57337,57339,57341,57343,57345,57348],{"class":180,"line":18672},[178,57333,12982],{"class":699},[178,57335,57336],{"class":195}," img",[178,57338,734],{"class":699},[178,57340,56117],{"class":319},[178,57342,56120],{"class":184},[178,57344,944],{"class":319},[178,57346,57347],{"class":188},"'.slider-wrapper img'",[178,57349,863],{"class":319},[178,57351,57352,57354,57356,57358,57360,57362,57364,57367],{"class":180,"line":18685},[178,57353,12982],{"class":699},[178,57355,8594],{"class":195},[178,57357,734],{"class":699},[178,57359,56117],{"class":319},[178,57361,56120],{"class":184},[178,57363,944],{"class":319},[178,57365,57366],{"class":188},"'.slider-footer p'",[178,57368,863],{"class":319},[178,57370,57371,57373,57376,57378,57380,57382,57384,57387],{"class":180,"line":18690},[178,57372,12982],{"class":699},[178,57374,57375],{"class":195}," color",[178,57377,734],{"class":699},[178,57379,56117],{"class":319},[178,57381,56120],{"class":184},[178,57383,944],{"class":319},[178,57385,57386],{"class":188},"'.slider-footer'",[178,57388,863],{"class":319},[178,57390,57391,57393,57396,57398,57400,57403,57405,57408],{"class":180,"line":34365},[178,57392,12982],{"class":699},[178,57394,57395],{"class":195}," lis",[178,57397,734],{"class":699},[178,57399,56117],{"class":319},[178,57401,57402],{"class":184},"querySelectorAll",[178,57404,944],{"class":319},[178,57406,57407],{"class":188},"'.slider-footer ul li'",[178,57409,863],{"class":319},[178,57411,57412,57414,57416,57418],{"class":180,"line":34371},[178,57413,53946],{"class":699},[178,57415,11199],{"class":319},[178,57417,330],{"class":699},[178,57419,57420],{"class":195}," 1\n",[178,57422,57423,57425,57428,57430,57432,57434,57436],{"class":180,"line":34377},[178,57424,53946],{"class":699},[178,57426,57427],{"class":319}," timer ",[178,57429,330],{"class":699},[178,57431,56165],{"class":184},[178,57433,944],{"class":319},[178,57435,56170],{"class":699},[178,57437,56173],{"class":319},[178,57439,57440,57443,57445],{"class":180,"line":34383},[178,57441,57442],{"class":319},"      img.src ",[178,57444,330],{"class":699},[178,57446,57447],{"class":319}," arrImage[i].url\n",[178,57449,57450,57453,57455],{"class":180,"line":34389},[178,57451,57452],{"class":319},"      p.innerHTML ",[178,57454,330],{"class":699},[178,57456,57457],{"class":319}," arrImage[i].title\n",[178,57459,57460,57463,57465],{"class":180,"line":34400},[178,57461,57462],{"class":319},"      color.style.backgroundColor ",[178,57464,330],{"class":699},[178,57466,57467],{"class":319}," arrImage[i].color\n",[178,57469,57470],{"class":180,"line":34406},[178,57471,57472],{"class":2008},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[178,57474,57475],{"class":180,"line":34426},[178,57476,57477],{"class":2008},"      \u002F\u002F li.classList.add('activate')\n",[178,57479,57480],{"class":180,"line":34432},[178,57481,57482],{"class":2008},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[178,57484,57485],{"class":180,"line":34443},[178,57486,57487],{"class":2008},"      \u002F\u002F lis[i].classList.remove('activate')\n",[178,57489,57490,57493,57495,57497,57500,57503,57506,57508,57511],{"class":180,"line":34449},[178,57491,57492],{"class":319},"      document.",[178,57494,56120],{"class":184},[178,57496,944],{"class":319},[178,57498,57499],{"class":188},"'.activate'",[178,57501,57502],{"class":319},")?.classList.",[178,57504,57505],{"class":184},"toggle",[178,57507,944],{"class":319},[178,57509,57510],{"class":188},"'activate'",[178,57512,863],{"class":319},[178,57514,57515,57518,57520,57522,57524],{"class":180,"line":34455},[178,57516,57517],{"class":319},"      lis[i].classList.",[178,57519,7103],{"class":184},[178,57521,944],{"class":319},[178,57523,57510],{"class":188},[178,57525,863],{"class":319},[178,57527,57528],{"class":180,"line":34461},[178,57529,722],{"emptyLinePlaceholder":721},[178,57531,57532,57535,57537,57539,57541,57543,57545,57547,57550],{"class":180,"line":34467},[178,57533,57534],{"class":319},"      i ",[178,57536,330],{"class":699},[178,57538,56204],{"class":319},[178,57540,2421],{"class":699},[178,57542,26870],{"class":195},[178,57544,15474],{"class":319},[178,57546,2268],{"class":699},[178,57548,57549],{"class":319}," arrImage.",[178,57551,57552],{"class":195},"length\n",[178,57554,57555],{"class":180,"line":34473},[178,57556,722],{"emptyLinePlaceholder":721},[178,57558,57559,57561,57563],{"class":180,"line":34479},[178,57560,56256],{"class":319},[178,57562,8179],{"class":195},[178,57564,863],{"class":319},[178,57566,57567,57569,57571],{"class":180,"line":34485},[178,57568,357],{"class":319},[178,57570,53541],{"class":323},[178,57572,336],{"class":319},[178,57574,57575,57577,57579],{"class":180,"line":34505},[178,57576,367],{"class":319},[178,57578,376],{"class":323},[178,57580,336],{"class":319},[178,57582,57583],{"class":180,"line":34511},[178,57584,722],{"emptyLinePlaceholder":721},[178,57586,57587,57589,57591],{"class":180,"line":34527},[178,57588,367],{"class":319},[178,57590,52367],{"class":323},[178,57592,336],{"class":319},[19,57594,57595],{},[3269,57596],{"alt":160,"src":57597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,57599,57600],{},"?.就是短路保护,确保输出正常进行",[19,57602,57603],{},"不要忘记取余%,有时候可以用",[19,57605,57606],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[26,57608,57609],{"start":263},[29,57610,57611],{},"法2",[154,57613,57615],{"className":52365,"code":57614,"language":52367,"meta":160,"style":160},"\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",[70,57616,57617,57627,57641,57645,57653,57667,57687,57699,57707,57713,57723,57733,57737,57741,57747,57757,57761,57765,57771,57781,57793,57805,57819,57823,57827,57833,57843,57853,57863,57875,57887,57897,57901,57905,57913,57923,57935,57947,57959,57963,57967,57973,57983,57995,58007,58017,58027,58037,58049,58061,58065,58069,58077,58089,58101,58127,58139,58143,58147,58153,58163,58167,58175,58183,58187,58195,58209,58223,58243,58251,58265,58277,58285,58303,58315,58327,58339,58351,58363,58375,58387,58395,58403,58411,58419,58430,58446,58462,58478,58494,58510,58526,58542,58558,58562,58567,58585,58603,58613,58618,58623,58634,58640,58655,58664,58668,58673,58682,58687,58696,58701,58706,58711,58734,58764,58768,58776,58780,58788,58796,58800],{"__ignoreMap":160},[178,57618,57619,57621,57623,57625],{"class":180,"line":181},[178,57620,53029],{"class":319},[178,57622,53032],{"class":323},[178,57624,53035],{"class":184},[178,57626,336],{"class":319},[178,57628,57629,57631,57633,57635,57637,57639],{"class":180,"line":263},[178,57630,320],{"class":319},[178,57632,52367],{"class":323},[178,57634,53046],{"class":184},[178,57636,330],{"class":319},[178,57638,53051],{"class":188},[178,57640,336],{"class":319},[178,57642,57643],{"class":180,"line":274},[178,57644,722],{"emptyLinePlaceholder":721},[178,57646,57647,57649,57651],{"class":180,"line":354},[178,57648,320],{"class":319},[178,57650,53064],{"class":323},[178,57652,336],{"class":319},[178,57654,57655,57657,57659,57661,57663,57665],{"class":180,"line":364},[178,57656,341],{"class":319},[178,57658,53074],{"class":323},[178,57660,53077],{"class":184},[178,57662,330],{"class":319},[178,57664,53082],{"class":188},[178,57666,336],{"class":319},[178,57668,57669,57671,57673,57675,57677,57679,57681,57683,57685],{"class":180,"line":740},[178,57670,341],{"class":319},[178,57672,53074],{"class":323},[178,57674,426],{"class":184},[178,57676,330],{"class":319},[178,57678,53121],{"class":188},[178,57680,53101],{"class":184},[178,57682,330],{"class":319},[178,57684,53128],{"class":188},[178,57686,336],{"class":319},[178,57688,57689,57691,57693,57695,57697],{"class":180,"line":746},[178,57690,341],{"class":319},[178,57692,53137],{"class":323},[178,57694,53140],{"class":319},[178,57696,53137],{"class":323},[178,57698,336],{"class":319},[178,57700,57701,57703,57705],{"class":180,"line":752},[178,57702,341],{"class":319},[178,57704,1853],{"class":323},[178,57706,336],{"class":319},[178,57708,57709,57711],{"class":180,"line":757},[178,57710,8172],{"class":323},[178,57712,17330],{"class":319},[178,57714,57715,57717,57719,57721],{"class":180,"line":763},[178,57716,56416],{"class":195},[178,57718,53167],{"class":319},[178,57720,2133],{"class":195},[178,57722,3100],{"class":319},[178,57724,57725,57727,57729,57731],{"class":180,"line":769},[178,57726,56427],{"class":195},[178,57728,53167],{"class":319},[178,57730,2133],{"class":195},[178,57732,3100],{"class":319},[178,57734,57735],{"class":180,"line":774},[178,57736,3971],{"class":319},[178,57738,57739],{"class":180,"line":780},[178,57740,722],{"emptyLinePlaceholder":721},[178,57742,57743,57745],{"class":180,"line":786},[178,57744,56446],{"class":323},[178,57746,17330],{"class":319},[178,57748,57749,57751,57753,57755],{"class":180,"line":792},[178,57750,56453],{"class":195},[178,57752,53167],{"class":319},[178,57754,56458],{"class":195},[178,57756,3100],{"class":319},[178,57758,57759],{"class":180,"line":798},[178,57760,3971],{"class":319},[178,57762,57763],{"class":180,"line":804},[178,57764,722],{"emptyLinePlaceholder":721},[178,57766,57767,57769],{"class":180,"line":810},[178,57768,56473],{"class":184},[178,57770,17330],{"class":319},[178,57772,57773,57775,57777,57779],{"class":180,"line":816},[178,57774,56480],{"class":195},[178,57776,53167],{"class":319},[178,57778,56485],{"class":195},[178,57780,3100],{"class":319},[178,57782,57783,57785,57787,57789,57791],{"class":180,"line":822},[178,57784,56492],{"class":195},[178,57786,53167],{"class":319},[178,57788,56497],{"class":195},[178,57790,53222],{"class":699},[178,57792,3100],{"class":319},[178,57794,57795,57797,57799,57801,57803],{"class":180,"line":827},[178,57796,56506],{"class":195},[178,57798,53167],{"class":319},[178,57800,3345],{"class":195},[178,57802,53222],{"class":699},[178,57804,3100],{"class":319},[178,57806,57807,57809,57811,57813,57815,57817],{"class":180,"line":832},[178,57808,56427],{"class":195},[178,57810,53167],{"class":319},[178,57812,2251],{"class":195},[178,57814,53222],{"class":699},[178,57816,53286],{"class":195},[178,57818,3100],{"class":319},[178,57820,57821],{"class":180,"line":850},[178,57822,3971],{"class":319},[178,57824,57825],{"class":180,"line":866},[178,57826,722],{"emptyLinePlaceholder":721},[178,57828,57829,57831],{"class":180,"line":877},[178,57830,56541],{"class":184},[178,57832,17330],{"class":319},[178,57834,57835,57837,57839,57841],{"class":180,"line":882},[178,57836,56480],{"class":195},[178,57838,53167],{"class":319},[178,57840,56552],{"class":195},[178,57842,3100],{"class":319},[178,57844,57845,57847,57849,57851],{"class":180,"line":898},[178,57846,56559],{"class":195},[178,57848,53167],{"class":319},[178,57850,2133],{"class":195},[178,57852,3100],{"class":319},[178,57854,57855,57857,57859,57861],{"class":180,"line":914},[178,57856,56570],{"class":195},[178,57858,53167],{"class":319},[178,57860,2133],{"class":195},[178,57862,3100],{"class":319},[178,57864,57865,57867,57869,57871,57873],{"class":180,"line":919},[178,57866,56492],{"class":195},[178,57868,53167],{"class":319},[178,57870,2251],{"class":195},[178,57872,2268],{"class":699},[178,57874,3100],{"class":319},[178,57876,57877,57879,57881,57883,57885],{"class":180,"line":935},[178,57878,56506],{"class":195},[178,57880,53167],{"class":319},[178,57882,2515],{"class":195},[178,57884,2268],{"class":699},[178,57886,3100],{"class":319},[178,57888,57889,57891,57893,57895],{"class":180,"line":952},[178,57890,56605],{"class":195},[178,57892,53167],{"class":319},[178,57894,56610],{"class":195},[178,57896,3100],{"class":319},[178,57898,57899],{"class":180,"line":966},[178,57900,3971],{"class":319},[178,57902,57903],{"class":180,"line":980},[178,57904,722],{"emptyLinePlaceholder":721},[178,57906,57907,57909,57911],{"class":180,"line":985},[178,57908,56541],{"class":184},[178,57910,8594],{"class":323},[178,57912,17330],{"class":319},[178,57914,57915,57917,57919,57921],{"class":180,"line":1008},[178,57916,56480],{"class":195},[178,57918,53167],{"class":319},[178,57920,56552],{"class":195},[178,57922,3100],{"class":319},[178,57924,57925,57927,57929,57931,57933],{"class":180,"line":1014},[178,57926,56643],{"class":195},[178,57928,53167],{"class":319},[178,57930,2841],{"class":195},[178,57932,53222],{"class":699},[178,57934,3100],{"class":319},[178,57936,57937,57939,57941,57943,57945],{"class":180,"line":1019},[178,57938,56559],{"class":195},[178,57940,53167],{"class":319},[178,57942,2640],{"class":195},[178,57944,53222],{"class":699},[178,57946,3100],{"class":319},[178,57948,57949,57951,57953,57955,57957],{"class":180,"line":1033},[178,57950,56668],{"class":195},[178,57952,53167],{"class":319},[178,57954,2259],{"class":195},[178,57956,53222],{"class":699},[178,57958,3100],{"class":319},[178,57960,57961],{"class":180,"line":1046},[178,57962,3971],{"class":319},[178,57964,57965],{"class":180,"line":1059},[178,57966,722],{"emptyLinePlaceholder":721},[178,57968,57969,57971],{"class":180,"line":1072},[178,57970,56689],{"class":323},[178,57972,17330],{"class":319},[178,57974,57975,57977,57979,57981],{"class":180,"line":1077},[178,57976,56480],{"class":195},[178,57978,53167],{"class":319},[178,57980,56552],{"class":195},[178,57982,3100],{"class":319},[178,57984,57985,57987,57989,57991,57993],{"class":180,"line":1082},[178,57986,56668],{"class":195},[178,57988,53167],{"class":319},[178,57990,2721],{"class":195},[178,57992,53222],{"class":699},[178,57994,3100],{"class":319},[178,57996,57997,57999,58001,58003,58005],{"class":180,"line":1099},[178,57998,56559],{"class":195},[178,58000,53167],{"class":319},[178,58002,2640],{"class":195},[178,58004,53222],{"class":699},[178,58006,3100],{"class":319},[178,58008,58009,58011,58013,58015],{"class":180,"line":9806},[178,58010,56730],{"class":195},[178,58012,53167],{"class":319},[178,58014,53207],{"class":195},[178,58016,3100],{"class":319},[178,58018,58019,58021,58023,58025],{"class":180,"line":9818},[178,58020,56741],{"class":195},[178,58022,53167],{"class":319},[178,58024,53398],{"class":195},[178,58026,3100],{"class":319},[178,58028,58029,58031,58033,58035],{"class":180,"line":11477},[178,58030,56480],{"class":195},[178,58032,53167],{"class":319},[178,58034,56552],{"class":195},[178,58036,3100],{"class":319},[178,58038,58039,58041,58043,58045,58047],{"class":180,"line":11502},[178,58040,56492],{"class":195},[178,58042,53167],{"class":319},[178,58044,5764],{"class":195},[178,58046,53222],{"class":699},[178,58048,3100],{"class":319},[178,58050,58051,58053,58055,58057,58059],{"class":180,"line":11525},[178,58052,56506],{"class":195},[178,58054,53167],{"class":319},[178,58056,2640],{"class":195},[178,58058,53222],{"class":699},[178,58060,3100],{"class":319},[178,58062,58063],{"class":180,"line":11549},[178,58064,3971],{"class":319},[178,58066,58067],{"class":180,"line":11554},[178,58068,722],{"emptyLinePlaceholder":721},[178,58070,58071,58073,58075],{"class":180,"line":11559},[178,58072,56689],{"class":323},[178,58074,56796],{"class":323},[178,58076,17330],{"class":319},[178,58078,58079,58081,58083,58085,58087],{"class":180,"line":11564},[178,58080,56492],{"class":195},[178,58082,53167],{"class":319},[178,58084,2640],{"class":195},[178,58086,53222],{"class":699},[178,58088,3100],{"class":319},[178,58090,58091,58093,58095,58097,58099],{"class":180,"line":11573},[178,58092,56506],{"class":195},[178,58094,53167],{"class":319},[178,58096,2640],{"class":195},[178,58098,53222],{"class":699},[178,58100,3100],{"class":319},[178,58102,58103,58105,58107,58109,58111,58113,58115,58117,58119,58121,58123,58125],{"class":180,"line":11578},[178,58104,56605],{"class":195},[178,58106,53167],{"class":319},[178,58108,56831],{"class":195},[178,58110,944],{"class":319},[178,58112,2133],{"class":195},[178,58114,14196],{"class":319},[178,58116,2133],{"class":195},[178,58118,14196],{"class":319},[178,58120,2133],{"class":195},[178,58122,14196],{"class":319},[178,58124,56848],{"class":195},[178,58126,4495],{"class":319},[178,58128,58129,58131,58133,58135,58137],{"class":180,"line":11584},[178,58130,56855],{"class":195},[178,58132,53167],{"class":319},[178,58134,2386],{"class":195},[178,58136,53222],{"class":699},[178,58138,3100],{"class":319},[178,58140,58141],{"class":180,"line":11605},[178,58142,3971],{"class":319},[178,58144,58145],{"class":180,"line":11611},[178,58146,722],{"emptyLinePlaceholder":721},[178,58148,58149,58151],{"class":180,"line":11625},[178,58150,56876],{"class":184},[178,58152,17330],{"class":319},[178,58154,58155,58157,58159,58161],{"class":180,"line":11631},[178,58156,56605],{"class":195},[178,58158,53167],{"class":319},[178,58160,56887],{"class":195},[178,58162,3100],{"class":319},[178,58164,58165],{"class":180,"line":11658},[178,58166,3971],{"class":319},[178,58168,58169,58171,58173],{"class":180,"line":11667},[178,58170,357],{"class":319},[178,58172,1853],{"class":323},[178,58174,336],{"class":319},[178,58176,58177,58179,58181],{"class":180,"line":11673},[178,58178,367],{"class":319},[178,58180,53064],{"class":323},[178,58182,336],{"class":319},[178,58184,58185],{"class":180,"line":11681},[178,58186,722],{"emptyLinePlaceholder":721},[178,58188,58189,58191,58193],{"class":180,"line":11686},[178,58190,320],{"class":319},[178,58192,376],{"class":323},[178,58194,336],{"class":319},[178,58196,58197,58199,58201,58203,58205,58207],{"class":180,"line":18362},[178,58198,341],{"class":319},[178,58200,53341],{"class":323},[178,58202,55210],{"class":184},[178,58204,330],{"class":319},[178,58206,431],{"class":188},[178,58208,336],{"class":319},[178,58210,58211,58213,58215,58217,58219,58221],{"class":180,"line":18368},[178,58212,53071],{"class":319},[178,58214,53341],{"class":323},[178,58216,55210],{"class":184},[178,58218,330],{"class":319},[178,58220,56948],{"class":188},[178,58222,336],{"class":319},[178,58224,58225,58227,58229,58231,58233,58235,58237,58239,58241],{"class":180,"line":18391},[178,58226,56955],{"class":319},[178,58228,3269],{"class":323},[178,58230,56960],{"class":184},[178,58232,330],{"class":319},[178,58234,56965],{"class":188},[178,58236,56968],{"class":184},[178,58238,330],{"class":319},[178,58240,9421],{"class":188},[178,58242,336],{"class":319},[178,58244,58245,58247,58249],{"class":180,"line":18397},[178,58246,53506],{"class":319},[178,58248,53341],{"class":323},[178,58250,336],{"class":319},[178,58252,58253,58255,58257,58259,58261,58263],{"class":180,"line":18420},[178,58254,53071],{"class":319},[178,58256,53341],{"class":323},[178,58258,55210],{"class":184},[178,58260,330],{"class":319},[178,58262,56995],{"class":188},[178,58264,336],{"class":319},[178,58266,58267,58269,58271,58273,58275],{"class":180,"line":18434},[178,58268,56955],{"class":319},[178,58270,19],{"class":323},[178,58272,57006],{"class":319},[178,58274,19],{"class":323},[178,58276,336],{"class":319},[178,58278,58279,58281,58283],{"class":180,"line":18454},[178,58280,56955],{"class":319},[178,58282,2946],{"class":323},[178,58284,336],{"class":319},[178,58286,58287,58289,58291,58293,58295,58297,58299,58301],{"class":180,"line":18460},[178,58288,57023],{"class":319},[178,58290,29],{"class":323},[178,58292,55210],{"class":184},[178,58294,330],{"class":319},[178,58296,57032],{"class":188},[178,58298,57035],{"class":319},[178,58300,29],{"class":323},[178,58302,336],{"class":319},[178,58304,58305,58307,58309,58311,58313],{"class":180,"line":18471},[178,58306,57023],{"class":319},[178,58308,29],{"class":323},[178,58310,57035],{"class":319},[178,58312,29],{"class":323},[178,58314,336],{"class":319},[178,58316,58317,58319,58321,58323,58325],{"class":180,"line":18494},[178,58318,57023],{"class":319},[178,58320,29],{"class":323},[178,58322,57035],{"class":319},[178,58324,29],{"class":323},[178,58326,336],{"class":319},[178,58328,58329,58331,58333,58335,58337],{"class":180,"line":18516},[178,58330,57023],{"class":319},[178,58332,29],{"class":323},[178,58334,57035],{"class":319},[178,58336,29],{"class":323},[178,58338,336],{"class":319},[178,58340,58341,58343,58345,58347,58349],{"class":180,"line":18521},[178,58342,57023],{"class":319},[178,58344,29],{"class":323},[178,58346,57035],{"class":319},[178,58348,29],{"class":323},[178,58350,336],{"class":319},[178,58352,58353,58355,58357,58359,58361],{"class":180,"line":18527},[178,58354,57023],{"class":319},[178,58356,29],{"class":323},[178,58358,57035],{"class":319},[178,58360,29],{"class":323},[178,58362,336],{"class":319},[178,58364,58365,58367,58369,58371,58373],{"class":180,"line":18541},[178,58366,57023],{"class":319},[178,58368,29],{"class":323},[178,58370,57035],{"class":319},[178,58372,29],{"class":323},[178,58374,336],{"class":319},[178,58376,58377,58379,58381,58383,58385],{"class":180,"line":18554},[178,58378,57023],{"class":319},[178,58380,29],{"class":323},[178,58382,57035],{"class":319},[178,58384,29],{"class":323},[178,58386,336],{"class":319},[178,58388,58389,58391,58393],{"class":180,"line":18559},[178,58390,57128],{"class":319},[178,58392,2946],{"class":323},[178,58394,336],{"class":319},[178,58396,58397,58399,58401],{"class":180,"line":18573},[178,58398,53506],{"class":319},[178,58400,53341],{"class":323},[178,58402,336],{"class":319},[178,58404,58405,58407,58409],{"class":180,"line":18578},[178,58406,357],{"class":319},[178,58408,53341],{"class":323},[178,58410,336],{"class":319},[178,58412,58413,58415,58417],{"class":180,"line":18584},[178,58414,341],{"class":319},[178,58416,53541],{"class":323},[178,58418,336],{"class":319},[178,58420,58421,58423,58426,58428],{"class":180,"line":18589},[178,58422,12982],{"class":699},[178,58424,58425],{"class":195}," sliderData",[178,58427,734],{"class":699},[178,58429,57168],{"class":319},[178,58431,58432,58434,58436,58438,58440,58442,58444],{"class":180,"line":18603},[178,58433,57173],{"class":319},[178,58435,57176],{"class":188},[178,58437,57179],{"class":319},[178,58439,57182],{"class":188},[178,58441,57185],{"class":319},[178,58443,57188],{"class":188},[178,58445,57191],{"class":319},[178,58447,58448,58450,58452,58454,58456,58458,58460],{"class":180,"line":18608},[178,58449,57173],{"class":319},[178,58451,57198],{"class":188},[178,58453,57179],{"class":319},[178,58455,57203],{"class":188},[178,58457,57185],{"class":319},[178,58459,57208],{"class":188},[178,58461,57191],{"class":319},[178,58463,58464,58466,58468,58470,58472,58474,58476],{"class":180,"line":18613},[178,58465,57173],{"class":319},[178,58467,57217],{"class":188},[178,58469,57179],{"class":319},[178,58471,57222],{"class":188},[178,58473,57185],{"class":319},[178,58475,57227],{"class":188},[178,58477,57191],{"class":319},[178,58479,58480,58482,58484,58486,58488,58490,58492],{"class":180,"line":18627},[178,58481,57173],{"class":319},[178,58483,57236],{"class":188},[178,58485,57179],{"class":319},[178,58487,57241],{"class":188},[178,58489,57185],{"class":319},[178,58491,57246],{"class":188},[178,58493,57191],{"class":319},[178,58495,58496,58498,58500,58502,58504,58506,58508],{"class":180,"line":18639},[178,58497,57173],{"class":319},[178,58499,57255],{"class":188},[178,58501,57179],{"class":319},[178,58503,57260],{"class":188},[178,58505,57185],{"class":319},[178,58507,57265],{"class":188},[178,58509,57191],{"class":319},[178,58511,58512,58514,58516,58518,58520,58522,58524],{"class":180,"line":18644},[178,58513,57173],{"class":319},[178,58515,57274],{"class":188},[178,58517,57179],{"class":319},[178,58519,57279],{"class":188},[178,58521,57185],{"class":319},[178,58523,57284],{"class":188},[178,58525,57191],{"class":319},[178,58527,58528,58530,58532,58534,58536,58538,58540],{"class":180,"line":18657},[178,58529,57173],{"class":319},[178,58531,57293],{"class":188},[178,58533,57179],{"class":319},[178,58535,57298],{"class":188},[178,58537,57185],{"class":319},[178,58539,57303],{"class":188},[178,58541,57191],{"class":319},[178,58543,58544,58546,58548,58550,58552,58554,58556],{"class":180,"line":18662},[178,58545,57173],{"class":319},[178,58547,57312],{"class":188},[178,58549,57179],{"class":319},[178,58551,57317],{"class":188},[178,58553,57185],{"class":319},[178,58555,57322],{"class":188},[178,58557,57325],{"class":319},[178,58559,58560],{"class":180,"line":18667},[178,58561,54833],{"class":319},[178,58563,58564],{"class":180,"line":18672},[178,58565,58566],{"class":2008},"    \u002F\u002F 1.获取元素\n",[178,58568,58569,58571,58573,58575,58577,58579,58581,58583],{"class":180,"line":18685},[178,58570,12982],{"class":699},[178,58572,57336],{"class":195},[178,58574,734],{"class":699},[178,58576,56117],{"class":319},[178,58578,56120],{"class":184},[178,58580,944],{"class":319},[178,58582,57347],{"class":188},[178,58584,863],{"class":319},[178,58586,58587,58589,58591,58593,58595,58597,58599,58601],{"class":180,"line":18690},[178,58588,12982],{"class":699},[178,58590,8594],{"class":195},[178,58592,734],{"class":699},[178,58594,56117],{"class":319},[178,58596,56120],{"class":184},[178,58598,944],{"class":319},[178,58600,57366],{"class":188},[178,58602,863],{"class":319},[178,58604,58605,58607,58609,58611],{"class":180,"line":34365},[178,58606,53946],{"class":699},[178,58608,11199],{"class":319},[178,58610,330],{"class":699},[178,58612,49065],{"class":195},[178,58614,58615],{"class":180,"line":34371},[178,58616,58617],{"class":2008},"    \u002F\u002F 2.开启定时器\n",[178,58619,58620],{"class":180,"line":34377},[178,58621,58622],{"class":2008},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[178,58624,58625,58628,58630,58632],{"class":180,"line":34383},[178,58626,58627],{"class":184},"    setInterval",[178,58629,944],{"class":319},[178,58631,56170],{"class":699},[178,58633,56173],{"class":319},[178,58635,58636,58638],{"class":180,"line":34389},[178,58637,56178],{"class":319},[178,58639,4478],{"class":699},[178,58641,58642,58644,58646,58648,58651,58653],{"class":180,"line":34400},[178,58643,56201],{"class":699},[178,58645,56204],{"class":319},[178,58647,3505],{"class":699},[178,58649,58650],{"class":319}," sliderData.",[178,58652,53696],{"class":195},[178,58654,14203],{"class":319},[178,58656,58657,58660,58662],{"class":180,"line":34406},[178,58658,58659],{"class":319},"        i ",[178,58661,330],{"class":699},[178,58663,49065],{"class":195},[178,58665,58666],{"class":180,"line":34426},[178,58667,54125],{"class":319},[178,58669,58670],{"class":180,"line":34432},[178,58671,58672],{"class":2008},"      \u002F\u002F 更换图片路径\n",[178,58674,58675,58677,58679],{"class":180,"line":34443},[178,58676,57442],{"class":319},[178,58678,330],{"class":699},[178,58680,58681],{"class":319}," sliderData[i].url\n",[178,58683,58684],{"class":180,"line":34449},[178,58685,58686],{"class":2008},"      \u002F\u002F 把文字写到p里面\n",[178,58688,58689,58691,58693],{"class":180,"line":34455},[178,58690,57452],{"class":319},[178,58692,330],{"class":699},[178,58694,58695],{"class":319}," sliderData[i].title\n",[178,58697,58698],{"class":180,"line":34461},[178,58699,58700],{"class":2008},"      \u002F\u002F 小圆点\n",[178,58702,58703],{"class":180,"line":34467},[178,58704,58705],{"class":2008},"      \u002F\u002F 先删除以前的active\n",[178,58707,58708],{"class":180,"line":34473},[178,58709,58710],{"class":2008},"      \u002F\u002F 只让当前li添加active\n",[178,58712,58713,58715,58717,58719,58722,58725,58728,58730,58732],{"class":180,"line":34479},[178,58714,57492],{"class":319},[178,58716,56120],{"class":184},[178,58718,944],{"class":319},[178,58720,58721],{"class":188},"'.slider-footer .activate'",[178,58723,58724],{"class":319},").classList.",[178,58726,58727],{"class":184},"remove",[178,58729,944],{"class":319},[178,58731,57510],{"class":188},[178,58733,863],{"class":319},[178,58735,58736,58738,58740,58742,58745,58747,58749,58751,58754,58756,58758,58760,58762],{"class":180,"line":34485},[178,58737,57492],{"class":319},[178,58739,56120],{"class":184},[178,58741,944],{"class":319},[178,58743,58744],{"class":188},"`.slider-footer ul li:nth-child(${",[178,58746,2381],{"class":319},[178,58748,47298],{"class":699},[178,58750,26870],{"class":195},[178,58752,58753],{"class":188},"})`",[178,58755,58724],{"class":319},[178,58757,7103],{"class":184},[178,58759,944],{"class":319},[178,58761,57510],{"class":188},[178,58763,863],{"class":319},[178,58765,58766],{"class":180,"line":34505},[178,58767,722],{"emptyLinePlaceholder":721},[178,58769,58770,58772,58774],{"class":180,"line":34511},[178,58771,56256],{"class":319},[178,58773,8179],{"class":195},[178,58775,863],{"class":319},[178,58777,58778],{"class":180,"line":34527},[178,58779,722],{"emptyLinePlaceholder":721},[178,58781,58782,58784,58786],{"class":180,"line":34533},[178,58783,357],{"class":319},[178,58785,53541],{"class":323},[178,58787,336],{"class":319},[178,58789,58790,58792,58794],{"class":180,"line":34547},[178,58791,367],{"class":319},[178,58793,376],{"class":323},[178,58795,336],{"class":319},[178,58797,58798],{"class":180,"line":34553},[178,58799,722],{"emptyLinePlaceholder":721},[178,58801,58802,58804,58806],{"class":180,"line":34568},[178,58803,367],{"class":319},[178,58805,52367],{"class":323},[178,58807,336],{"class":319},[387,58809,58811],{"id":58810},"_317-重要知识点","3.1.7 重要知识点",[19,58813,58814,58815],{},"浏览器在渲染文本时， ",[2093,58816,58817],{},"没有空格或换行符就没有“断行点”",[19,58819,58820],{},[3269,58821],{"alt":160,"src":58822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,58824,58825],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,58827,58828],{},[3269,58829],{"alt":160,"src":58830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,58832,58833],{},[3269,58834],{"alt":160,"src":58835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,58837,58839],{"id":58838},"_32-dom事件基础","3.2 DOM事件基础",[387,58841,58843],{"id":58842},"_321-事件监听","3.2.1 事件监听",[19,58845,58846],{},[3269,58847],{"alt":160,"src":58848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,58850,58851],{},"事件监听有响应的发生",[19,58853,58854],{},[3269,58855],{"alt":160,"src":58856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,58858,58859],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,58861,58862],{},"对于有名函数,要执行的函数名后边不要加()",[387,58864,58866],{"id":58865},"_322-随机点名案例","3.2.2 随机点名案例",[154,58868,58870],{"className":52365,"code":58869,"language":52367,"meta":160,"style":160},"\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",[70,58871,58872,58882,58896,58900,58908,58922,58942,58954,58962,58968,58978,58988,58992,58996,59003,59014,59018,59022,59028,59040,59054,59064,59076,59089,59093,59097,59104,59108,59121,59133,59145,59149,59153,59157,59164,59174,59178,59182,59191,59203,59215,59230,59234,59242,59250,59254,59262,59275,59289,59302,59322,59330,59345,59365,59385,59393,59397,59405,59410,59446,59466,59471,59490,59495,59506,59511,59522,59527,59546,59561,59566,59592,59602,59611,59616,59632,59637,59642,59647,59662,59666,59670,59675,59694,59711,59719,59724,59739,59743,59747,59755,59763,59767],{"__ignoreMap":160},[178,58873,58874,58876,58878,58880],{"class":180,"line":181},[178,58875,53029],{"class":319},[178,58877,53032],{"class":323},[178,58879,53035],{"class":184},[178,58881,336],{"class":319},[178,58883,58884,58886,58888,58890,58892,58894],{"class":180,"line":263},[178,58885,320],{"class":319},[178,58887,52367],{"class":323},[178,58889,53046],{"class":184},[178,58891,330],{"class":319},[178,58893,53051],{"class":188},[178,58895,336],{"class":319},[178,58897,58898],{"class":180,"line":274},[178,58899,722],{"emptyLinePlaceholder":721},[178,58901,58902,58904,58906],{"class":180,"line":354},[178,58903,320],{"class":319},[178,58905,53064],{"class":323},[178,58907,336],{"class":319},[178,58909,58910,58912,58914,58916,58918,58920],{"class":180,"line":364},[178,58911,341],{"class":319},[178,58913,53074],{"class":323},[178,58915,53077],{"class":184},[178,58917,330],{"class":319},[178,58919,53082],{"class":188},[178,58921,336],{"class":319},[178,58923,58924,58926,58928,58930,58932,58934,58936,58938,58940],{"class":180,"line":740},[178,58925,341],{"class":319},[178,58927,53074],{"class":323},[178,58929,426],{"class":184},[178,58931,330],{"class":319},[178,58933,53121],{"class":188},[178,58935,53101],{"class":184},[178,58937,330],{"class":319},[178,58939,53128],{"class":188},[178,58941,336],{"class":319},[178,58943,58944,58946,58948,58950,58952],{"class":180,"line":746},[178,58945,341],{"class":319},[178,58947,53137],{"class":323},[178,58949,53140],{"class":319},[178,58951,53137],{"class":323},[178,58953,336],{"class":319},[178,58955,58956,58958,58960],{"class":180,"line":752},[178,58957,341],{"class":319},[178,58959,1853],{"class":323},[178,58961,336],{"class":319},[178,58963,58964,58966],{"class":180,"line":757},[178,58965,8172],{"class":323},[178,58967,17330],{"class":319},[178,58969,58970,58972,58974,58976],{"class":180,"line":763},[178,58971,56427],{"class":195},[178,58973,53167],{"class":319},[178,58975,2133],{"class":195},[178,58977,3100],{"class":319},[178,58979,58980,58982,58984,58986],{"class":180,"line":769},[178,58981,56416],{"class":195},[178,58983,53167],{"class":319},[178,58985,2133],{"class":195},[178,58987,3100],{"class":319},[178,58989,58990],{"class":180,"line":774},[178,58991,3971],{"class":319},[178,58993,58994],{"class":180,"line":780},[178,58995,722],{"emptyLinePlaceholder":721},[178,58997,58998,59001],{"class":180,"line":786},[178,58999,59000],{"class":323},"    h2",[178,59002,17330],{"class":319},[178,59004,59005,59008,59010,59012],{"class":180,"line":792},[178,59006,59007],{"class":195},"      text-align",[178,59009,53167],{"class":319},[178,59011,53322],{"class":195},[178,59013,3100],{"class":319},[178,59015,59016],{"class":180,"line":798},[178,59017,3971],{"class":319},[178,59019,59020],{"class":180,"line":804},[178,59021,722],{"emptyLinePlaceholder":721},[178,59023,59024,59026],{"class":180,"line":810},[178,59025,56473],{"class":184},[178,59027,17330],{"class":319},[178,59029,59030,59032,59034,59036,59038],{"class":180,"line":816},[178,59031,56492],{"class":195},[178,59033,53167],{"class":319},[178,59035,3345],{"class":195},[178,59037,53222],{"class":699},[178,59039,3100],{"class":319},[178,59041,59042,59044,59046,59048,59050,59052],{"class":180,"line":822},[178,59043,56427],{"class":195},[178,59045,53167],{"class":319},[178,59047,2596],{"class":195},[178,59049,53222],{"class":699},[178,59051,53286],{"class":195},[178,59053,3100],{"class":319},[178,59055,59056,59058,59060,59062],{"class":180,"line":827},[178,59057,56730],{"class":195},[178,59059,53167],{"class":319},[178,59061,53207],{"class":195},[178,59063,3100],{"class":319},[178,59065,59066,59068,59070,59072,59074],{"class":180,"line":832},[178,59067,56643],{"class":195},[178,59069,53167],{"class":319},[178,59071,2765],{"class":195},[178,59073,53222],{"class":699},[178,59075,3100],{"class":319},[178,59077,59078,59081,59083,59085,59087],{"class":180,"line":850},[178,59079,59080],{"class":195},"      line-height",[178,59082,53167],{"class":319},[178,59084,2341],{"class":195},[178,59086,53222],{"class":699},[178,59088,3100],{"class":319},[178,59090,59091],{"class":180,"line":866},[178,59092,3971],{"class":319},[178,59094,59095],{"class":180,"line":877},[178,59096,722],{"emptyLinePlaceholder":721},[178,59098,59099,59102],{"class":180,"line":882},[178,59100,59101],{"class":184},"    .qs",[178,59103,17330],{"class":319},[178,59105,59106],{"class":180,"line":898},[178,59107,722],{"emptyLinePlaceholder":721},[178,59109,59110,59112,59114,59117,59119],{"class":180,"line":914},[178,59111,56492],{"class":195},[178,59113,53167],{"class":319},[178,59115,59116],{"class":195},"450",[178,59118,53222],{"class":699},[178,59120,3100],{"class":319},[178,59122,59123,59125,59127,59129,59131],{"class":180,"line":919},[178,59124,56506],{"class":195},[178,59126,53167],{"class":319},[178,59128,2341],{"class":195},[178,59130,53222],{"class":699},[178,59132,3100],{"class":319},[178,59134,59135,59138,59140,59143],{"class":180,"line":935},[178,59136,59137],{"class":195},"      color",[178,59139,53167],{"class":319},[178,59141,59142],{"class":195},"red",[178,59144,3100],{"class":319},[178,59146,59147],{"class":180,"line":952},[178,59148,722],{"emptyLinePlaceholder":721},[178,59150,59151],{"class":180,"line":966},[178,59152,3971],{"class":319},[178,59154,59155],{"class":180,"line":980},[178,59156,722],{"emptyLinePlaceholder":721},[178,59158,59159,59162],{"class":180,"line":985},[178,59160,59161],{"class":184},"    .btns",[178,59163,17330],{"class":319},[178,59165,59166,59168,59170,59172],{"class":180,"line":1008},[178,59167,59007],{"class":195},[178,59169,53167],{"class":319},[178,59171,53322],{"class":195},[178,59173,3100],{"class":319},[178,59175,59176],{"class":180,"line":1014},[178,59177,3971],{"class":319},[178,59179,59180],{"class":180,"line":1019},[178,59181,722],{"emptyLinePlaceholder":721},[178,59183,59184,59186,59189],{"class":180,"line":1033},[178,59185,59161],{"class":184},[178,59187,59188],{"class":323}," button",[178,59190,17330],{"class":319},[178,59192,59193,59195,59197,59199,59201],{"class":180,"line":1046},[178,59194,56492],{"class":195},[178,59196,53167],{"class":319},[178,59198,2757],{"class":195},[178,59200,53222],{"class":699},[178,59202,3100],{"class":319},[178,59204,59205,59207,59209,59211,59213],{"class":180,"line":1059},[178,59206,56506],{"class":195},[178,59208,53167],{"class":319},[178,59210,2213],{"class":195},[178,59212,53222],{"class":699},[178,59214,3100],{"class":319},[178,59216,59217,59219,59221,59223,59226,59228],{"class":180,"line":1072},[178,59218,56427],{"class":195},[178,59220,53167],{"class":319},[178,59222,2133],{"class":195},[178,59224,59225],{"class":195}," 50",[178,59227,53222],{"class":699},[178,59229,3100],{"class":319},[178,59231,59232],{"class":180,"line":1077},[178,59233,3971],{"class":319},[178,59235,59236,59238,59240],{"class":180,"line":1082},[178,59237,357],{"class":319},[178,59239,1853],{"class":323},[178,59241,336],{"class":319},[178,59243,59244,59246,59248],{"class":180,"line":1099},[178,59245,367],{"class":319},[178,59247,53064],{"class":323},[178,59249,336],{"class":319},[178,59251,59252],{"class":180,"line":9806},[178,59253,722],{"emptyLinePlaceholder":721},[178,59255,59256,59258,59260],{"class":180,"line":9818},[178,59257,320],{"class":319},[178,59259,376],{"class":323},[178,59261,336],{"class":319},[178,59263,59264,59266,59268,59271,59273],{"class":180,"line":11477},[178,59265,341],{"class":319},[178,59267,14],{"class":323},[178,59269,59270],{"class":319},">随机点名\u003C\u002F",[178,59272,14],{"class":323},[178,59274,336],{"class":319},[178,59276,59277,59279,59281,59283,59285,59287],{"class":180,"line":11502},[178,59278,341],{"class":319},[178,59280,53341],{"class":323},[178,59282,55210],{"class":184},[178,59284,330],{"class":319},[178,59286,431],{"class":188},[178,59288,336],{"class":319},[178,59290,59291,59293,59295,59298,59300],{"class":180,"line":11525},[178,59292,53071],{"class":319},[178,59294,178],{"class":323},[178,59296,59297],{"class":319},">名字是：\u003C\u002F",[178,59299,178],{"class":323},[178,59301,336],{"class":319},[178,59303,59304,59306,59308,59310,59312,59315,59318,59320],{"class":180,"line":11549},[178,59305,53071],{"class":319},[178,59307,53341],{"class":323},[178,59309,55210],{"class":184},[178,59311,330],{"class":319},[178,59313,59314],{"class":188},"\"qs\"",[178,59316,59317],{"class":319},">这里显示姓名\u003C\u002F",[178,59319,53341],{"class":323},[178,59321,336],{"class":319},[178,59323,59324,59326,59328],{"class":180,"line":11554},[178,59325,357],{"class":319},[178,59327,53341],{"class":323},[178,59329,336],{"class":319},[178,59331,59332,59334,59336,59338,59340,59343],{"class":180,"line":11559},[178,59333,341],{"class":319},[178,59335,53341],{"class":323},[178,59337,55210],{"class":184},[178,59339,330],{"class":319},[178,59341,59342],{"class":188},"\"btns\"",[178,59344,336],{"class":319},[178,59346,59347,59349,59351,59353,59355,59358,59361,59363],{"class":180,"line":11564},[178,59348,53071],{"class":319},[178,59350,55608],{"class":323},[178,59352,55210],{"class":184},[178,59354,330],{"class":319},[178,59356,59357],{"class":188},"\"start\"",[178,59359,59360],{"class":319},">开始\u003C\u002F",[178,59362,55608],{"class":323},[178,59364,336],{"class":319},[178,59366,59367,59369,59371,59373,59375,59378,59381,59383],{"class":180,"line":11573},[178,59368,53071],{"class":319},[178,59370,55608],{"class":323},[178,59372,55210],{"class":184},[178,59374,330],{"class":319},[178,59376,59377],{"class":188},"\"end\"",[178,59379,59380],{"class":319},">结束\u003C\u002F",[178,59382,55608],{"class":323},[178,59384,336],{"class":319},[178,59386,59387,59389,59391],{"class":180,"line":11578},[178,59388,357],{"class":319},[178,59390,53341],{"class":323},[178,59392,336],{"class":319},[178,59394,59395],{"class":180,"line":11584},[178,59396,722],{"emptyLinePlaceholder":721},[178,59398,59399,59401,59403],{"class":180,"line":11605},[178,59400,341],{"class":319},[178,59402,53541],{"class":323},[178,59404,336],{"class":319},[178,59406,59407],{"class":180,"line":11611},[178,59408,59409],{"class":2008},"    \u002F\u002F 数据数组\n",[178,59411,59412,59414,59417,59419,59421,59424,59426,59429,59431,59434,59436,59439,59441,59444],{"class":180,"line":11625},[178,59413,12982],{"class":699},[178,59415,59416],{"class":195}," arr",[178,59418,734],{"class":699},[178,59420,53953],{"class":319},[178,59422,59423],{"class":188},"'马超'",[178,59425,14196],{"class":319},[178,59427,59428],{"class":188},"'黄忠'",[178,59430,14196],{"class":319},[178,59432,59433],{"class":188},"'赵云'",[178,59435,14196],{"class":319},[178,59437,59438],{"class":188},"'关羽'",[178,59440,14196],{"class":319},[178,59442,59443],{"class":188},"'张飞'",[178,59445,34978],{"class":319},[178,59447,59448,59450,59453,59455,59457,59459,59461,59464],{"class":180,"line":11631},[178,59449,12982],{"class":699},[178,59451,59452],{"class":195}," qs",[178,59454,734],{"class":699},[178,59456,56117],{"class":319},[178,59458,56120],{"class":184},[178,59460,944],{"class":319},[178,59462,59463],{"class":188},"'.qs'",[178,59465,863],{"class":319},[178,59467,59468],{"class":180,"line":11658},[178,59469,59470],{"class":2008},"    \u002F\u002F 1.业务1.开始按钮模块\n",[178,59472,59473,59475,59477,59479,59481,59483,59485,59488],{"class":180,"line":11667},[178,59474,12982],{"class":699},[178,59476,5955],{"class":195},[178,59478,734],{"class":699},[178,59480,56117],{"class":319},[178,59482,56120],{"class":184},[178,59484,944],{"class":319},[178,59486,59487],{"class":188},"'.start'",[178,59489,863],{"class":319},[178,59491,59492],{"class":180,"line":11673},[178,59493,59494],{"class":2008},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[178,59496,59497,59499,59502,59504],{"class":180,"line":11681},[178,59498,53946],{"class":699},[178,59500,59501],{"class":319}," timerId ",[178,59503,330],{"class":699},[178,59505,49065],{"class":195},[178,59507,59508],{"class":180,"line":11686},[178,59509,59510],{"class":2008},"    \u002F\u002F 随机号要全局变量\n",[178,59512,59513,59515,59518,59520],{"class":180,"line":18362},[178,59514,53946],{"class":699},[178,59516,59517],{"class":319}," random ",[178,59519,330],{"class":699},[178,59521,49065],{"class":195},[178,59523,59524],{"class":180,"line":18368},[178,59525,59526],{"class":2008},"    \u002F\u002F 1.1 添加点击事件\n",[178,59528,59529,59532,59535,59537,59540,59542,59544],{"class":180,"line":18391},[178,59530,59531],{"class":319},"    start.",[178,59533,59534],{"class":184},"addEventListener",[178,59536,944],{"class":319},[178,59538,59539],{"class":188},"'click'",[178,59541,14196],{"class":319},[178,59543,56170],{"class":699},[178,59545,56173],{"class":319},[178,59547,59548,59551,59553,59555,59557,59559],{"class":180,"line":18397},[178,59549,59550],{"class":319},"      timerId ",[178,59552,330],{"class":699},[178,59554,56165],{"class":184},[178,59556,944],{"class":319},[178,59558,56170],{"class":699},[178,59560,56173],{"class":319},[178,59562,59563],{"class":180,"line":18420},[178,59564,59565],{"class":2008},"        \u002F\u002F 随机数\n",[178,59567,59568,59571,59573,59576,59579,59582,59584,59586,59588,59590],{"class":180,"line":18434},[178,59569,59570],{"class":319},"        random ",[178,59572,330],{"class":699},[178,59574,59575],{"class":184}," parseInt",[178,59577,59578],{"class":319},"(Math.",[178,59580,59581],{"class":184},"random",[178,59583,14811],{"class":319},[178,59585,2395],{"class":699},[178,59587,53693],{"class":319},[178,59589,53696],{"class":195},[178,59591,863],{"class":319},[178,59593,59594,59597,59599],{"class":180,"line":18454},[178,59595,59596],{"class":319},"        qs.innerHTML ",[178,59598,330],{"class":699},[178,59600,59601],{"class":319}," arr[random]\n",[178,59603,59604,59607,59609],{"class":180,"line":18460},[178,59605,59606],{"class":319},"      }, ",[178,59608,2213],{"class":195},[178,59610,863],{"class":319},[178,59612,59613],{"class":180,"line":18471},[178,59614,59615],{"class":2008},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[178,59617,59618,59620,59623,59625,59628,59630],{"class":180,"line":18494},[178,59619,56201],{"class":699},[178,59621,59622],{"class":319}," (arr.",[178,59624,53696],{"class":195},[178,59626,59627],{"class":699}," ===",[178,59629,26870],{"class":195},[178,59631,14203],{"class":319},[178,59633,59634],{"class":180,"line":18516},[178,59635,59636],{"class":2008},"        \u002F\u002F start.disabled = true\n",[178,59638,59639],{"class":180,"line":18521},[178,59640,59641],{"class":2008},"        \u002F\u002F end.disabled = true\n",[178,59643,59644],{"class":180,"line":18527},[178,59645,59646],{"class":2008},"        \u002F\u002F 可以合起来写\n",[178,59648,59649,59652,59654,59657,59659],{"class":180,"line":18541},[178,59650,59651],{"class":319},"        start.disabled ",[178,59653,330],{"class":699},[178,59655,59656],{"class":319}," end.disabled ",[178,59658,330],{"class":699},[178,59660,59661],{"class":195}," true\n",[178,59663,59664],{"class":180,"line":18554},[178,59665,54125],{"class":319},[178,59667,59668],{"class":180,"line":18559},[178,59669,35193],{"class":319},[178,59671,59672],{"class":180,"line":18573},[178,59673,59674],{"class":2008},"    \u002F\u002F 1.2 关闭按钮模块\n",[178,59676,59677,59679,59681,59683,59685,59687,59689,59692],{"class":180,"line":18578},[178,59678,12982],{"class":699},[178,59680,5971],{"class":195},[178,59682,734],{"class":699},[178,59684,56117],{"class":319},[178,59686,56120],{"class":184},[178,59688,944],{"class":319},[178,59690,59691],{"class":188},"'.end'",[178,59693,863],{"class":319},[178,59695,59696,59699,59701,59703,59705,59707,59709],{"class":180,"line":18584},[178,59697,59698],{"class":319},"    end.",[178,59700,59534],{"class":184},[178,59702,944],{"class":319},[178,59704,59539],{"class":188},[178,59706,14196],{"class":319},[178,59708,56170],{"class":699},[178,59710,56173],{"class":319},[178,59712,59713,59716],{"class":180,"line":18589},[178,59714,59715],{"class":184},"      clearInterval",[178,59717,59718],{"class":319},"(timerId)\n",[178,59720,59721],{"class":180,"line":18603},[178,59722,59723],{"class":2008},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[178,59725,59726,59729,59732,59735,59737],{"class":180,"line":18608},[178,59727,59728],{"class":319},"      arr.",[178,59730,59731],{"class":184},"splice",[178,59733,59734],{"class":319},"(random, ",[178,59736,1665],{"class":195},[178,59738,863],{"class":319},[178,59740,59741],{"class":180,"line":18613},[178,59742,35193],{"class":319},[178,59744,59745],{"class":180,"line":18627},[178,59746,722],{"emptyLinePlaceholder":721},[178,59748,59749,59751,59753],{"class":180,"line":18639},[178,59750,357],{"class":319},[178,59752,53541],{"class":323},[178,59754,336],{"class":319},[178,59756,59757,59759,59761],{"class":180,"line":18644},[178,59758,367],{"class":319},[178,59760,376],{"class":323},[178,59762,336],{"class":319},[178,59764,59765],{"class":180,"line":18657},[178,59766,722],{"emptyLinePlaceholder":721},[178,59768,59769,59771,59773],{"class":180,"line":18662},[178,59770,367],{"class":319},[178,59772,52367],{"class":323},[178,59774,336],{"class":319},[19,59776,59777],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[387,59779,59781],{"id":59780},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[154,59783,59785],{"className":52365,"code":59784,"language":52367,"meta":160,"style":160},"\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",[70,59786,59787,59797,59811,59815,59823,59837,59857,59869,59877,59881,59889,59901,59909,59928,59945,59961,59971,59975,59983,59991,59995],{"__ignoreMap":160},[178,59788,59789,59791,59793,59795],{"class":180,"line":181},[178,59790,53029],{"class":319},[178,59792,53032],{"class":323},[178,59794,53035],{"class":184},[178,59796,336],{"class":319},[178,59798,59799,59801,59803,59805,59807,59809],{"class":180,"line":263},[178,59800,320],{"class":319},[178,59802,52367],{"class":323},[178,59804,53046],{"class":184},[178,59806,330],{"class":319},[178,59808,53051],{"class":188},[178,59810,336],{"class":319},[178,59812,59813],{"class":180,"line":274},[178,59814,722],{"emptyLinePlaceholder":721},[178,59816,59817,59819,59821],{"class":180,"line":354},[178,59818,320],{"class":319},[178,59820,53064],{"class":323},[178,59822,336],{"class":319},[178,59824,59825,59827,59829,59831,59833,59835],{"class":180,"line":364},[178,59826,341],{"class":319},[178,59828,53074],{"class":323},[178,59830,53077],{"class":184},[178,59832,330],{"class":319},[178,59834,53082],{"class":188},[178,59836,336],{"class":319},[178,59838,59839,59841,59843,59845,59847,59849,59851,59853,59855],{"class":180,"line":740},[178,59840,341],{"class":319},[178,59842,53074],{"class":323},[178,59844,426],{"class":184},[178,59846,330],{"class":319},[178,59848,53121],{"class":188},[178,59850,53101],{"class":184},[178,59852,330],{"class":319},[178,59854,53128],{"class":188},[178,59856,336],{"class":319},[178,59858,59859,59861,59863,59865,59867],{"class":180,"line":746},[178,59860,341],{"class":319},[178,59862,53137],{"class":323},[178,59864,53140],{"class":319},[178,59866,53137],{"class":323},[178,59868,336],{"class":319},[178,59870,59871,59873,59875],{"class":180,"line":752},[178,59872,367],{"class":319},[178,59874,53064],{"class":323},[178,59876,336],{"class":319},[178,59878,59879],{"class":180,"line":757},[178,59880,722],{"emptyLinePlaceholder":721},[178,59882,59883,59885,59887],{"class":180,"line":763},[178,59884,320],{"class":319},[178,59886,376],{"class":323},[178,59888,336],{"class":319},[178,59890,59891,59893,59895,59897,59899],{"class":180,"line":769},[178,59892,341],{"class":319},[178,59894,55608],{"class":323},[178,59896,55614],{"class":319},[178,59898,55608],{"class":323},[178,59900,336],{"class":319},[178,59902,59903,59905,59907],{"class":180,"line":774},[178,59904,341],{"class":319},[178,59906,53541],{"class":323},[178,59908,336],{"class":319},[178,59910,59911,59913,59915,59917,59919,59921,59923,59926],{"class":180,"line":780},[178,59912,12982],{"class":699},[178,59914,56112],{"class":195},[178,59916,734],{"class":699},[178,59918,56117],{"class":319},[178,59920,56120],{"class":184},[178,59922,944],{"class":319},[178,59924,59925],{"class":188},"'button'",[178,59927,863],{"class":319},[178,59929,59930,59933,59935,59937,59939,59941,59943],{"class":180,"line":786},[178,59931,59932],{"class":319},"    btn.",[178,59934,59534],{"class":184},[178,59936,944],{"class":319},[178,59938,59539],{"class":188},[178,59940,14196],{"class":319},[178,59942,56170],{"class":699},[178,59944,56173],{"class":319},[178,59946,59947,59950,59952,59954,59957,59959],{"class":180,"line":792},[178,59948,59949],{"class":699},"      const",[178,59951,4024],{"class":195},[178,59953,734],{"class":699},[178,59955,59956],{"class":319}," Math.",[178,59958,59581],{"class":184},[178,59960,3760],{"class":319},[178,59962,59963,59966,59969],{"class":180,"line":798},[178,59964,59965],{"class":319},"      console.",[178,59967,59968],{"class":184},"log",[178,59970,1965],{"class":319},[178,59972,59973],{"class":180,"line":804},[178,59974,35193],{"class":319},[178,59976,59977,59979,59981],{"class":180,"line":810},[178,59978,357],{"class":319},[178,59980,53541],{"class":323},[178,59982,336],{"class":319},[178,59984,59985,59987,59989],{"class":180,"line":816},[178,59986,367],{"class":319},[178,59988,376],{"class":323},[178,59990,336],{"class":319},[178,59992,59993],{"class":180,"line":822},[178,59994,722],{"emptyLinePlaceholder":721},[178,59996,59997,59999,60001],{"class":180,"line":827},[178,59998,367],{"class":319},[178,60000,52367],{"class":323},[178,60002,336],{"class":319},[19,60004,60005],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,60007,60008],{},"常量不可以重新赋值",[19,60010,60011],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[154,60013,60015],{"className":52365,"code":60014,"language":52367,"meta":160,"style":160},"\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",[70,60016,60017,60027,60041,60045,60053,60067,60087,60099,60107,60111,60119,60131,60139,60150,60168,60184,60198,60206,60210,60218,60226,60230],{"__ignoreMap":160},[178,60018,60019,60021,60023,60025],{"class":180,"line":181},[178,60020,53029],{"class":319},[178,60022,53032],{"class":323},[178,60024,53035],{"class":184},[178,60026,336],{"class":319},[178,60028,60029,60031,60033,60035,60037,60039],{"class":180,"line":263},[178,60030,320],{"class":319},[178,60032,52367],{"class":323},[178,60034,53046],{"class":184},[178,60036,330],{"class":319},[178,60038,53051],{"class":188},[178,60040,336],{"class":319},[178,60042,60043],{"class":180,"line":274},[178,60044,722],{"emptyLinePlaceholder":721},[178,60046,60047,60049,60051],{"class":180,"line":354},[178,60048,320],{"class":319},[178,60050,53064],{"class":323},[178,60052,336],{"class":319},[178,60054,60055,60057,60059,60061,60063,60065],{"class":180,"line":364},[178,60056,341],{"class":319},[178,60058,53074],{"class":323},[178,60060,53077],{"class":184},[178,60062,330],{"class":319},[178,60064,53082],{"class":188},[178,60066,336],{"class":319},[178,60068,60069,60071,60073,60075,60077,60079,60081,60083,60085],{"class":180,"line":740},[178,60070,341],{"class":319},[178,60072,53074],{"class":323},[178,60074,426],{"class":184},[178,60076,330],{"class":319},[178,60078,53121],{"class":188},[178,60080,53101],{"class":184},[178,60082,330],{"class":319},[178,60084,53128],{"class":188},[178,60086,336],{"class":319},[178,60088,60089,60091,60093,60095,60097],{"class":180,"line":746},[178,60090,341],{"class":319},[178,60092,53137],{"class":323},[178,60094,53140],{"class":319},[178,60096,53137],{"class":323},[178,60098,336],{"class":319},[178,60100,60101,60103,60105],{"class":180,"line":752},[178,60102,367],{"class":319},[178,60104,53064],{"class":323},[178,60106,336],{"class":319},[178,60108,60109],{"class":180,"line":757},[178,60110,722],{"emptyLinePlaceholder":721},[178,60112,60113,60115,60117],{"class":180,"line":763},[178,60114,320],{"class":319},[178,60116,376],{"class":323},[178,60118,336],{"class":319},[178,60120,60121,60123,60125,60127,60129],{"class":180,"line":769},[178,60122,341],{"class":319},[178,60124,55608],{"class":323},[178,60126,55614],{"class":319},[178,60128,55608],{"class":323},[178,60130,336],{"class":319},[178,60132,60133,60135,60137],{"class":180,"line":774},[178,60134,341],{"class":319},[178,60136,53541],{"class":323},[178,60138,336],{"class":319},[178,60140,60141,60143,60145,60147],{"class":180,"line":780},[178,60142,12982],{"class":699},[178,60144,4024],{"class":195},[178,60146,734],{"class":699},[178,60148,60149],{"class":195}," 10\n",[178,60151,60152,60154,60156,60158,60160,60162,60164,60166],{"class":180,"line":786},[178,60153,12982],{"class":699},[178,60155,56112],{"class":195},[178,60157,734],{"class":699},[178,60159,56117],{"class":319},[178,60161,56120],{"class":184},[178,60163,944],{"class":319},[178,60165,59925],{"class":188},[178,60167,863],{"class":319},[178,60169,60170,60172,60174,60176,60178,60180,60182],{"class":180,"line":792},[178,60171,59932],{"class":319},[178,60173,59534],{"class":184},[178,60175,944],{"class":319},[178,60177,59539],{"class":188},[178,60179,14196],{"class":319},[178,60181,56170],{"class":699},[178,60183,56173],{"class":319},[178,60185,60186,60188,60190,60192,60194,60196],{"class":180,"line":798},[178,60187,59949],{"class":699},[178,60189,4024],{"class":195},[178,60191,734],{"class":699},[178,60193,59956],{"class":319},[178,60195,59581],{"class":184},[178,60197,3760],{"class":319},[178,60199,60200,60202,60204],{"class":180,"line":804},[178,60201,59965],{"class":319},[178,60203,59968],{"class":184},[178,60205,1965],{"class":319},[178,60207,60208],{"class":180,"line":810},[178,60209,35193],{"class":319},[178,60211,60212,60214,60216],{"class":180,"line":816},[178,60213,357],{"class":319},[178,60215,53541],{"class":323},[178,60217,336],{"class":319},[178,60219,60220,60222,60224],{"class":180,"line":822},[178,60221,367],{"class":319},[178,60223,376],{"class":323},[178,60225,336],{"class":319},[178,60227,60228],{"class":180,"line":827},[178,60229,722],{"emptyLinePlaceholder":721},[178,60231,60232,60234,60236],{"class":180,"line":832},[178,60233,367],{"class":319},[178,60235,52367],{"class":323},[178,60237,336],{"class":319},[19,60239,60240],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[154,60242,60244],{"className":52365,"code":60243,"language":52367,"meta":160,"style":160},"\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",[70,60245,60246,60256,60270,60274,60282,60296,60316,60328,60336,60340,60348,60360,60368,60378,60396,60412,60425,60433,60437,60445,60453,60457],{"__ignoreMap":160},[178,60247,60248,60250,60252,60254],{"class":180,"line":181},[178,60249,53029],{"class":319},[178,60251,53032],{"class":323},[178,60253,53035],{"class":184},[178,60255,336],{"class":319},[178,60257,60258,60260,60262,60264,60266,60268],{"class":180,"line":263},[178,60259,320],{"class":319},[178,60261,52367],{"class":323},[178,60263,53046],{"class":184},[178,60265,330],{"class":319},[178,60267,53051],{"class":188},[178,60269,336],{"class":319},[178,60271,60272],{"class":180,"line":274},[178,60273,722],{"emptyLinePlaceholder":721},[178,60275,60276,60278,60280],{"class":180,"line":354},[178,60277,320],{"class":319},[178,60279,53064],{"class":323},[178,60281,336],{"class":319},[178,60283,60284,60286,60288,60290,60292,60294],{"class":180,"line":364},[178,60285,341],{"class":319},[178,60287,53074],{"class":323},[178,60289,53077],{"class":184},[178,60291,330],{"class":319},[178,60293,53082],{"class":188},[178,60295,336],{"class":319},[178,60297,60298,60300,60302,60304,60306,60308,60310,60312,60314],{"class":180,"line":740},[178,60299,341],{"class":319},[178,60301,53074],{"class":323},[178,60303,426],{"class":184},[178,60305,330],{"class":319},[178,60307,53121],{"class":188},[178,60309,53101],{"class":184},[178,60311,330],{"class":319},[178,60313,53128],{"class":188},[178,60315,336],{"class":319},[178,60317,60318,60320,60322,60324,60326],{"class":180,"line":746},[178,60319,341],{"class":319},[178,60321,53137],{"class":323},[178,60323,53140],{"class":319},[178,60325,53137],{"class":323},[178,60327,336],{"class":319},[178,60329,60330,60332,60334],{"class":180,"line":752},[178,60331,367],{"class":319},[178,60333,53064],{"class":323},[178,60335,336],{"class":319},[178,60337,60338],{"class":180,"line":757},[178,60339,722],{"emptyLinePlaceholder":721},[178,60341,60342,60344,60346],{"class":180,"line":763},[178,60343,320],{"class":319},[178,60345,376],{"class":323},[178,60347,336],{"class":319},[178,60349,60350,60352,60354,60356,60358],{"class":180,"line":769},[178,60351,341],{"class":319},[178,60353,55608],{"class":323},[178,60355,55614],{"class":319},[178,60357,55608],{"class":323},[178,60359,336],{"class":319},[178,60361,60362,60364,60366],{"class":180,"line":774},[178,60363,341],{"class":319},[178,60365,53541],{"class":323},[178,60367,336],{"class":319},[178,60369,60370,60372,60374,60376],{"class":180,"line":780},[178,60371,12982],{"class":699},[178,60373,4024],{"class":195},[178,60375,734],{"class":699},[178,60377,60149],{"class":195},[178,60379,60380,60382,60384,60386,60388,60390,60392,60394],{"class":180,"line":786},[178,60381,12982],{"class":699},[178,60383,56112],{"class":195},[178,60385,734],{"class":699},[178,60387,56117],{"class":319},[178,60389,56120],{"class":184},[178,60391,944],{"class":319},[178,60393,59925],{"class":188},[178,60395,863],{"class":319},[178,60397,60398,60400,60402,60404,60406,60408,60410],{"class":180,"line":792},[178,60399,59932],{"class":319},[178,60401,59534],{"class":184},[178,60403,944],{"class":319},[178,60405,59539],{"class":188},[178,60407,14196],{"class":319},[178,60409,56170],{"class":699},[178,60411,56173],{"class":319},[178,60413,60414,60417,60419,60421,60423],{"class":180,"line":798},[178,60415,60416],{"class":319},"      num ",[178,60418,330],{"class":699},[178,60420,59956],{"class":319},[178,60422,59581],{"class":184},[178,60424,3760],{"class":319},[178,60426,60427,60429,60431],{"class":180,"line":804},[178,60428,59965],{"class":319},[178,60430,59968],{"class":184},[178,60432,1965],{"class":319},[178,60434,60435],{"class":180,"line":810},[178,60436,35193],{"class":319},[178,60438,60439,60441,60443],{"class":180,"line":816},[178,60440,357],{"class":319},[178,60442,53541],{"class":323},[178,60444,336],{"class":319},[178,60446,60447,60449,60451],{"class":180,"line":822},[178,60448,367],{"class":319},[178,60450,376],{"class":323},[178,60452,336],{"class":319},[178,60454,60455],{"class":180,"line":827},[178,60456,722],{"emptyLinePlaceholder":721},[178,60458,60459,60461,60463],{"class":180,"line":832},[178,60460,367],{"class":319},[178,60462,52367],{"class":323},[178,60464,336],{"class":319},[19,60466,60467],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[387,60469,60471],{"id":60470},"_324-事件监听版本","3.2.4 事件监听版本",[19,60473,60474],{},[3269,60475],{"alt":160,"src":60476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,60478,60479],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,60481,60482],{},"这种方式会覆盖前边的事件监听:",[154,60484,60486],{"className":52365,"code":60485,"language":52367,"meta":160,"style":160},"\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",[70,60487,60488,60498,60512,60516,60524,60538,60558,60570,60578,60582,60590,60602,60610,60628,60642,60653,60657,60669,60679,60683,60691,60699,60703],{"__ignoreMap":160},[178,60489,60490,60492,60494,60496],{"class":180,"line":181},[178,60491,53029],{"class":319},[178,60493,53032],{"class":323},[178,60495,53035],{"class":184},[178,60497,336],{"class":319},[178,60499,60500,60502,60504,60506,60508,60510],{"class":180,"line":263},[178,60501,320],{"class":319},[178,60503,52367],{"class":323},[178,60505,53046],{"class":184},[178,60507,330],{"class":319},[178,60509,53051],{"class":188},[178,60511,336],{"class":319},[178,60513,60514],{"class":180,"line":274},[178,60515,722],{"emptyLinePlaceholder":721},[178,60517,60518,60520,60522],{"class":180,"line":354},[178,60519,320],{"class":319},[178,60521,53064],{"class":323},[178,60523,336],{"class":319},[178,60525,60526,60528,60530,60532,60534,60536],{"class":180,"line":364},[178,60527,341],{"class":319},[178,60529,53074],{"class":323},[178,60531,53077],{"class":184},[178,60533,330],{"class":319},[178,60535,53082],{"class":188},[178,60537,336],{"class":319},[178,60539,60540,60542,60544,60546,60548,60550,60552,60554,60556],{"class":180,"line":740},[178,60541,341],{"class":319},[178,60543,53074],{"class":323},[178,60545,426],{"class":184},[178,60547,330],{"class":319},[178,60549,53121],{"class":188},[178,60551,53101],{"class":184},[178,60553,330],{"class":319},[178,60555,53128],{"class":188},[178,60557,336],{"class":319},[178,60559,60560,60562,60564,60566,60568],{"class":180,"line":746},[178,60561,341],{"class":319},[178,60563,53137],{"class":323},[178,60565,53140],{"class":319},[178,60567,53137],{"class":323},[178,60569,336],{"class":319},[178,60571,60572,60574,60576],{"class":180,"line":752},[178,60573,367],{"class":319},[178,60575,53064],{"class":323},[178,60577,336],{"class":319},[178,60579,60580],{"class":180,"line":757},[178,60581,722],{"emptyLinePlaceholder":721},[178,60583,60584,60586,60588],{"class":180,"line":763},[178,60585,320],{"class":319},[178,60587,376],{"class":323},[178,60589,336],{"class":319},[178,60591,60592,60594,60596,60598,60600],{"class":180,"line":769},[178,60593,341],{"class":319},[178,60595,55608],{"class":323},[178,60597,55614],{"class":319},[178,60599,55608],{"class":323},[178,60601,336],{"class":319},[178,60603,60604,60606,60608],{"class":180,"line":774},[178,60605,341],{"class":319},[178,60607,53541],{"class":323},[178,60609,336],{"class":319},[178,60611,60612,60614,60616,60618,60620,60622,60624,60626],{"class":180,"line":780},[178,60613,12982],{"class":699},[178,60615,56112],{"class":195},[178,60617,734],{"class":699},[178,60619,56117],{"class":319},[178,60621,56120],{"class":184},[178,60623,944],{"class":319},[178,60625,59925],{"class":188},[178,60627,863],{"class":319},[178,60629,60630,60632,60635,60637,60640],{"class":180,"line":786},[178,60631,59932],{"class":319},[178,60633,60634],{"class":184},"onclick",[178,60636,734],{"class":699},[178,60638,60639],{"class":699}," function",[178,60641,56173],{"class":319},[178,60643,60644,60647,60649,60651],{"class":180,"line":792},[178,60645,60646],{"class":184},"      alert",[178,60648,944],{"class":319},[178,60650,2412],{"class":195},[178,60652,863],{"class":319},[178,60654,60655],{"class":180,"line":798},[178,60656,3971],{"class":319},[178,60658,60659,60661,60663,60665,60667],{"class":180,"line":804},[178,60660,59932],{"class":319},[178,60662,60634],{"class":184},[178,60664,734],{"class":699},[178,60666,60639],{"class":699},[178,60668,56173],{"class":319},[178,60670,60671,60673,60675,60677],{"class":180,"line":810},[178,60672,60646],{"class":184},[178,60674,944],{"class":319},[178,60676,2690],{"class":195},[178,60678,863],{"class":319},[178,60680,60681],{"class":180,"line":816},[178,60682,3971],{"class":319},[178,60684,60685,60687,60689],{"class":180,"line":822},[178,60686,357],{"class":319},[178,60688,53541],{"class":323},[178,60690,336],{"class":319},[178,60692,60693,60695,60697],{"class":180,"line":827},[178,60694,367],{"class":319},[178,60696,376],{"class":323},[178,60698,336],{"class":319},[178,60700,60701],{"class":180,"line":832},[178,60702,722],{"emptyLinePlaceholder":721},[178,60704,60705,60707,60709],{"class":180,"line":850},[178,60706,367],{"class":319},[178,60708,52367],{"class":323},[178,60710,336],{"class":319},[19,60712,60713],{},"只要点击就输出结果为22,前边11被覆盖了",[154,60715,60717],{"className":52365,"code":60716,"language":52367,"meta":160,"style":160},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[70,60718,60719,60724,60729,60733,60738,60743],{"__ignoreMap":160},[178,60720,60721],{"class":180,"line":181},[178,60722,60723],{"class":319},"  btn.addEventListener('click', function () {\n",[178,60725,60726],{"class":180,"line":263},[178,60727,60728],{"class":319},"      alert(11)\n",[178,60730,60731],{"class":180,"line":274},[178,60732,35193],{"class":319},[178,60734,60735],{"class":180,"line":354},[178,60736,60737],{"class":319},"    btn.addEventListener('click', function () {\n",[178,60739,60740],{"class":180,"line":364},[178,60741,60742],{"class":319},"      alert(22)\n",[178,60744,60745],{"class":180,"line":740},[178,60746,35193],{"class":319},[19,60748,60749],{},"点击第一次输出11,第二次点击为22",[387,60751,60753],{"id":60752},"_325-事件类型","3.2.5 事件类型",[19,60755,60756],{},[3269,60757],{"alt":160,"src":60758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[23756,60760,60762],{"id":60761},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,60764,60765],{},"补充知识:",[19,60767,60768],{},"轮播图自动播放模块,可以使用",[19,60770,60771],{},"let timerId = setInterval(function () {",[19,60773,60774],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,60776,60777],{},"用js方法模拟进行点击事件,click必须加()",[19,60779,60780],{},"next.click()",[19,60782,60783],{},"}, 1000)",[19,60785,60786],{},[3269,60787],{"alt":160,"src":60788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[154,60790,60792],{"className":310,"code":60791,"language":312,"meta":160,"style":160},"\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",[70,60793,60794,60798,60808,60822,60826,60834,60849,60869,60889,60902,60910,60915,60920,60924,60928,60933,60938,60943,60948,60952,60956,60961,60966,60971,60975,60979,60984,60988,60993,60998,61002,61006,61011,61016,61021,61026,61031,61035,61039,61044,61049,61054,61059,61064,61068,61072,61077,61082,61087,61092,61097,61102,61107,61112,61117,61122,61126,61130,61135,61140,61144,61148,61153,61158,61162,61167,61172,61176,61180,61185,61189,61194,61199,61203,61208,61212,61216,61221,61226,61231,61236,61241,61246,61251,61255,61259,61263,61268,61273,61278,61283,61287,61295,61303,61307,61315,61330,61344,61365,61373,61387,61400,61415,61434,61446,61458,61470,61482,61494,61506,61518,61526,61541,61565,61589,61597,61605,61613,61621,61626,61631,61636,61641,61646,61651,61656,61661,61666,61671,61675,61680,61685,61690,61695,61700,61705,61710,61715,61720,61724,61729,61734,61739,61744,61749,61754,61759,61764,61769,61774,61779,61784,61788,61792,61797,61802,61807,61811,61816,61821,61826,61831,61836,61840,61845,61849,61853,61857,61861,61865,61869,61874,61879,61884,61889,61894,61899,61904,61909,61914,61918,61922,61927,61932,61937,61942,61947,61951,61956,61961,61966,61971,61976,61981,61985,61989,61994,61998,62003,62007,62012,62017,62022,62027,62032,62037,62041,62049,62057,62061],{"__ignoreMap":160},[178,60795,60796],{"class":180,"line":181},[178,60797,722],{"emptyLinePlaceholder":721},[178,60799,60800,60802,60804,60806],{"class":180,"line":263},[178,60801,53029],{"class":319},[178,60803,53032],{"class":699},[178,60805,53035],{"class":195},[178,60807,336],{"class":319},[178,60809,60810,60812,60814,60816,60818,60820],{"class":180,"line":274},[178,60811,320],{"class":319},[178,60813,52367],{"class":323},[178,60815,53046],{"class":184},[178,60817,330],{"class":319},[178,60819,53051],{"class":188},[178,60821,336],{"class":319},[178,60823,60824],{"class":180,"line":354},[178,60825,722],{"emptyLinePlaceholder":721},[178,60827,60828,60830,60832],{"class":180,"line":364},[178,60829,320],{"class":319},[178,60831,53064],{"class":323},[178,60833,336],{"class":319},[178,60835,60836,60838,60840,60842,60844,60846],{"class":180,"line":740},[178,60837,341],{"class":319},[178,60839,53074],{"class":323},[178,60841,53077],{"class":184},[178,60843,330],{"class":319},[178,60845,53082],{"class":188},[178,60847,60848],{"class":319}," \u002F>\n",[178,60850,60851,60853,60855,60857,60859,60861,60863,60865,60867],{"class":180,"line":746},[178,60852,341],{"class":319},[178,60854,53074],{"class":323},[178,60856,53093],{"class":184},[178,60858,330],{"class":319},[178,60860,53098],{"class":188},[178,60862,53101],{"class":184},[178,60864,330],{"class":319},[178,60866,53106],{"class":188},[178,60868,60848],{"class":319},[178,60870,60871,60873,60875,60877,60879,60881,60883,60885,60887],{"class":180,"line":752},[178,60872,341],{"class":319},[178,60874,53074],{"class":323},[178,60876,426],{"class":184},[178,60878,330],{"class":319},[178,60880,53121],{"class":188},[178,60882,53101],{"class":184},[178,60884,330],{"class":319},[178,60886,53128],{"class":188},[178,60888,60848],{"class":319},[178,60890,60891,60893,60895,60898,60900],{"class":180,"line":757},[178,60892,341],{"class":319},[178,60894,53137],{"class":323},[178,60896,60897],{"class":319},">轮播图点击切换\u003C\u002F",[178,60899,53137],{"class":323},[178,60901,336],{"class":319},[178,60903,60904,60906,60908],{"class":180,"line":763},[178,60905,341],{"class":319},[178,60907,1853],{"class":323},[178,60909,336],{"class":319},[178,60911,60912],{"class":180,"line":769},[178,60913,60914],{"class":319},"    * {\n",[178,60916,60917],{"class":180,"line":774},[178,60918,60919],{"class":319},"      box-sizing: border-box;\n",[178,60921,60922],{"class":180,"line":780},[178,60923,3971],{"class":319},[178,60925,60926],{"class":180,"line":786},[178,60927,722],{"emptyLinePlaceholder":721},[178,60929,60930],{"class":180,"line":792},[178,60931,60932],{"class":319},"    .slider {\n",[178,60934,60935],{"class":180,"line":798},[178,60936,60937],{"class":319},"      width: 560px;\n",[178,60939,60940],{"class":180,"line":804},[178,60941,60942],{"class":319},"      height: 400px;\n",[178,60944,60945],{"class":180,"line":810},[178,60946,60947],{"class":319},"      overflow: hidden;\n",[178,60949,60950],{"class":180,"line":816},[178,60951,3971],{"class":319},[178,60953,60954],{"class":180,"line":822},[178,60955,722],{"emptyLinePlaceholder":721},[178,60957,60958],{"class":180,"line":827},[178,60959,60960],{"class":319},"    .slider-wrapper {\n",[178,60962,60963],{"class":180,"line":832},[178,60964,60965],{"class":319},"      width: 100%;\n",[178,60967,60968],{"class":180,"line":850},[178,60969,60970],{"class":319},"      height: 320px;\n",[178,60972,60973],{"class":180,"line":866},[178,60974,3971],{"class":319},[178,60976,60977],{"class":180,"line":877},[178,60978,722],{"emptyLinePlaceholder":721},[178,60980,60981],{"class":180,"line":882},[178,60982,60983],{"class":319},"    .slider-wrapper img {\n",[178,60985,60986],{"class":180,"line":898},[178,60987,60965],{"class":319},[178,60989,60990],{"class":180,"line":914},[178,60991,60992],{"class":319},"      height: 100%;\n",[178,60994,60995],{"class":180,"line":919},[178,60996,60997],{"class":319},"      display: block;\n",[178,60999,61000],{"class":180,"line":935},[178,61001,3971],{"class":319},[178,61003,61004],{"class":180,"line":952},[178,61005,722],{"emptyLinePlaceholder":721},[178,61007,61008],{"class":180,"line":966},[178,61009,61010],{"class":319},"    .slider-footer {\n",[178,61012,61013],{"class":180,"line":980},[178,61014,61015],{"class":319},"      height: 80px;\n",[178,61017,61018],{"class":180,"line":985},[178,61019,61020],{"class":319},"      background-color: rgb(100, 67, 68);\n",[178,61022,61023],{"class":180,"line":1008},[178,61024,61025],{"class":319},"      padding: 12px 12px 0 12px;\n",[178,61027,61028],{"class":180,"line":1014},[178,61029,61030],{"class":319},"      position: relative;\n",[178,61032,61033],{"class":180,"line":1019},[178,61034,3971],{"class":319},[178,61036,61037],{"class":180,"line":1033},[178,61038,722],{"emptyLinePlaceholder":721},[178,61040,61041],{"class":180,"line":1046},[178,61042,61043],{"class":319},"    .slider-footer .toggle {\n",[178,61045,61046],{"class":180,"line":1059},[178,61047,61048],{"class":319},"      position: absolute;\n",[178,61050,61051],{"class":180,"line":1072},[178,61052,61053],{"class":319},"      right: 0;\n",[178,61055,61056],{"class":180,"line":1077},[178,61057,61058],{"class":319},"      top: 12px;\n",[178,61060,61061],{"class":180,"line":1082},[178,61062,61063],{"class":319},"      display: flex;\n",[178,61065,61066],{"class":180,"line":1099},[178,61067,3971],{"class":319},[178,61069,61070],{"class":180,"line":9806},[178,61071,722],{"emptyLinePlaceholder":721},[178,61073,61074],{"class":180,"line":9818},[178,61075,61076],{"class":319},"    .slider-footer .toggle button {\n",[178,61078,61079],{"class":180,"line":11477},[178,61080,61081],{"class":319},"      margin-right: 12px;\n",[178,61083,61084],{"class":180,"line":11502},[178,61085,61086],{"class":319},"      width: 28px;\n",[178,61088,61089],{"class":180,"line":11525},[178,61090,61091],{"class":319},"      height: 28px;\n",[178,61093,61094],{"class":180,"line":11549},[178,61095,61096],{"class":319},"      appearance: none;\n",[178,61098,61099],{"class":180,"line":11554},[178,61100,61101],{"class":319},"      border: none;\n",[178,61103,61104],{"class":180,"line":11559},[178,61105,61106],{"class":319},"      background: rgba(255, 255, 255, 0.1);\n",[178,61108,61109],{"class":180,"line":11564},[178,61110,61111],{"class":319},"      color: #fff;\n",[178,61113,61114],{"class":180,"line":11573},[178,61115,61116],{"class":319},"      border-radius: 4px;\n",[178,61118,61119],{"class":180,"line":11578},[178,61120,61121],{"class":319},"      cursor: pointer;\n",[178,61123,61124],{"class":180,"line":11584},[178,61125,3971],{"class":319},[178,61127,61128],{"class":180,"line":11605},[178,61129,722],{"emptyLinePlaceholder":721},[178,61131,61132],{"class":180,"line":11611},[178,61133,61134],{"class":319},"    .slider-footer .toggle button:hover {\n",[178,61136,61137],{"class":180,"line":11625},[178,61138,61139],{"class":319},"      background: rgba(255, 255, 255, 0.2);\n",[178,61141,61142],{"class":180,"line":11631},[178,61143,3971],{"class":319},[178,61145,61146],{"class":180,"line":11658},[178,61147,722],{"emptyLinePlaceholder":721},[178,61149,61150],{"class":180,"line":11667},[178,61151,61152],{"class":319},"    .slider-footer p {\n",[178,61154,61155],{"class":180,"line":11673},[178,61156,61157],{"class":319},"      margin: 0;\n",[178,61159,61160],{"class":180,"line":11681},[178,61161,61111],{"class":319},[178,61163,61164],{"class":180,"line":11686},[178,61165,61166],{"class":319},"      font-size: 18px;\n",[178,61168,61169],{"class":180,"line":18362},[178,61170,61171],{"class":319},"      margin-bottom: 10px;\n",[178,61173,61174],{"class":180,"line":18368},[178,61175,3971],{"class":319},[178,61177,61178],{"class":180,"line":18391},[178,61179,722],{"emptyLinePlaceholder":721},[178,61181,61182],{"class":180,"line":18397},[178,61183,61184],{"class":319},"    .slider-indicator {\n",[178,61186,61187],{"class":180,"line":18420},[178,61188,61157],{"class":319},[178,61190,61191],{"class":180,"line":18434},[178,61192,61193],{"class":319},"      padding: 0;\n",[178,61195,61196],{"class":180,"line":18454},[178,61197,61198],{"class":319},"      list-style: none;\n",[178,61200,61201],{"class":180,"line":18460},[178,61202,61063],{"class":319},[178,61204,61205],{"class":180,"line":18471},[178,61206,61207],{"class":319},"      align-items: center;\n",[178,61209,61210],{"class":180,"line":18494},[178,61211,3971],{"class":319},[178,61213,61214],{"class":180,"line":18516},[178,61215,722],{"emptyLinePlaceholder":721},[178,61217,61218],{"class":180,"line":18521},[178,61219,61220],{"class":319},"    .slider-indicator li {\n",[178,61222,61223],{"class":180,"line":18527},[178,61224,61225],{"class":319},"      width: 8px;\n",[178,61227,61228],{"class":180,"line":18541},[178,61229,61230],{"class":319},"      height: 8px;\n",[178,61232,61233],{"class":180,"line":18554},[178,61234,61235],{"class":319},"      margin: 4px;\n",[178,61237,61238],{"class":180,"line":18559},[178,61239,61240],{"class":319},"      border-radius: 50%;\n",[178,61242,61243],{"class":180,"line":18573},[178,61244,61245],{"class":319},"      background: #fff;\n",[178,61247,61248],{"class":180,"line":18578},[178,61249,61250],{"class":319},"      opacity: 0.4;\n",[178,61252,61253],{"class":180,"line":18584},[178,61254,61121],{"class":319},[178,61256,61257],{"class":180,"line":18589},[178,61258,3971],{"class":319},[178,61260,61261],{"class":180,"line":18603},[178,61262,722],{"emptyLinePlaceholder":721},[178,61264,61265],{"class":180,"line":18608},[178,61266,61267],{"class":319},"    .slider-indicator li.active {\n",[178,61269,61270],{"class":180,"line":18613},[178,61271,61272],{"class":319},"      width: 12px;\n",[178,61274,61275],{"class":180,"line":18627},[178,61276,61277],{"class":319},"      height: 12px;\n",[178,61279,61280],{"class":180,"line":18639},[178,61281,61282],{"class":319},"      opacity: 1;\n",[178,61284,61285],{"class":180,"line":18644},[178,61286,3971],{"class":319},[178,61288,61289,61291,61293],{"class":180,"line":18657},[178,61290,357],{"class":319},[178,61292,1853],{"class":323},[178,61294,336],{"class":319},[178,61296,61297,61299,61301],{"class":180,"line":18662},[178,61298,367],{"class":319},[178,61300,53064],{"class":323},[178,61302,336],{"class":319},[178,61304,61305],{"class":180,"line":18667},[178,61306,722],{"emptyLinePlaceholder":721},[178,61308,61309,61311,61313],{"class":180,"line":18672},[178,61310,320],{"class":319},[178,61312,376],{"class":323},[178,61314,336],{"class":319},[178,61316,61317,61319,61321,61323,61325,61328],{"class":180,"line":18685},[178,61318,341],{"class":319},[178,61320,53341],{"class":323},[178,61322,55210],{"class":184},[178,61324,330],{"class":319},[178,61326,61327],{"class":188},"\"slider\"",[178,61329,336],{"class":319},[178,61331,61332,61334,61336,61338,61340,61342],{"class":180,"line":18690},[178,61333,53071],{"class":319},[178,61335,53341],{"class":323},[178,61337,55210],{"class":184},[178,61339,330],{"class":319},[178,61341,56948],{"class":188},[178,61343,336],{"class":319},[178,61345,61346,61348,61350,61352,61354,61357,61359,61361,61363],{"class":180,"line":34365},[178,61347,56955],{"class":319},[178,61349,3269],{"class":323},[178,61351,56960],{"class":184},[178,61353,330],{"class":319},[178,61355,61356],{"class":188},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[178,61358,56968],{"class":184},[178,61360,330],{"class":319},[178,61362,9421],{"class":188},[178,61364,60848],{"class":319},[178,61366,61367,61369,61371],{"class":180,"line":34371},[178,61368,53506],{"class":319},[178,61370,53341],{"class":323},[178,61372,336],{"class":319},[178,61374,61375,61377,61379,61381,61383,61385],{"class":180,"line":34377},[178,61376,53071],{"class":319},[178,61378,53341],{"class":323},[178,61380,55210],{"class":184},[178,61382,330],{"class":319},[178,61384,56995],{"class":188},[178,61386,336],{"class":319},[178,61388,61389,61391,61393,61396,61398],{"class":180,"line":34383},[178,61390,56955],{"class":319},[178,61392,19],{"class":323},[178,61394,61395],{"class":319},">对人类来说会不会太超前了？\u003C\u002F",[178,61397,19],{"class":323},[178,61399,336],{"class":319},[178,61401,61402,61404,61406,61408,61410,61413],{"class":180,"line":34389},[178,61403,56955],{"class":319},[178,61405,2946],{"class":323},[178,61407,55210],{"class":184},[178,61409,330],{"class":319},[178,61411,61412],{"class":188},"\"slider-indicator\"",[178,61414,336],{"class":319},[178,61416,61417,61419,61421,61423,61425,61428,61430,61432],{"class":180,"line":34400},[178,61418,57023],{"class":319},[178,61420,29],{"class":323},[178,61422,55210],{"class":184},[178,61424,330],{"class":319},[178,61426,61427],{"class":188},"\"active\"",[178,61429,57035],{"class":319},[178,61431,29],{"class":323},[178,61433,336],{"class":319},[178,61435,61436,61438,61440,61442,61444],{"class":180,"line":34406},[178,61437,57023],{"class":319},[178,61439,29],{"class":323},[178,61441,57035],{"class":319},[178,61443,29],{"class":323},[178,61445,336],{"class":319},[178,61447,61448,61450,61452,61454,61456],{"class":180,"line":34426},[178,61449,57023],{"class":319},[178,61451,29],{"class":323},[178,61453,57035],{"class":319},[178,61455,29],{"class":323},[178,61457,336],{"class":319},[178,61459,61460,61462,61464,61466,61468],{"class":180,"line":34432},[178,61461,57023],{"class":319},[178,61463,29],{"class":323},[178,61465,57035],{"class":319},[178,61467,29],{"class":323},[178,61469,336],{"class":319},[178,61471,61472,61474,61476,61478,61480],{"class":180,"line":34443},[178,61473,57023],{"class":319},[178,61475,29],{"class":323},[178,61477,57035],{"class":319},[178,61479,29],{"class":323},[178,61481,336],{"class":319},[178,61483,61484,61486,61488,61490,61492],{"class":180,"line":34449},[178,61485,57023],{"class":319},[178,61487,29],{"class":323},[178,61489,57035],{"class":319},[178,61491,29],{"class":323},[178,61493,336],{"class":319},[178,61495,61496,61498,61500,61502,61504],{"class":180,"line":34455},[178,61497,57023],{"class":319},[178,61499,29],{"class":323},[178,61501,57035],{"class":319},[178,61503,29],{"class":323},[178,61505,336],{"class":319},[178,61507,61508,61510,61512,61514,61516],{"class":180,"line":34461},[178,61509,57023],{"class":319},[178,61511,29],{"class":323},[178,61513,57035],{"class":319},[178,61515,29],{"class":323},[178,61517,336],{"class":319},[178,61519,61520,61522,61524],{"class":180,"line":34467},[178,61521,57128],{"class":319},[178,61523,2946],{"class":323},[178,61525,336],{"class":319},[178,61527,61528,61530,61532,61534,61536,61539],{"class":180,"line":34473},[178,61529,56955],{"class":319},[178,61531,53341],{"class":323},[178,61533,55210],{"class":184},[178,61535,330],{"class":319},[178,61537,61538],{"class":188},"\"toggle\"",[178,61540,336],{"class":319},[178,61542,61543,61545,61547,61549,61551,61554,61556,61559,61561,61563],{"class":180,"line":34479},[178,61544,57023],{"class":319},[178,61546,55608],{"class":323},[178,61548,55210],{"class":184},[178,61550,330],{"class":319},[178,61552,61553],{"class":188},"\"prev\"",[178,61555,2899],{"class":319},[178,61557,61558],{"class":195},"&lt;",[178,61560,367],{"class":319},[178,61562,55608],{"class":323},[178,61564,336],{"class":319},[178,61566,61567,61569,61571,61573,61575,61578,61580,61583,61585,61587],{"class":180,"line":34485},[178,61568,57023],{"class":319},[178,61570,55608],{"class":323},[178,61572,55210],{"class":184},[178,61574,330],{"class":319},[178,61576,61577],{"class":188},"\"next\"",[178,61579,2899],{"class":319},[178,61581,61582],{"class":195},"&gt;",[178,61584,367],{"class":319},[178,61586,55608],{"class":323},[178,61588,336],{"class":319},[178,61590,61591,61593,61595],{"class":180,"line":34505},[178,61592,57128],{"class":319},[178,61594,53341],{"class":323},[178,61596,336],{"class":319},[178,61598,61599,61601,61603],{"class":180,"line":34511},[178,61600,53506],{"class":319},[178,61602,53341],{"class":323},[178,61604,336],{"class":319},[178,61606,61607,61609,61611],{"class":180,"line":34527},[178,61608,357],{"class":319},[178,61610,53341],{"class":323},[178,61612,336],{"class":319},[178,61614,61615,61617,61619],{"class":180,"line":34533},[178,61616,341],{"class":319},[178,61618,53541],{"class":323},[178,61620,336],{"class":319},[178,61622,61623],{"class":180,"line":34547},[178,61624,61625],{"class":319},"    \u002F\u002F 1. 初始数据\n",[178,61627,61628],{"class":180,"line":34553},[178,61629,61630],{"class":319},"    const data = [\n",[178,61632,61633],{"class":180,"line":34568},[178,61634,61635],{"class":319},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[178,61637,61638],{"class":180,"line":34574},[178,61639,61640],{"class":319},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[178,61642,61643],{"class":180,"line":34583},[178,61644,61645],{"class":319},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[178,61647,61648],{"class":180,"line":34589},[178,61649,61650],{"class":319},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[178,61652,61653],{"class":180,"line":34598},[178,61654,61655],{"class":319},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[178,61657,61658],{"class":180,"line":34604},[178,61659,61660],{"class":319},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[178,61662,61663],{"class":180,"line":34610},[178,61664,61665],{"class":319},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[178,61667,61668],{"class":180,"line":34619},[178,61669,61670],{"class":319},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[178,61672,61673],{"class":180,"line":34625},[178,61674,54833],{"class":319},[178,61676,61677],{"class":180,"line":34636},[178,61678,61679],{"class":319},"    \u002F\u002F 获取元素\n",[178,61681,61682],{"class":180,"line":34642},[178,61683,61684],{"class":319},"    const img = document.querySelector('.slider-wrapper img')\n",[178,61686,61687],{"class":180,"line":34661},[178,61688,61689],{"class":319},"    const p = document.querySelector('.slider-footer p')\n",[178,61691,61692],{"class":180,"line":34667},[178,61693,61694],{"class":319},"    const footer = document.querySelector('.slider-footer')\n",[178,61696,61697],{"class":180,"line":34678},[178,61698,61699],{"class":319},"    \u002F\u002F 1. 右按钮业务\n",[178,61701,61702],{"class":180,"line":34684},[178,61703,61704],{"class":319},"    \u002F\u002F 1.1 获取右侧按钮 \n",[178,61706,61707],{"class":180,"line":34704},[178,61708,61709],{"class":319},"    const next = document.querySelector('.next')\n",[178,61711,61712],{"class":180,"line":34720},[178,61713,61714],{"class":319},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[178,61716,61717],{"class":180,"line":34726},[178,61718,61719],{"class":319},"    \u002F\u002F 1.2 注册点击事件\n",[178,61721,61722],{"class":180,"line":34740},[178,61723,722],{"emptyLinePlaceholder":721},[178,61725,61726],{"class":180,"line":34746},[178,61727,61728],{"class":319},"    next.addEventListener('click', function () {\n",[178,61730,61731],{"class":180,"line":34752},[178,61732,61733],{"class":319},"      \u002F\u002F console.log(11)\n",[178,61735,61736],{"class":180,"line":34763},[178,61737,61738],{"class":319},"      i++\n",[178,61740,61741],{"class":180,"line":34769},[178,61742,61743],{"class":319},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[178,61745,61746],{"class":180,"line":34775},[178,61747,61748],{"class":319},"      \u002F\u002F if (i >= 8) {\n",[178,61750,61751],{"class":180,"line":34785},[178,61752,61753],{"class":319},"      \u002F\u002F   i = 0\n",[178,61755,61756],{"class":180,"line":34791},[178,61757,61758],{"class":319},"      \u002F\u002F }\n",[178,61760,61761],{"class":180,"line":34802},[178,61762,61763],{"class":319},"      i = i >= data.length ? 0 : i\n",[178,61765,61766],{"class":180,"line":34808},[178,61767,61768],{"class":319},"      \u002F\u002F 1.3 得到对应的对象\n",[178,61770,61771],{"class":180,"line":34818},[178,61772,61773],{"class":319},"      \u002F\u002F console.log(data[i])\n",[178,61775,61776],{"class":180,"line":34823},[178,61777,61778],{"class":319},"      \u002F\u002F 调用函数\n",[178,61780,61781],{"class":180,"line":34829},[178,61782,61783],{"class":319},"      toggle()\n",[178,61785,61786],{"class":180,"line":34878},[178,61787,35193],{"class":319},[178,61789,61790],{"class":180,"line":34925},[178,61791,722],{"emptyLinePlaceholder":721},[178,61793,61794],{"class":180,"line":34930},[178,61795,61796],{"class":319},"    \u002F\u002F 2. 左侧按钮业务\n",[178,61798,61799],{"class":180,"line":34936},[178,61800,61801],{"class":319},"    \u002F\u002F 2.1 获取左侧按钮 \n",[178,61803,61804],{"class":180,"line":34955},[178,61805,61806],{"class":319},"    const prev = document.querySelector('.prev')\n",[178,61808,61809],{"class":180,"line":34961},[178,61810,61719],{"class":319},[178,61812,61813],{"class":180,"line":34981},[178,61814,61815],{"class":319},"    prev.addEventListener('click', function () {\n",[178,61817,61818],{"class":180,"line":34987},[178,61819,61820],{"class":319},"      i--\n",[178,61822,61823],{"class":180,"line":34993},[178,61824,61825],{"class":319},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[178,61827,61828],{"class":180,"line":35003},[178,61829,61830],{"class":319},"      \u002F\u002F if (i \u003C 0) {\n",[178,61832,61833],{"class":180,"line":35008},[178,61834,61835],{"class":319},"      \u002F\u002F   i = 7\n",[178,61837,61838],{"class":180,"line":35014},[178,61839,61758],{"class":319},[178,61841,61842],{"class":180,"line":35030},[178,61843,61844],{"class":319},"      i = i \u003C 0 ? data.length - 1 : i\n",[178,61846,61847],{"class":180,"line":35075},[178,61848,61768],{"class":319},[178,61850,61851],{"class":180,"line":35081},[178,61852,61773],{"class":319},[178,61854,61855],{"class":180,"line":35087},[178,61856,61778],{"class":319},[178,61858,61859],{"class":180,"line":35093},[178,61860,61783],{"class":319},[178,61862,61863],{"class":180,"line":35104},[178,61864,35193],{"class":319},[178,61866,61867],{"class":180,"line":35110},[178,61868,722],{"emptyLinePlaceholder":721},[178,61870,61871],{"class":180,"line":35116},[178,61872,61873],{"class":319},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[178,61875,61876],{"class":180,"line":35122},[178,61877,61878],{"class":319},"    function toggle() {\n",[178,61880,61881],{"class":180,"line":35140},[178,61882,61883],{"class":319},"      \u002F\u002F 1.4 渲染对应的数据\n",[178,61885,61886],{"class":180,"line":35154},[178,61887,61888],{"class":319},"      img.src = data[i].url\n",[178,61890,61891],{"class":180,"line":35163},[178,61892,61893],{"class":319},"      p.innerHTML = data[i].title\n",[178,61895,61896],{"class":180,"line":35172},[178,61897,61898],{"class":319},"      footer.style.backgroundColor = data[i].color\n",[178,61900,61901],{"class":180,"line":35181},[178,61902,61903],{"class":319},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[178,61905,61906],{"class":180,"line":35190},[178,61907,61908],{"class":319},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[178,61910,61911],{"class":180,"line":35196},[178,61912,61913],{"class":319},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[178,61915,61916],{"class":180,"line":35202},[178,61917,3971],{"class":319},[178,61919,61920],{"class":180,"line":35210},[178,61921,722],{"emptyLinePlaceholder":721},[178,61923,61924],{"class":180,"line":35215},[178,61925,61926],{"class":319},"    \u002F\u002F 3. 自动播放模块\n",[178,61928,61929],{"class":180,"line":35221},[178,61930,61931],{"class":319},"    let timerId = setInterval(function () {\n",[178,61933,61934],{"class":180,"line":35232},[178,61935,61936],{"class":319},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[178,61938,61939],{"class":180,"line":35238},[178,61940,61941],{"class":319},"      next.click()\n",[178,61943,61944],{"class":180,"line":35258},[178,61945,61946],{"class":319},"    }, 1000)\n",[178,61948,61949],{"class":180,"line":35264},[178,61950,722],{"emptyLinePlaceholder":721},[178,61952,61953],{"class":180,"line":35270},[178,61954,61955],{"class":319},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[178,61957,61958],{"class":180,"line":35276},[178,61959,61960],{"class":319},"    const slider = document.querySelector('.slider')\n",[178,61962,61963],{"class":180,"line":35293},[178,61964,61965],{"class":319},"    \u002F\u002F 注册事件\n",[178,61967,61968],{"class":180,"line":35299},[178,61969,61970],{"class":319},"    slider.addEventListener('mouseenter', function () {\n",[178,61972,61973],{"class":180,"line":35305},[178,61974,61975],{"class":319},"      \u002F\u002F 停止定时器\n",[178,61977,61978],{"class":180,"line":35311},[178,61979,61980],{"class":319},"      clearInterval(timerId)\n",[178,61982,61983],{"class":180,"line":35317},[178,61984,35193],{"class":319},[178,61986,61987],{"class":180,"line":35323},[178,61988,722],{"emptyLinePlaceholder":721},[178,61990,61991],{"class":180,"line":35350},[178,61992,61993],{"class":319},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[178,61995,61996],{"class":180,"line":35374},[178,61997,61965],{"class":319},[178,61999,62000],{"class":180,"line":35380},[178,62001,62002],{"class":319},"    slider.addEventListener('mouseleave', function () {\n",[178,62004,62005],{"class":180,"line":35386},[178,62006,61975],{"class":319},[178,62008,62009],{"class":180,"line":35392},[178,62010,62011],{"class":319},"      if (timerId) clearInterval(timerId)\n",[178,62013,62014],{"class":180,"line":35403},[178,62015,62016],{"class":319},"      \u002F\u002F 开启定时器\n",[178,62018,62019],{"class":180,"line":35414},[178,62020,62021],{"class":319},"      timerId = setInterval(function () {\n",[178,62023,62024],{"class":180,"line":35420},[178,62025,62026],{"class":319},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[178,62028,62029],{"class":180,"line":35437},[178,62030,62031],{"class":319},"        next.click()\n",[178,62033,62034],{"class":180,"line":35460},[178,62035,62036],{"class":319},"      }, 1000)\n",[178,62038,62039],{"class":180,"line":35483},[178,62040,35193],{"class":319},[178,62042,62043,62045,62047],{"class":180,"line":35489},[178,62044,357],{"class":319},[178,62046,53541],{"class":323},[178,62048,336],{"class":319},[178,62050,62051,62053,62055],{"class":180,"line":35494},[178,62052,367],{"class":319},[178,62054,376],{"class":323},[178,62056,336],{"class":319},[178,62058,62059],{"class":180,"line":35503},[178,62060,722],{"emptyLinePlaceholder":721},[178,62062,62063,62065,62067],{"class":180,"line":35513},[178,62064,367],{"class":319},[178,62066,52367],{"class":323},[178,62068,336],{"class":319},[23756,62070,62072],{"id":62071},"_3252-焦点事件","3.2.5.2 焦点事件",[19,62074,62075],{},"小米搜索框案例：",[154,62077,62079],{"className":52365,"code":62078,"language":52367,"meta":160,"style":160},"\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",[70,62080,62081,62091,62105,62109,62117,62131,62151,62171,62183,62191,62197,62207,62217,62229,62233,62237,62244,62248,62259,62263,62267,62274,62285,62298,62312,62316,62320,62329,62341,62353,62367,62380,62393,62411,62422,62426,62430,62439,62456,62460,62464,62471,62481,62491,62502,62515,62527,62543,62554,62566,62570,62574,62582,62593,62610,62622,62634,62645,62649,62653,62664,62675,62679,62687,62691,62699,62703,62711,62726,62749,62764,62795,62822,62849,62876,62903,62930,62957,62966,62974,62982,62987,63007,63027,63032,63037,63055,63060,63070,63075,63089,63094,63099,63116,63125,63137,63141,63149,63157,63161],{"__ignoreMap":160},[178,62082,62083,62085,62087,62089],{"class":180,"line":181},[178,62084,53029],{"class":319},[178,62086,53032],{"class":323},[178,62088,53035],{"class":184},[178,62090,336],{"class":319},[178,62092,62093,62095,62097,62099,62101,62103],{"class":180,"line":263},[178,62094,320],{"class":319},[178,62096,52367],{"class":323},[178,62098,53046],{"class":184},[178,62100,330],{"class":319},[178,62102,53051],{"class":188},[178,62104,336],{"class":319},[178,62106,62107],{"class":180,"line":274},[178,62108,722],{"emptyLinePlaceholder":721},[178,62110,62111,62113,62115],{"class":180,"line":354},[178,62112,320],{"class":319},[178,62114,53064],{"class":323},[178,62116,336],{"class":319},[178,62118,62119,62121,62123,62125,62127,62129],{"class":180,"line":364},[178,62120,53071],{"class":319},[178,62122,53074],{"class":323},[178,62124,53077],{"class":184},[178,62126,330],{"class":319},[178,62128,53082],{"class":188},[178,62130,336],{"class":319},[178,62132,62133,62135,62137,62139,62141,62143,62145,62147,62149],{"class":180,"line":740},[178,62134,53071],{"class":319},[178,62136,53074],{"class":323},[178,62138,53093],{"class":184},[178,62140,330],{"class":319},[178,62142,53098],{"class":188},[178,62144,53101],{"class":184},[178,62146,330],{"class":319},[178,62148,53106],{"class":188},[178,62150,336],{"class":319},[178,62152,62153,62155,62157,62159,62161,62163,62165,62167,62169],{"class":180,"line":746},[178,62154,53071],{"class":319},[178,62156,53074],{"class":323},[178,62158,426],{"class":184},[178,62160,330],{"class":319},[178,62162,53121],{"class":188},[178,62164,53101],{"class":184},[178,62166,330],{"class":319},[178,62168,53128],{"class":188},[178,62170,336],{"class":319},[178,62172,62173,62175,62177,62179,62181],{"class":180,"line":752},[178,62174,53071],{"class":319},[178,62176,53137],{"class":323},[178,62178,53140],{"class":319},[178,62180,53137],{"class":323},[178,62182,336],{"class":319},[178,62184,62185,62187,62189],{"class":180,"line":757},[178,62186,53071],{"class":319},[178,62188,1853],{"class":323},[178,62190,336],{"class":319},[178,62192,62193,62195],{"class":180,"line":763},[178,62194,53157],{"class":323},[178,62196,17330],{"class":319},[178,62198,62199,62201,62203,62205],{"class":180,"line":769},[178,62200,53164],{"class":195},[178,62202,53167],{"class":319},[178,62204,2133],{"class":195},[178,62206,3100],{"class":319},[178,62208,62209,62211,62213,62215],{"class":180,"line":774},[178,62210,53176],{"class":195},[178,62212,53167],{"class":319},[178,62214,2133],{"class":195},[178,62216,3100],{"class":319},[178,62218,62219,62222,62224,62227],{"class":180,"line":780},[178,62220,62221],{"class":195},"            box-sizing",[178,62223,53167],{"class":319},[178,62225,62226],{"class":195},"border-box",[178,62228,3100],{"class":319},[178,62230,62231],{"class":180,"line":786},[178,62232,4312],{"class":319},[178,62234,62235],{"class":180,"line":792},[178,62236,722],{"emptyLinePlaceholder":721},[178,62238,62239,62242],{"class":180,"line":798},[178,62240,62241],{"class":323},"        ul",[178,62243,17330],{"class":319},[178,62245,62246],{"class":180,"line":804},[178,62247,722],{"emptyLinePlaceholder":721},[178,62249,62250,62253,62255,62257],{"class":180,"line":810},[178,62251,62252],{"class":195},"            list-style",[178,62254,53167],{"class":319},[178,62256,56458],{"class":195},[178,62258,3100],{"class":319},[178,62260,62261],{"class":180,"line":816},[178,62262,4312],{"class":319},[178,62264,62265],{"class":180,"line":822},[178,62266,722],{"emptyLinePlaceholder":721},[178,62268,62269,62272],{"class":180,"line":827},[178,62270,62271],{"class":184},"        .mi",[178,62273,17330],{"class":319},[178,62275,62276,62279,62281,62283],{"class":180,"line":832},[178,62277,62278],{"class":195},"            position",[178,62280,53167],{"class":319},[178,62282,56485],{"class":195},[178,62284,3100],{"class":319},[178,62286,62287,62289,62291,62294,62296],{"class":180,"line":850},[178,62288,53214],{"class":195},[178,62290,53167],{"class":319},[178,62292,62293],{"class":195},"223",[178,62295,53222],{"class":699},[178,62297,3100],{"class":319},[178,62299,62300,62302,62304,62306,62308,62310],{"class":180,"line":866},[178,62301,53164],{"class":195},[178,62303,53167],{"class":319},[178,62305,2251],{"class":195},[178,62307,53222],{"class":699},[178,62309,53286],{"class":195},[178,62311,3100],{"class":319},[178,62313,62314],{"class":180,"line":877},[178,62315,4312],{"class":319},[178,62317,62318],{"class":180,"line":882},[178,62319,722],{"emptyLinePlaceholder":721},[178,62321,62322,62324,62327],{"class":180,"line":898},[178,62323,62271],{"class":184},[178,62325,62326],{"class":323}," input",[178,62328,17330],{"class":319},[178,62330,62331,62333,62335,62337,62339],{"class":180,"line":914},[178,62332,53214],{"class":195},[178,62334,53167],{"class":319},[178,62336,62293],{"class":195},[178,62338,53222],{"class":699},[178,62340,3100],{"class":319},[178,62342,62343,62345,62347,62349,62351],{"class":180,"line":919},[178,62344,53229],{"class":195},[178,62346,53167],{"class":319},[178,62348,2547],{"class":195},[178,62350,53222],{"class":699},[178,62352,3100],{"class":319},[178,62354,62355,62357,62359,62361,62363,62365],{"class":180,"line":935},[178,62356,53176],{"class":195},[178,62358,53167],{"class":319},[178,62360,2133],{"class":195},[178,62362,3822],{"class":195},[178,62364,53222],{"class":699},[178,62366,3100],{"class":319},[178,62368,62369,62372,62374,62376,62378],{"class":180,"line":952},[178,62370,62371],{"class":195},"            font-size",[178,62373,53167],{"class":319},[178,62375,2489],{"class":195},[178,62377,53222],{"class":699},[178,62379,3100],{"class":319},[178,62381,62382,62385,62387,62389,62391],{"class":180,"line":966},[178,62383,62384],{"class":195},"            line-height",[178,62386,53167],{"class":319},[178,62388,2547],{"class":195},[178,62390,53222],{"class":699},[178,62392,3100],{"class":319},[178,62394,62395,62398,62400,62402,62404,62406,62409],{"class":180,"line":980},[178,62396,62397],{"class":195},"            border",[178,62399,53167],{"class":319},[178,62401,1665],{"class":195},[178,62403,53222],{"class":699},[178,62405,53251],{"class":195},[178,62407,62408],{"class":195}," #e0e0e0",[178,62410,3100],{"class":319},[178,62412,62413,62416,62418,62420],{"class":180,"line":985},[178,62414,62415],{"class":195},"            outline",[178,62417,53167],{"class":319},[178,62419,56458],{"class":195},[178,62421,3100],{"class":319},[178,62423,62424],{"class":180,"line":1008},[178,62425,4312],{"class":319},[178,62427,62428],{"class":180,"line":1014},[178,62429,722],{"emptyLinePlaceholder":721},[178,62431,62432,62434,62437],{"class":180,"line":1019},[178,62433,62271],{"class":184},[178,62435,62436],{"class":184}," .search",[178,62438,17330],{"class":319},[178,62440,62441,62443,62445,62447,62449,62451,62454],{"class":180,"line":1033},[178,62442,62397],{"class":195},[178,62444,53167],{"class":319},[178,62446,1665],{"class":195},[178,62448,53222],{"class":699},[178,62450,53251],{"class":195},[178,62452,62453],{"class":195}," #ff6700",[178,62455,3100],{"class":319},[178,62457,62458],{"class":180,"line":1046},[178,62459,4312],{"class":319},[178,62461,62462],{"class":180,"line":1059},[178,62463,722],{"emptyLinePlaceholder":721},[178,62465,62466,62469],{"class":180,"line":1072},[178,62467,62468],{"class":184},"        .result-list",[178,62470,17330],{"class":319},[178,62472,62473,62475,62477,62479],{"class":180,"line":1077},[178,62474,53202],{"class":195},[178,62476,53167],{"class":319},[178,62478,56458],{"class":195},[178,62480,3100],{"class":319},[178,62482,62483,62485,62487,62489],{"class":180,"line":1082},[178,62484,62278],{"class":195},[178,62486,53167],{"class":319},[178,62488,56552],{"class":195},[178,62490,3100],{"class":319},[178,62492,62493,62496,62498,62500],{"class":180,"line":1099},[178,62494,62495],{"class":195},"            left",[178,62497,53167],{"class":319},[178,62499,2133],{"class":195},[178,62501,3100],{"class":319},[178,62503,62504,62507,62509,62511,62513],{"class":180,"line":9806},[178,62505,62506],{"class":195},"            top",[178,62508,53167],{"class":319},[178,62510,2547],{"class":195},[178,62512,53222],{"class":699},[178,62514,3100],{"class":319},[178,62516,62517,62519,62521,62523,62525],{"class":180,"line":9818},[178,62518,53214],{"class":195},[178,62520,53167],{"class":319},[178,62522,62293],{"class":195},[178,62524,53222],{"class":699},[178,62526,3100],{"class":319},[178,62528,62529,62531,62533,62535,62537,62539,62541],{"class":180,"line":11477},[178,62530,62397],{"class":195},[178,62532,53167],{"class":319},[178,62534,1665],{"class":195},[178,62536,53222],{"class":699},[178,62538,53251],{"class":195},[178,62540,62453],{"class":195},[178,62542,3100],{"class":319},[178,62544,62545,62548,62550,62552],{"class":180,"line":11502},[178,62546,62547],{"class":195},"            border-top",[178,62549,53167],{"class":319},[178,62551,2133],{"class":195},[178,62553,3100],{"class":319},[178,62555,62556,62559,62561,62564],{"class":180,"line":11525},[178,62557,62558],{"class":195},"            background",[178,62560,53167],{"class":319},[178,62562,62563],{"class":195},"#fff",[178,62565,3100],{"class":319},[178,62567,62568],{"class":180,"line":11549},[178,62569,4312],{"class":319},[178,62571,62572],{"class":180,"line":11554},[178,62573,722],{"emptyLinePlaceholder":721},[178,62575,62576,62578,62580],{"class":180,"line":11559},[178,62577,62468],{"class":184},[178,62579,3205],{"class":323},[178,62581,17330],{"class":319},[178,62583,62584,62586,62588,62591],{"class":180,"line":11564},[178,62585,53202],{"class":195},[178,62587,53167],{"class":319},[178,62589,62590],{"class":195},"block",[178,62592,3100],{"class":319},[178,62594,62595,62597,62599,62601,62603,62606,62608],{"class":180,"line":11573},[178,62596,53176],{"class":195},[178,62598,53167],{"class":319},[178,62600,2284],{"class":195},[178,62602,53222],{"class":699},[178,62604,62605],{"class":195}," 15",[178,62607,53222],{"class":699},[178,62609,3100],{"class":319},[178,62611,62612,62614,62616,62618,62620],{"class":180,"line":11578},[178,62613,62371],{"class":195},[178,62615,53167],{"class":319},[178,62617,2438],{"class":195},[178,62619,53222],{"class":699},[178,62621,3100],{"class":319},[178,62623,62624,62627,62629,62632],{"class":180,"line":11584},[178,62625,62626],{"class":195},"            color",[178,62628,53167],{"class":319},[178,62630,62631],{"class":195},"#424242",[178,62633,3100],{"class":319},[178,62635,62636,62639,62641,62643],{"class":180,"line":11605},[178,62637,62638],{"class":195},"            text-decoration",[178,62640,53167],{"class":319},[178,62642,56458],{"class":195},[178,62644,3100],{"class":319},[178,62646,62647],{"class":180,"line":11611},[178,62648,4312],{"class":319},[178,62650,62651],{"class":180,"line":11625},[178,62652,722],{"emptyLinePlaceholder":721},[178,62654,62655,62657,62659,62662],{"class":180,"line":11631},[178,62656,62468],{"class":184},[178,62658,3205],{"class":323},[178,62660,62661],{"class":184},":hover",[178,62663,17330],{"class":319},[178,62665,62666,62668,62670,62673],{"class":180,"line":11658},[178,62667,53370],{"class":195},[178,62669,53167],{"class":319},[178,62671,62672],{"class":195},"#eee",[178,62674,3100],{"class":319},[178,62676,62677],{"class":180,"line":11667},[178,62678,4312],{"class":319},[178,62680,62681,62683,62685],{"class":180,"line":11673},[178,62682,53506],{"class":319},[178,62684,1853],{"class":323},[178,62686,336],{"class":319},[178,62688,62689],{"class":180,"line":11681},[178,62690,722],{"emptyLinePlaceholder":721},[178,62692,62693,62695,62697],{"class":180,"line":11686},[178,62694,367],{"class":319},[178,62696,53064],{"class":323},[178,62698,336],{"class":319},[178,62700,62701],{"class":180,"line":18362},[178,62702,722],{"emptyLinePlaceholder":721},[178,62704,62705,62707,62709],{"class":180,"line":18368},[178,62706,320],{"class":319},[178,62708,376],{"class":323},[178,62710,336],{"class":319},[178,62712,62713,62715,62717,62719,62721,62724],{"class":180,"line":18391},[178,62714,53071],{"class":319},[178,62716,53341],{"class":323},[178,62718,55210],{"class":184},[178,62720,330],{"class":319},[178,62722,62723],{"class":188},"\"mi\"",[178,62725,336],{"class":319},[178,62727,62728,62730,62732,62734,62736,62739,62742,62744,62747],{"class":180,"line":18397},[178,62729,57023],{"class":319},[178,62731,55543],{"class":323},[178,62733,467],{"class":184},[178,62735,330],{"class":319},[178,62737,62738],{"class":188},"\"search\"",[178,62740,62741],{"class":184}," placeholder",[178,62743,330],{"class":319},[178,62745,62746],{"class":188},"\"小米笔记本\"",[178,62748,336],{"class":319},[178,62750,62751,62753,62755,62757,62759,62762],{"class":180,"line":18420},[178,62752,57023],{"class":319},[178,62754,2946],{"class":323},[178,62756,55210],{"class":184},[178,62758,330],{"class":319},[178,62760,62761],{"class":188},"\"result-list\"",[178,62763,336],{"class":319},[178,62765,62766,62769,62771,62774,62776,62779,62781,62784,62787,62789,62791,62793],{"class":180,"line":18434},[178,62767,62768],{"class":319},"            \u003C",[178,62770,29],{"class":323},[178,62772,62773],{"class":319},">\u003C",[178,62775,2178],{"class":323},[178,62777,62778],{"class":184}," href",[178,62780,330],{"class":319},[178,62782,62783],{"class":188},"\"#\"",[178,62785,62786],{"class":319},">全部商品\u003C\u002F",[178,62788,2178],{"class":323},[178,62790,57035],{"class":319},[178,62792,29],{"class":323},[178,62794,336],{"class":319},[178,62796,62797,62799,62801,62803,62805,62807,62809,62811,62814,62816,62818,62820],{"class":180,"line":18454},[178,62798,62768],{"class":319},[178,62800,29],{"class":323},[178,62802,62773],{"class":319},[178,62804,2178],{"class":323},[178,62806,62778],{"class":184},[178,62808,330],{"class":319},[178,62810,62783],{"class":188},[178,62812,62813],{"class":319},">小米11\u003C\u002F",[178,62815,2178],{"class":323},[178,62817,57035],{"class":319},[178,62819,29],{"class":323},[178,62821,336],{"class":319},[178,62823,62824,62826,62828,62830,62832,62834,62836,62838,62841,62843,62845,62847],{"class":180,"line":18460},[178,62825,62768],{"class":319},[178,62827,29],{"class":323},[178,62829,62773],{"class":319},[178,62831,2178],{"class":323},[178,62833,62778],{"class":184},[178,62835,330],{"class":319},[178,62837,62783],{"class":188},[178,62839,62840],{"class":319},">小米10S\u003C\u002F",[178,62842,2178],{"class":323},[178,62844,57035],{"class":319},[178,62846,29],{"class":323},[178,62848,336],{"class":319},[178,62850,62851,62853,62855,62857,62859,62861,62863,62865,62868,62870,62872,62874],{"class":180,"line":18471},[178,62852,62768],{"class":319},[178,62854,29],{"class":323},[178,62856,62773],{"class":319},[178,62858,2178],{"class":323},[178,62860,62778],{"class":184},[178,62862,330],{"class":319},[178,62864,62783],{"class":188},[178,62866,62867],{"class":319},">小米笔记本\u003C\u002F",[178,62869,2178],{"class":323},[178,62871,57035],{"class":319},[178,62873,29],{"class":323},[178,62875,336],{"class":319},[178,62877,62878,62880,62882,62884,62886,62888,62890,62892,62895,62897,62899,62901],{"class":180,"line":18494},[178,62879,62768],{"class":319},[178,62881,29],{"class":323},[178,62883,62773],{"class":319},[178,62885,2178],{"class":323},[178,62887,62778],{"class":184},[178,62889,330],{"class":319},[178,62891,62783],{"class":188},[178,62893,62894],{"class":319},">小米手机\u003C\u002F",[178,62896,2178],{"class":323},[178,62898,57035],{"class":319},[178,62900,29],{"class":323},[178,62902,336],{"class":319},[178,62904,62905,62907,62909,62911,62913,62915,62917,62919,62922,62924,62926,62928],{"class":180,"line":18516},[178,62906,62768],{"class":319},[178,62908,29],{"class":323},[178,62910,62773],{"class":319},[178,62912,2178],{"class":323},[178,62914,62778],{"class":184},[178,62916,330],{"class":319},[178,62918,62783],{"class":188},[178,62920,62921],{"class":319},">黑鲨4\u003C\u002F",[178,62923,2178],{"class":323},[178,62925,57035],{"class":319},[178,62927,29],{"class":323},[178,62929,336],{"class":319},[178,62931,62932,62934,62936,62938,62940,62942,62944,62946,62949,62951,62953,62955],{"class":180,"line":18521},[178,62933,62768],{"class":319},[178,62935,29],{"class":323},[178,62937,62773],{"class":319},[178,62939,2178],{"class":323},[178,62941,62778],{"class":184},[178,62943,330],{"class":319},[178,62945,62783],{"class":188},[178,62947,62948],{"class":319},">空调\u003C\u002F",[178,62950,2178],{"class":323},[178,62952,57035],{"class":319},[178,62954,29],{"class":323},[178,62956,336],{"class":319},[178,62958,62959,62962,62964],{"class":180,"line":18527},[178,62960,62961],{"class":319},"        \u003C\u002F",[178,62963,2946],{"class":323},[178,62965,336],{"class":319},[178,62967,62968,62970,62972],{"class":180,"line":18541},[178,62969,53506],{"class":319},[178,62971,53341],{"class":323},[178,62973,336],{"class":319},[178,62975,62976,62978,62980],{"class":180,"line":18554},[178,62977,53071],{"class":319},[178,62979,53541],{"class":323},[178,62981,336],{"class":319},[178,62983,62984],{"class":180,"line":18559},[178,62985,62986],{"class":2008},"        \u002F\u002F 1. 获取元素\n",[178,62988,62989,62992,62994,62996,62998,63000,63002,63005],{"class":180,"line":18573},[178,62990,62991],{"class":699},"        const",[178,62993,62326],{"class":195},[178,62995,734],{"class":699},[178,62997,56117],{"class":319},[178,62999,56120],{"class":184},[178,63001,944],{"class":319},[178,63003,63004],{"class":188},"'[type=search]'",[178,63006,863],{"class":319},[178,63008,63009,63011,63014,63016,63018,63020,63022,63025],{"class":180,"line":18578},[178,63010,62991],{"class":699},[178,63012,63013],{"class":195}," ul",[178,63015,734],{"class":699},[178,63017,56117],{"class":319},[178,63019,56120],{"class":184},[178,63021,944],{"class":319},[178,63023,63024],{"class":188},"'.result-list'",[178,63026,863],{"class":319},[178,63028,63029],{"class":180,"line":18584},[178,63030,63031],{"class":2008},"        \u002F\u002F console.log(input)\n",[178,63033,63034],{"class":180,"line":18589},[178,63035,63036],{"class":2008},"        \u002F\u002F 2. 监听事件 获得焦点\n",[178,63038,63039,63042,63044,63046,63049,63051,63053],{"class":180,"line":18603},[178,63040,63041],{"class":319},"        input.",[178,63043,59534],{"class":184},[178,63045,944],{"class":319},[178,63047,63048],{"class":188},"'focus'",[178,63050,14196],{"class":319},[178,63052,56170],{"class":699},[178,63054,56173],{"class":319},[178,63056,63057],{"class":180,"line":18608},[178,63058,63059],{"class":2008},"            \u002F\u002F ul显示\n",[178,63061,63062,63065,63067],{"class":180,"line":18613},[178,63063,63064],{"class":319},"            ul.style.display ",[178,63066,330],{"class":699},[178,63068,63069],{"class":188}," 'block'\n",[178,63071,63072],{"class":180,"line":18627},[178,63073,63074],{"class":2008},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[178,63076,63077,63080,63082,63084,63087],{"class":180,"line":18639},[178,63078,63079],{"class":319},"            input.classList.",[178,63081,7103],{"class":184},[178,63083,944],{"class":319},[178,63085,63086],{"class":188},"'search'",[178,63088,863],{"class":319},[178,63090,63091],{"class":180,"line":18644},[178,63092,63093],{"class":319},"        })\n",[178,63095,63096],{"class":180,"line":18657},[178,63097,63098],{"class":2008},"        \u002F\u002F 3. 监听事件 失去焦点\n",[178,63100,63101,63103,63105,63107,63110,63112,63114],{"class":180,"line":18662},[178,63102,63041],{"class":319},[178,63104,59534],{"class":184},[178,63106,944],{"class":319},[178,63108,63109],{"class":188},"'blur'",[178,63111,14196],{"class":319},[178,63113,56170],{"class":699},[178,63115,56173],{"class":319},[178,63117,63118,63120,63122],{"class":180,"line":18667},[178,63119,63064],{"class":319},[178,63121,330],{"class":699},[178,63123,63124],{"class":188}," 'none'\n",[178,63126,63127,63129,63131,63133,63135],{"class":180,"line":18672},[178,63128,63079],{"class":319},[178,63130,58727],{"class":184},[178,63132,944],{"class":319},[178,63134,63086],{"class":188},[178,63136,863],{"class":319},[178,63138,63139],{"class":180,"line":18685},[178,63140,63093],{"class":319},[178,63142,63143,63145,63147],{"class":180,"line":18690},[178,63144,53506],{"class":319},[178,63146,53541],{"class":323},[178,63148,336],{"class":319},[178,63150,63151,63153,63155],{"class":180,"line":34365},[178,63152,367],{"class":319},[178,63154,376],{"class":323},[178,63156,336],{"class":319},[178,63158,63159],{"class":180,"line":34371},[178,63160,722],{"emptyLinePlaceholder":721},[178,63162,63163,63165,63167],{"class":180,"line":34377},[178,63164,367],{"class":319},[178,63166,52367],{"class":323},[178,63168,336],{"class":319},[23756,63170,63172],{"id":63171},"_3253-键盘事件","3.2.5.3 键盘事件",[19,63174,63175],{},"评论字数统计案例",[19,63177,63178],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,63180,63181],{},"牢记focus伪类选择器",[53074,63183],{"charSet":63184},"UTF-8",[53074,63186],{"name":63187,"content":63188},"viewport","width=device-width, initial-scale=1.0",[53137,63190,63191],{},"Document",[1853,63193,63194],{},"\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",[55543,63196],{"type":159},[2946,63198,63199,63202],{},[29,63200,63201],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[29,63203,63204],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[154,63206,63208],{"className":52365,"code":63207,"language":52367,"meta":160,"style":160},"\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",[70,63209,63210,63220,63234,63238,63246,63260,63280,63300,63313,63321,63328,63341,63355,63365,63375,63379,63383,63390,63402,63414,63426,63438,63467,63480,63484,63488,63497,63508,63520,63531,63542,63554,63565,63577,63593,63605,63609,63613,63624,63635,63645,63657,63661,63665,63673,63684,63694,63705,63717,63730,63742,63754,63758,63762,63771,63783,63794,63807,63818,63832,63836,63840,63847,63859,63871,63881,63885,63889,63898,63910,63920,63924,63928,63939,63949,63968,63981,63985,63989,63999,64009,64013,64017,64028,64039,64051,64063,64067,64071,64082,64093,64107,64111,64115,64126,64136,64148,64152,64160,64168,64172,64180,64195,64214,64254,64267,64275,64289,64309,64317,64332,64355,64373,64388,64407,64427,64447,64455,64463,64471,64479,64499,64519,64524,64541,64550,64554,64559,64575,64583,64587,64592,64609,64614,64639,64643,64647,64652,64657,64665,64673,64677],{"__ignoreMap":160},[178,63211,63212,63214,63216,63218],{"class":180,"line":181},[178,63213,53029],{"class":319},[178,63215,53032],{"class":323},[178,63217,53035],{"class":184},[178,63219,336],{"class":319},[178,63221,63222,63224,63226,63228,63230,63232],{"class":180,"line":263},[178,63223,320],{"class":319},[178,63225,52367],{"class":323},[178,63227,53046],{"class":184},[178,63229,330],{"class":319},[178,63231,53051],{"class":188},[178,63233,336],{"class":319},[178,63235,63236],{"class":180,"line":274},[178,63237,722],{"emptyLinePlaceholder":721},[178,63239,63240,63242,63244],{"class":180,"line":354},[178,63241,320],{"class":319},[178,63243,53064],{"class":323},[178,63245,336],{"class":319},[178,63247,63248,63250,63252,63254,63256,63258],{"class":180,"line":364},[178,63249,341],{"class":319},[178,63251,53074],{"class":323},[178,63253,53077],{"class":184},[178,63255,330],{"class":319},[178,63257,53082],{"class":188},[178,63259,336],{"class":319},[178,63261,63262,63264,63266,63268,63270,63272,63274,63276,63278],{"class":180,"line":740},[178,63263,341],{"class":319},[178,63265,53074],{"class":323},[178,63267,53093],{"class":184},[178,63269,330],{"class":319},[178,63271,53098],{"class":188},[178,63273,53101],{"class":184},[178,63275,330],{"class":319},[178,63277,53106],{"class":188},[178,63279,336],{"class":319},[178,63281,63282,63284,63286,63288,63290,63292,63294,63296,63298],{"class":180,"line":746},[178,63283,341],{"class":319},[178,63285,53074],{"class":323},[178,63287,426],{"class":184},[178,63289,330],{"class":319},[178,63291,53121],{"class":188},[178,63293,53101],{"class":184},[178,63295,330],{"class":319},[178,63297,53128],{"class":188},[178,63299,336],{"class":319},[178,63301,63302,63304,63306,63309,63311],{"class":180,"line":752},[178,63303,341],{"class":319},[178,63305,53137],{"class":323},[178,63307,63308],{"class":319},">评论回车发布\u003C\u002F",[178,63310,53137],{"class":323},[178,63312,336],{"class":319},[178,63314,63315,63317,63319],{"class":180,"line":757},[178,63316,341],{"class":319},[178,63318,1853],{"class":323},[178,63320,336],{"class":319},[178,63322,63323,63326],{"class":180,"line":763},[178,63324,63325],{"class":184},"    .wrapper",[178,63327,17330],{"class":319},[178,63329,63330,63333,63335,63337,63339],{"class":180,"line":769},[178,63331,63332],{"class":195},"      min-width",[178,63334,53167],{"class":319},[178,63336,5759],{"class":195},[178,63338,53222],{"class":699},[178,63340,3100],{"class":319},[178,63342,63343,63346,63348,63351,63353],{"class":180,"line":774},[178,63344,63345],{"class":195},"      max-width",[178,63347,53167],{"class":319},[178,63349,63350],{"class":195},"800",[178,63352,53222],{"class":699},[178,63354,3100],{"class":319},[178,63356,63357,63359,63361,63363],{"class":180,"line":780},[178,63358,56730],{"class":195},[178,63360,53167],{"class":319},[178,63362,53207],{"class":195},[178,63364,3100],{"class":319},[178,63366,63367,63369,63371,63373],{"class":180,"line":786},[178,63368,56741],{"class":195},[178,63370,53167],{"class":319},[178,63372,53310],{"class":195},[178,63374,3100],{"class":319},[178,63376,63377],{"class":180,"line":792},[178,63378,3971],{"class":319},[178,63380,63381],{"class":180,"line":798},[178,63382,722],{"emptyLinePlaceholder":721},[178,63384,63385,63388],{"class":180,"line":804},[178,63386,63387],{"class":184},"    .avatar",[178,63389,17330],{"class":319},[178,63391,63392,63394,63396,63398,63400],{"class":180,"line":810},[178,63393,56492],{"class":195},[178,63395,53167],{"class":319},[178,63397,2547],{"class":195},[178,63399,53222],{"class":699},[178,63401,3100],{"class":319},[178,63403,63404,63406,63408,63410,63412],{"class":180,"line":816},[178,63405,56506],{"class":195},[178,63407,53167],{"class":319},[178,63409,2547],{"class":195},[178,63411,53222],{"class":699},[178,63413,3100],{"class":319},[178,63415,63416,63418,63420,63422,63424],{"class":180,"line":822},[178,63417,56855],{"class":195},[178,63419,53167],{"class":319},[178,63421,2596],{"class":195},[178,63423,2268],{"class":699},[178,63425,3100],{"class":319},[178,63427,63428,63431,63433,63436],{"class":180,"line":827},[178,63429,63430],{"class":195},"      overflow",[178,63432,53167],{"class":319},[178,63434,63435],{"class":195},"hidden",[178,63437,3100],{"class":319},[178,63439,63440,63443,63445,63448,63450,63453,63455,63458,63460,63462,63465],{"class":180,"line":832},[178,63441,63442],{"class":195},"      background",[178,63444,53167],{"class":319},[178,63446,63447],{"class":195},"url",[178,63449,944],{"class":319},[178,63451,63452],{"class":6985},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[178,63454,15474],{"class":319},[178,63456,63457],{"class":195},"no-repeat",[178,63459,18902],{"class":195},[178,63461,123],{"class":319},[178,63463,63464],{"class":195},"cover",[178,63466,3100],{"class":319},[178,63468,63469,63472,63474,63476,63478],{"class":180,"line":850},[178,63470,63471],{"class":195},"      margin-right",[178,63473,53167],{"class":319},[178,63475,2640],{"class":195},[178,63477,53222],{"class":699},[178,63479,3100],{"class":319},[178,63481,63482],{"class":180,"line":866},[178,63483,3971],{"class":319},[178,63485,63486],{"class":180,"line":877},[178,63487,722],{"emptyLinePlaceholder":721},[178,63489,63490,63492,63495],{"class":180,"line":882},[178,63491,63325],{"class":184},[178,63493,63494],{"class":323}," textarea",[178,63496,17330],{"class":319},[178,63498,63499,63502,63504,63506],{"class":180,"line":898},[178,63500,63501],{"class":195},"      outline",[178,63503,53167],{"class":319},[178,63505,56458],{"class":195},[178,63507,3100],{"class":319},[178,63509,63510,63513,63515,63518],{"class":180,"line":914},[178,63511,63512],{"class":195},"      border-color",[178,63514,53167],{"class":319},[178,63516,63517],{"class":195},"transparent",[178,63519,3100],{"class":319},[178,63521,63522,63525,63527,63529],{"class":180,"line":919},[178,63523,63524],{"class":195},"      resize",[178,63526,53167],{"class":319},[178,63528,56458],{"class":195},[178,63530,3100],{"class":319},[178,63532,63533,63535,63537,63540],{"class":180,"line":935},[178,63534,63442],{"class":195},[178,63536,53167],{"class":319},[178,63538,63539],{"class":195},"#f5f5f5",[178,63541,3100],{"class":319},[178,63543,63544,63546,63548,63550,63552],{"class":180,"line":952},[178,63545,56855],{"class":195},[178,63547,53167],{"class":319},[178,63549,2233],{"class":195},[178,63551,53222],{"class":699},[178,63553,3100],{"class":319},[178,63555,63556,63559,63561,63563],{"class":180,"line":966},[178,63557,63558],{"class":195},"      flex",[178,63560,53167],{"class":319},[178,63562,1665],{"class":195},[178,63564,3100],{"class":319},[178,63566,63567,63569,63571,63573,63575],{"class":180,"line":980},[178,63568,56416],{"class":195},[178,63570,53167],{"class":319},[178,63572,2386],{"class":195},[178,63574,53222],{"class":699},[178,63576,3100],{"class":319},[178,63578,63579,63582,63584,63586,63589,63591],{"class":180,"line":985},[178,63580,63581],{"class":195},"      transition",[178,63583,53167],{"class":319},[178,63585,29870],{"class":195},[178,63587,63588],{"class":195}," 0.5",[178,63590,2635],{"class":699},[178,63592,3100],{"class":319},[178,63594,63595,63597,63599,63601,63603],{"class":180,"line":1008},[178,63596,56506],{"class":195},[178,63598,53167],{"class":319},[178,63600,2890],{"class":195},[178,63602,53222],{"class":699},[178,63604,3100],{"class":319},[178,63606,63607],{"class":180,"line":1014},[178,63608,3971],{"class":319},[178,63610,63611],{"class":180,"line":1019},[178,63612,722],{"emptyLinePlaceholder":721},[178,63614,63615,63617,63619,63622],{"class":180,"line":1033},[178,63616,63325],{"class":184},[178,63618,63494],{"class":323},[178,63620,63621],{"class":184},":focus",[178,63623,17330],{"class":319},[178,63625,63626,63628,63630,63633],{"class":180,"line":1046},[178,63627,63512],{"class":195},[178,63629,53167],{"class":319},[178,63631,63632],{"class":195},"#e4e4e4",[178,63634,3100],{"class":319},[178,63636,63637,63639,63641,63643],{"class":180,"line":1059},[178,63638,63442],{"class":195},[178,63640,53167],{"class":319},[178,63642,62563],{"class":195},[178,63644,3100],{"class":319},[178,63646,63647,63649,63651,63653,63655],{"class":180,"line":1072},[178,63648,56506],{"class":195},[178,63650,53167],{"class":319},[178,63652,2596],{"class":195},[178,63654,53222],{"class":699},[178,63656,3100],{"class":319},[178,63658,63659],{"class":180,"line":1077},[178,63660,3971],{"class":319},[178,63662,63663],{"class":180,"line":1082},[178,63664,722],{"emptyLinePlaceholder":721},[178,63666,63667,63669,63671],{"class":180,"line":1099},[178,63668,63325],{"class":184},[178,63670,59188],{"class":323},[178,63672,17330],{"class":319},[178,63674,63675,63677,63679,63682],{"class":180,"line":9806},[178,63676,63442],{"class":195},[178,63678,53167],{"class":319},[178,63680,63681],{"class":195},"#00aeec",[178,63683,3100],{"class":319},[178,63685,63686,63688,63690,63692],{"class":180,"line":9818},[178,63687,59137],{"class":195},[178,63689,53167],{"class":319},[178,63691,62563],{"class":195},[178,63693,3100],{"class":319},[178,63695,63696,63699,63701,63703],{"class":180,"line":11477},[178,63697,63698],{"class":195},"      border",[178,63700,53167],{"class":319},[178,63702,56458],{"class":195},[178,63704,3100],{"class":319},[178,63706,63707,63709,63711,63713,63715],{"class":180,"line":11502},[178,63708,56855],{"class":195},[178,63710,53167],{"class":319},[178,63712,2233],{"class":195},[178,63714,53222],{"class":699},[178,63716,3100],{"class":319},[178,63718,63719,63722,63724,63726,63728],{"class":180,"line":11525},[178,63720,63721],{"class":195},"      margin-left",[178,63723,53167],{"class":319},[178,63725,2386],{"class":195},[178,63727,53222],{"class":699},[178,63729,3100],{"class":319},[178,63731,63732,63734,63736,63738,63740],{"class":180,"line":11549},[178,63733,56492],{"class":195},[178,63735,53167],{"class":319},[178,63737,2296],{"class":195},[178,63739,53222],{"class":699},[178,63741,3100],{"class":319},[178,63743,63744,63747,63749,63752],{"class":180,"line":11554},[178,63745,63746],{"class":195},"      cursor",[178,63748,53167],{"class":319},[178,63750,63751],{"class":195},"pointer",[178,63753,3100],{"class":319},[178,63755,63756],{"class":180,"line":11559},[178,63757,3971],{"class":319},[178,63759,63760],{"class":180,"line":11564},[178,63761,722],{"emptyLinePlaceholder":721},[178,63763,63764,63766,63769],{"class":180,"line":11573},[178,63765,63325],{"class":184},[178,63767,63768],{"class":184}," .total",[178,63770,17330],{"class":319},[178,63772,63773,63775,63777,63779,63781],{"class":180,"line":11578},[178,63774,63471],{"class":195},[178,63776,53167],{"class":319},[178,63778,2552],{"class":195},[178,63780,53222],{"class":699},[178,63782,3100],{"class":319},[178,63784,63785,63787,63789,63792],{"class":180,"line":11584},[178,63786,59137],{"class":195},[178,63788,53167],{"class":319},[178,63790,63791],{"class":195},"#999",[178,63793,3100],{"class":319},[178,63795,63796,63799,63801,63803,63805],{"class":180,"line":11605},[178,63797,63798],{"class":195},"      margin-top",[178,63800,53167],{"class":319},[178,63802,2259],{"class":195},[178,63804,53222],{"class":699},[178,63806,3100],{"class":319},[178,63808,63809,63812,63814,63816],{"class":180,"line":11611},[178,63810,63811],{"class":195},"      opacity",[178,63813,53167],{"class":319},[178,63815,2133],{"class":195},[178,63817,3100],{"class":319},[178,63819,63820,63822,63824,63826,63828,63830],{"class":180,"line":11625},[178,63821,63581],{"class":195},[178,63823,53167],{"class":319},[178,63825,29870],{"class":195},[178,63827,63588],{"class":195},[178,63829,2635],{"class":699},[178,63831,3100],{"class":319},[178,63833,63834],{"class":180,"line":11631},[178,63835,3971],{"class":319},[178,63837,63838],{"class":180,"line":11658},[178,63839,722],{"emptyLinePlaceholder":721},[178,63841,63842,63845],{"class":180,"line":11667},[178,63843,63844],{"class":184},"    .list",[178,63846,17330],{"class":319},[178,63848,63849,63851,63853,63855,63857],{"class":180,"line":11673},[178,63850,63332],{"class":195},[178,63852,53167],{"class":319},[178,63854,5759],{"class":195},[178,63856,53222],{"class":699},[178,63858,3100],{"class":319},[178,63860,63861,63863,63865,63867,63869],{"class":180,"line":11681},[178,63862,63345],{"class":195},[178,63864,53167],{"class":319},[178,63866,63350],{"class":195},[178,63868,53222],{"class":699},[178,63870,3100],{"class":319},[178,63872,63873,63875,63877,63879],{"class":180,"line":11686},[178,63874,56730],{"class":195},[178,63876,53167],{"class":319},[178,63878,53207],{"class":195},[178,63880,3100],{"class":319},[178,63882,63883],{"class":180,"line":18362},[178,63884,3971],{"class":319},[178,63886,63887],{"class":180,"line":18368},[178,63888,722],{"emptyLinePlaceholder":721},[178,63890,63891,63893,63896],{"class":180,"line":18391},[178,63892,63844],{"class":184},[178,63894,63895],{"class":184}," .item",[178,63897,17330],{"class":319},[178,63899,63900,63902,63904,63906,63908],{"class":180,"line":18397},[178,63901,56492],{"class":195},[178,63903,53167],{"class":319},[178,63905,2251],{"class":195},[178,63907,2268],{"class":699},[178,63909,3100],{"class":319},[178,63911,63912,63914,63916,63918],{"class":180,"line":18420},[178,63913,56730],{"class":195},[178,63915,53167],{"class":319},[178,63917,53207],{"class":195},[178,63919,3100],{"class":319},[178,63921,63922],{"class":180,"line":18434},[178,63923,3971],{"class":319},[178,63925,63926],{"class":180,"line":18454},[178,63927,722],{"emptyLinePlaceholder":721},[178,63929,63930,63932,63934,63937],{"class":180,"line":18460},[178,63931,63844],{"class":184},[178,63933,63895],{"class":184},[178,63935,63936],{"class":184}," .info",[178,63938,17330],{"class":319},[178,63940,63941,63943,63945,63947],{"class":180,"line":18471},[178,63942,63558],{"class":195},[178,63944,53167],{"class":319},[178,63946,1665],{"class":195},[178,63948,3100],{"class":319},[178,63950,63951,63954,63956,63958,63960,63963,63966],{"class":180,"line":18494},[178,63952,63953],{"class":195},"      border-bottom",[178,63955,53167],{"class":319},[178,63957,1665],{"class":195},[178,63959,53222],{"class":699},[178,63961,63962],{"class":195}," dashed",[178,63964,63965],{"class":195}," #e4e4e4",[178,63967,3100],{"class":319},[178,63969,63970,63973,63975,63977,63979],{"class":180,"line":18516},[178,63971,63972],{"class":195},"      padding-bottom",[178,63974,53167],{"class":319},[178,63976,2386],{"class":195},[178,63978,53222],{"class":699},[178,63980,3100],{"class":319},[178,63982,63983],{"class":180,"line":18521},[178,63984,3971],{"class":319},[178,63986,63987],{"class":180,"line":18527},[178,63988,722],{"emptyLinePlaceholder":721},[178,63990,63991,63993,63995,63997],{"class":180,"line":18541},[178,63992,63844],{"class":184},[178,63994,63895],{"class":184},[178,63996,8594],{"class":323},[178,63998,17330],{"class":319},[178,64000,64001,64003,64005,64007],{"class":180,"line":18554},[178,64002,56427],{"class":195},[178,64004,53167],{"class":319},[178,64006,2133],{"class":195},[178,64008,3100],{"class":319},[178,64010,64011],{"class":180,"line":18559},[178,64012,3971],{"class":319},[178,64014,64015],{"class":180,"line":18573},[178,64016,722],{"emptyLinePlaceholder":721},[178,64018,64019,64021,64023,64026],{"class":180,"line":18578},[178,64020,63844],{"class":184},[178,64022,63895],{"class":184},[178,64024,64025],{"class":184}," .name",[178,64027,17330],{"class":319},[178,64029,64030,64032,64034,64037],{"class":180,"line":18584},[178,64031,59137],{"class":195},[178,64033,53167],{"class":319},[178,64035,64036],{"class":195},"#FB7299",[178,64038,3100],{"class":319},[178,64040,64041,64043,64045,64047,64049],{"class":180,"line":18589},[178,64042,56643],{"class":195},[178,64044,53167],{"class":319},[178,64046,2489],{"class":195},[178,64048,53222],{"class":699},[178,64050,3100],{"class":319},[178,64052,64053,64056,64058,64061],{"class":180,"line":18603},[178,64054,64055],{"class":195},"      font-weight",[178,64057,53167],{"class":319},[178,64059,64060],{"class":195},"bold",[178,64062,3100],{"class":319},[178,64064,64065],{"class":180,"line":18608},[178,64066,3971],{"class":319},[178,64068,64069],{"class":180,"line":18613},[178,64070,722],{"emptyLinePlaceholder":721},[178,64072,64073,64075,64077,64080],{"class":180,"line":18627},[178,64074,63844],{"class":184},[178,64076,63895],{"class":184},[178,64078,64079],{"class":184}," .text",[178,64081,17330],{"class":319},[178,64083,64084,64086,64088,64091],{"class":180,"line":18639},[178,64085,59137],{"class":195},[178,64087,53167],{"class":319},[178,64089,64090],{"class":195},"#333",[178,64092,3100],{"class":319},[178,64094,64095,64097,64099,64101,64103,64105],{"class":180,"line":18644},[178,64096,56416],{"class":195},[178,64098,53167],{"class":319},[178,64100,2386],{"class":195},[178,64102,53222],{"class":699},[178,64104,930],{"class":195},[178,64106,3100],{"class":319},[178,64108,64109],{"class":180,"line":18657},[178,64110,3971],{"class":319},[178,64112,64113],{"class":180,"line":18662},[178,64114,722],{"emptyLinePlaceholder":721},[178,64116,64117,64119,64121,64124],{"class":180,"line":18667},[178,64118,63844],{"class":184},[178,64120,63895],{"class":184},[178,64122,64123],{"class":184}," .time",[178,64125,17330],{"class":319},[178,64127,64128,64130,64132,64134],{"class":180,"line":18672},[178,64129,59137],{"class":195},[178,64131,53167],{"class":319},[178,64133,63791],{"class":195},[178,64135,3100],{"class":319},[178,64137,64138,64140,64142,64144,64146],{"class":180,"line":18685},[178,64139,56643],{"class":195},[178,64141,53167],{"class":319},[178,64143,2438],{"class":195},[178,64145,53222],{"class":699},[178,64147,3100],{"class":319},[178,64149,64150],{"class":180,"line":18690},[178,64151,3971],{"class":319},[178,64153,64154,64156,64158],{"class":180,"line":34365},[178,64155,357],{"class":319},[178,64157,1853],{"class":323},[178,64159,336],{"class":319},[178,64161,64162,64164,64166],{"class":180,"line":34371},[178,64163,367],{"class":319},[178,64165,53064],{"class":323},[178,64167,336],{"class":319},[178,64169,64170],{"class":180,"line":34377},[178,64171,722],{"emptyLinePlaceholder":721},[178,64173,64174,64176,64178],{"class":180,"line":34383},[178,64175,320],{"class":319},[178,64177,376],{"class":323},[178,64179,336],{"class":319},[178,64181,64182,64184,64186,64188,64190,64193],{"class":180,"line":34389},[178,64183,341],{"class":319},[178,64185,53341],{"class":323},[178,64187,55210],{"class":184},[178,64189,330],{"class":319},[178,64191,64192],{"class":188},"\"wrapper\"",[178,64194,336],{"class":319},[178,64196,64197,64199,64201,64203,64205,64208,64210,64212],{"class":180,"line":34400},[178,64198,53071],{"class":319},[178,64200,2381],{"class":323},[178,64202,55210],{"class":184},[178,64204,330],{"class":319},[178,64206,64207],{"class":188},"\"avatar\"",[178,64209,57035],{"class":319},[178,64211,2381],{"class":323},[178,64213,336],{"class":319},[178,64215,64216,64218,64220,64222,64224,64227,64229,64231,64234,64236,64238,64240,64243,64245,64248,64250,64252],{"class":180,"line":34406},[178,64217,53071],{"class":319},[178,64219,56009],{"class":323},[178,64221,16717],{"class":184},[178,64223,330],{"class":319},[178,64225,64226],{"class":188},"\"tx\"",[178,64228,62741],{"class":184},[178,64230,330],{"class":319},[178,64232,64233],{"class":188},"\"发一条友善的评论\"",[178,64235,56032],{"class":184},[178,64237,330],{"class":319},[178,64239,5474],{"class":188},[178,64241,64242],{"class":184}," maxlength",[178,64244,330],{"class":319},[178,64246,64247],{"class":188},"\"200\"",[178,64249,57035],{"class":319},[178,64251,56009],{"class":323},[178,64253,336],{"class":319},[178,64255,64256,64258,64260,64263,64265],{"class":180,"line":34426},[178,64257,53071],{"class":319},[178,64259,55608],{"class":323},[178,64261,64262],{"class":319},">发布\u003C\u002F",[178,64264,55608],{"class":323},[178,64266,336],{"class":319},[178,64268,64269,64271,64273],{"class":180,"line":34432},[178,64270,357],{"class":319},[178,64272,53341],{"class":323},[178,64274,336],{"class":319},[178,64276,64277,64279,64281,64283,64285,64287],{"class":180,"line":34443},[178,64278,341],{"class":319},[178,64280,53341],{"class":323},[178,64282,55210],{"class":184},[178,64284,330],{"class":319},[178,64286,64192],{"class":188},[178,64288,336],{"class":319},[178,64290,64291,64293,64295,64297,64299,64302,64305,64307],{"class":180,"line":34449},[178,64292,53071],{"class":319},[178,64294,178],{"class":323},[178,64296,55210],{"class":184},[178,64298,330],{"class":319},[178,64300,64301],{"class":188},"\"total\"",[178,64303,64304],{"class":319},">0\u002F200字\u003C\u002F",[178,64306,178],{"class":323},[178,64308,336],{"class":319},[178,64310,64311,64313,64315],{"class":180,"line":34455},[178,64312,357],{"class":319},[178,64314,53341],{"class":323},[178,64316,336],{"class":319},[178,64318,64319,64321,64323,64325,64327,64330],{"class":180,"line":34461},[178,64320,341],{"class":319},[178,64322,53341],{"class":323},[178,64324,55210],{"class":184},[178,64326,330],{"class":319},[178,64328,64329],{"class":188},"\"list\"",[178,64331,336],{"class":319},[178,64333,64334,64336,64338,64340,64342,64345,64348,64350,64353],{"class":180,"line":34467},[178,64335,53071],{"class":319},[178,64337,53341],{"class":323},[178,64339,55210],{"class":184},[178,64341,330],{"class":319},[178,64343,64344],{"class":188},"\"item\"",[178,64346,64347],{"class":184}," style",[178,64349,330],{"class":319},[178,64351,64352],{"class":188},"\"display: none;\"",[178,64354,336],{"class":319},[178,64356,64357,64359,64361,64363,64365,64367,64369,64371],{"class":180,"line":34473},[178,64358,56955],{"class":319},[178,64360,2381],{"class":323},[178,64362,55210],{"class":184},[178,64364,330],{"class":319},[178,64366,64207],{"class":188},[178,64368,57035],{"class":319},[178,64370,2381],{"class":323},[178,64372,336],{"class":319},[178,64374,64375,64377,64379,64381,64383,64386],{"class":180,"line":34479},[178,64376,56955],{"class":319},[178,64378,53341],{"class":323},[178,64380,55210],{"class":184},[178,64382,330],{"class":319},[178,64384,64385],{"class":188},"\"info\"",[178,64387,336],{"class":319},[178,64389,64390,64392,64394,64396,64398,64400,64403,64405],{"class":180,"line":34485},[178,64391,57023],{"class":319},[178,64393,19],{"class":323},[178,64395,55210],{"class":184},[178,64397,330],{"class":319},[178,64399,333],{"class":188},[178,64401,64402],{"class":319},">清风徐来\u003C\u002F",[178,64404,19],{"class":323},[178,64406,336],{"class":319},[178,64408,64409,64411,64413,64415,64417,64420,64423,64425],{"class":180,"line":34505},[178,64410,57023],{"class":319},[178,64412,19],{"class":323},[178,64414,55210],{"class":184},[178,64416,330],{"class":319},[178,64418,64419],{"class":188},"\"text\"",[178,64421,64422],{"class":319},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[178,64424,19],{"class":323},[178,64426,336],{"class":319},[178,64428,64429,64431,64433,64435,64437,64440,64443,64445],{"class":180,"line":34511},[178,64430,57023],{"class":319},[178,64432,19],{"class":323},[178,64434,55210],{"class":184},[178,64436,330],{"class":319},[178,64438,64439],{"class":188},"\"time\"",[178,64441,64442],{"class":319},">2022-10-10 20:29:21\u003C\u002F",[178,64444,19],{"class":323},[178,64446,336],{"class":319},[178,64448,64449,64451,64453],{"class":180,"line":34527},[178,64450,57128],{"class":319},[178,64452,53341],{"class":323},[178,64454,336],{"class":319},[178,64456,64457,64459,64461],{"class":180,"line":34533},[178,64458,53506],{"class":319},[178,64460,53341],{"class":323},[178,64462,336],{"class":319},[178,64464,64465,64467,64469],{"class":180,"line":34547},[178,64466,357],{"class":319},[178,64468,53341],{"class":323},[178,64470,336],{"class":319},[178,64472,64473,64475,64477],{"class":180,"line":34553},[178,64474,341],{"class":319},[178,64476,53541],{"class":323},[178,64478,336],{"class":319},[178,64480,64481,64483,64486,64488,64490,64492,64494,64497],{"class":180,"line":34568},[178,64482,12982],{"class":699},[178,64484,64485],{"class":195}," tx",[178,64487,734],{"class":699},[178,64489,56117],{"class":319},[178,64491,56120],{"class":184},[178,64493,944],{"class":319},[178,64495,64496],{"class":188},"'#tx'",[178,64498,863],{"class":319},[178,64500,64501,64503,64506,64508,64510,64512,64514,64517],{"class":180,"line":34574},[178,64502,12982],{"class":699},[178,64504,64505],{"class":195}," total",[178,64507,734],{"class":699},[178,64509,56117],{"class":319},[178,64511,56120],{"class":184},[178,64513,944],{"class":319},[178,64515,64516],{"class":188},"'.total'",[178,64518,863],{"class":319},[178,64520,64521],{"class":180,"line":34583},[178,64522,64523],{"class":2008},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[178,64525,64526,64529,64531,64533,64535,64537,64539],{"class":180,"line":34589},[178,64527,64528],{"class":319},"    tx.",[178,64530,59534],{"class":184},[178,64532,944],{"class":319},[178,64534,63048],{"class":188},[178,64536,14196],{"class":319},[178,64538,56170],{"class":699},[178,64540,56173],{"class":319},[178,64542,64543,64546,64548],{"class":180,"line":34598},[178,64544,64545],{"class":319},"      total.style.opacity ",[178,64547,330],{"class":699},[178,64549,57420],{"class":195},[178,64551,64552],{"class":180,"line":34604},[178,64553,35193],{"class":319},[178,64555,64556],{"class":180,"line":34610},[178,64557,64558],{"class":2008},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[178,64560,64561,64563,64565,64567,64569,64571,64573],{"class":180,"line":34619},[178,64562,64528],{"class":319},[178,64564,59534],{"class":184},[178,64566,944],{"class":319},[178,64568,63109],{"class":188},[178,64570,14196],{"class":319},[178,64572,56170],{"class":699},[178,64574,56173],{"class":319},[178,64576,64577,64579,64581],{"class":180,"line":34625},[178,64578,64545],{"class":319},[178,64580,330],{"class":699},[178,64582,49065],{"class":195},[178,64584,64585],{"class":180,"line":34636},[178,64586,35193],{"class":319},[178,64588,64589],{"class":180,"line":34642},[178,64590,64591],{"class":2008},"    \u002F\u002F 3. 检测用户输入\n",[178,64593,64594,64596,64598,64600,64603,64605,64607],{"class":180,"line":34661},[178,64595,64528],{"class":319},[178,64597,59534],{"class":184},[178,64599,944],{"class":319},[178,64601,64602],{"class":188},"'input'",[178,64604,14196],{"class":319},[178,64606,56170],{"class":699},[178,64608,56173],{"class":319},[178,64610,64611],{"class":180,"line":34667},[178,64612,64613],{"class":2008},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[178,64615,64616,64619,64621,64624,64627,64629,64632,64634,64636],{"class":180,"line":34678},[178,64617,64618],{"class":319},"      total.innerHTML ",[178,64620,330],{"class":699},[178,64622,64623],{"class":188}," `${",[178,64625,64626],{"class":319},"tx",[178,64628,2498],{"class":188},[178,64630,64631],{"class":319},"value",[178,64633,2498],{"class":188},[178,64635,53696],{"class":195},[178,64637,64638],{"class":188},"}\u002F200字`\n",[178,64640,64641],{"class":180,"line":34684},[178,64642,35193],{"class":319},[178,64644,64645],{"class":180,"line":34704},[178,64646,722],{"emptyLinePlaceholder":721},[178,64648,64649],{"class":180,"line":34720},[178,64650,64651],{"class":2008},"    \u002F\u002F const str = 'andy'\n",[178,64653,64654],{"class":180,"line":34726},[178,64655,64656],{"class":2008},"    \u002F\u002F console.log(str.length)\n",[178,64658,64659,64661,64663],{"class":180,"line":34740},[178,64660,357],{"class":319},[178,64662,53541],{"class":323},[178,64664,336],{"class":319},[178,64666,64667,64669,64671],{"class":180,"line":34746},[178,64668,367],{"class":319},[178,64670,376],{"class":323},[178,64672,336],{"class":319},[178,64674,64675],{"class":180,"line":34752},[178,64676,722],{"emptyLinePlaceholder":721},[178,64678,64679,64681,64683],{"class":180,"line":34763},[178,64680,367],{"class":319},[178,64682,52367],{"class":323},[178,64684,336],{"class":319},[23756,64686,64688],{"id":64687},"_3254-change事件","3.2.5.4 change事件",[19,64690,64691],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,64693,64694],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,64696,64697],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[154,64699,64701],{"className":52365,"code":64700,"language":52367,"meta":160,"style":160},"\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",[70,64702,64703,64713,64727,64731,64739,64753,64773,64785,64793,64797,64805,64819,64827,64845,64863,64875,64879,64887,64895,64899],{"__ignoreMap":160},[178,64704,64705,64707,64709,64711],{"class":180,"line":181},[178,64706,53029],{"class":319},[178,64708,53032],{"class":323},[178,64710,53035],{"class":184},[178,64712,336],{"class":319},[178,64714,64715,64717,64719,64721,64723,64725],{"class":180,"line":263},[178,64716,320],{"class":319},[178,64718,52367],{"class":323},[178,64720,53046],{"class":184},[178,64722,330],{"class":319},[178,64724,53051],{"class":188},[178,64726,336],{"class":319},[178,64728,64729],{"class":180,"line":274},[178,64730,722],{"emptyLinePlaceholder":721},[178,64732,64733,64735,64737],{"class":180,"line":354},[178,64734,320],{"class":319},[178,64736,53064],{"class":323},[178,64738,336],{"class":319},[178,64740,64741,64743,64745,64747,64749,64751],{"class":180,"line":364},[178,64742,341],{"class":319},[178,64744,53074],{"class":323},[178,64746,53077],{"class":184},[178,64748,330],{"class":319},[178,64750,53082],{"class":188},[178,64752,336],{"class":319},[178,64754,64755,64757,64759,64761,64763,64765,64767,64769,64771],{"class":180,"line":740},[178,64756,341],{"class":319},[178,64758,53074],{"class":323},[178,64760,426],{"class":184},[178,64762,330],{"class":319},[178,64764,53121],{"class":188},[178,64766,53101],{"class":184},[178,64768,330],{"class":319},[178,64770,53128],{"class":188},[178,64772,336],{"class":319},[178,64774,64775,64777,64779,64781,64783],{"class":180,"line":746},[178,64776,341],{"class":319},[178,64778,53137],{"class":323},[178,64780,53140],{"class":319},[178,64782,53137],{"class":323},[178,64784,336],{"class":319},[178,64786,64787,64789,64791],{"class":180,"line":752},[178,64788,367],{"class":319},[178,64790,53064],{"class":323},[178,64792,336],{"class":319},[178,64794,64795],{"class":180,"line":757},[178,64796,722],{"emptyLinePlaceholder":721},[178,64798,64799,64801,64803],{"class":180,"line":763},[178,64800,320],{"class":319},[178,64802,376],{"class":323},[178,64804,336],{"class":319},[178,64806,64807,64809,64811,64813,64815,64817],{"class":180,"line":769},[178,64808,341],{"class":319},[178,64810,55543],{"class":323},[178,64812,467],{"class":184},[178,64814,330],{"class":319},[178,64816,64419],{"class":188},[178,64818,336],{"class":319},[178,64820,64821,64823,64825],{"class":180,"line":774},[178,64822,341],{"class":319},[178,64824,53541],{"class":323},[178,64826,336],{"class":319},[178,64828,64829,64831,64833,64835,64837,64839,64841,64843],{"class":180,"line":780},[178,64830,12982],{"class":699},[178,64832,62326],{"class":195},[178,64834,734],{"class":699},[178,64836,56117],{"class":319},[178,64838,56120],{"class":184},[178,64840,944],{"class":319},[178,64842,64602],{"class":188},[178,64844,863],{"class":319},[178,64846,64847,64850,64852,64854,64857,64859,64861],{"class":180,"line":786},[178,64848,64849],{"class":319},"    input.",[178,64851,59534],{"class":184},[178,64853,944],{"class":319},[178,64855,64856],{"class":188},"'change'",[178,64858,14196],{"class":319},[178,64860,56170],{"class":699},[178,64862,56173],{"class":319},[178,64864,64865,64867,64869,64871,64873],{"class":180,"line":792},[178,64866,59965],{"class":319},[178,64868,59968],{"class":184},[178,64870,944],{"class":319},[178,64872,2533],{"class":195},[178,64874,863],{"class":319},[178,64876,64877],{"class":180,"line":798},[178,64878,35193],{"class":319},[178,64880,64881,64883,64885],{"class":180,"line":804},[178,64882,357],{"class":319},[178,64884,53541],{"class":323},[178,64886,336],{"class":319},[178,64888,64889,64891,64893],{"class":180,"line":810},[178,64890,367],{"class":319},[178,64892,376],{"class":323},[178,64894,336],{"class":319},[178,64896,64897],{"class":180,"line":816},[178,64898,722],{"emptyLinePlaceholder":721},[178,64900,64901,64903,64905],{"class":180,"line":822},[178,64902,367],{"class":319},[178,64904,52367],{"class":323},[178,64906,336],{"class":319},[19,64908,64909],{},"总结：内容发生改变才回去触发",[387,64911,64913],{"id":64912},"_326-事件对象","3.2.6 事件对象",[23756,64915,64917],{"id":64916},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,64919,64920],{},[3269,64921],{"alt":160,"src":64922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,64924,64925],{},[3269,64926],{"alt":160,"src":64927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,64929,64930],{},"点击一次，就输出了事件对象，它是个对象",[19,64932,64933],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,64935,64936],{},[3269,64937],{"alt":160,"src":64938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[23756,64940,64942],{"id":64941},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,64944,64945],{},[3269,64946],{"alt":160,"src":64947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,64949,64950],{},"实现按特殊字符才是实现打印输出效果：",[154,64952,64954],{"className":310,"code":64953,"language":312,"meta":160,"style":160},"\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",[70,64955,64956,64964,64969,64983,64991,64996,65001,65006,65011,65016,65021,65026,65031,65036,65040,65044,65052],{"__ignoreMap":160},[178,64957,64958,64960,64962],{"class":180,"line":181},[178,64959,320],{"class":319},[178,64961,376],{"class":323},[178,64963,336],{"class":319},[178,64965,64966],{"class":180,"line":263},[178,64967,64968],{"class":2008},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[178,64970,64971,64973,64975,64977,64979,64981],{"class":180,"line":274},[178,64972,341],{"class":319},[178,64974,55543],{"class":323},[178,64976,467],{"class":184},[178,64978,330],{"class":319},[178,64980,64419],{"class":188},[178,64982,336],{"class":319},[178,64984,64985,64987,64989],{"class":180,"line":354},[178,64986,341],{"class":319},[178,64988,53541],{"class":323},[178,64990,336],{"class":319},[178,64992,64993],{"class":180,"line":364},[178,64994,64995],{"class":319},"    \u002F\u002F const btn = document.querySelector('button')\n",[178,64997,64998],{"class":180,"line":740},[178,64999,65000],{"class":319},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[178,65002,65003],{"class":180,"line":746},[178,65004,65005],{"class":319},"    \u002F\u002F   console.log(e);\n",[178,65007,65008],{"class":180,"line":752},[178,65009,65010],{"class":319},"    \u002F\u002F })\n",[178,65012,65013],{"class":180,"line":757},[178,65014,65015],{"class":319},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[178,65017,65018],{"class":180,"line":763},[178,65019,65020],{"class":319},"    const input = document.querySelector('input')\n",[178,65022,65023],{"class":180,"line":769},[178,65024,65025],{"class":319},"    input.addEventListener('keyup', function (e) {\n",[178,65027,65028],{"class":180,"line":774},[178,65029,65030],{"class":319},"      if (e.key === 'Enter') {\n",[178,65032,65033],{"class":180,"line":780},[178,65034,65035],{"class":319},"        console.log('我按下了回车键')\n",[178,65037,65038],{"class":180,"line":786},[178,65039,54125],{"class":319},[178,65041,65042],{"class":180,"line":792},[178,65043,35193],{"class":319},[178,65045,65046,65048,65050],{"class":180,"line":798},[178,65047,357],{"class":319},[178,65049,53541],{"class":323},[178,65051,336],{"class":319},[178,65053,65054,65056,65058],{"class":180,"line":804},[178,65055,367],{"class":319},[178,65057,376],{"class":323},[178,65059,336],{"class":319},[23756,65061,65063],{"id":65062},"_3263-trim方法","3.2.6.3 trim方法",[19,65065,65066],{},[3269,65067],{"alt":160,"src":65068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,65070,65071],{},[3269,65072],{"alt":160,"src":65073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,65075,65076],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,65078,65079],{},"str.trim()",[387,65081,65083],{"id":65082},"_327-环境对象","3.2.7 环境对象",[19,65085,65086],{},[3269,65087],{"alt":160,"src":65088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,65090,65091],{},[3269,65092],{"alt":160,"src":65093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,65095,65096],{},[3269,65097],{"alt":160,"src":65098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,65100,65101],{},"实际函数调用是window.fn()",[19,65103,65104],{},"普通函数里面this指向的是window",[2946,65106,65107,65110,65113],{},[29,65108,65109],{},"在普通函数下，this指向的是window",[29,65111,65112],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[29,65114,65115],{},"箭头函数没有this",[19,65117,65118],{},"粗略记法就是：谁调用，this就指向谁",[19,65120,65121],{},[3269,65122],{"alt":160,"src":65123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,65125,65126],{},[3269,65127],{"alt":160,"src":65128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,65130,65131],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,65133,65134],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[154,65136,65138],{"className":310,"code":65137,"language":312,"meta":160,"style":160},"\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",[70,65139,65140,65148,65160,65168,65173,65178,65183,65188,65192,65200],{"__ignoreMap":160},[178,65141,65142,65144,65146],{"class":180,"line":181},[178,65143,320],{"class":319},[178,65145,376],{"class":323},[178,65147,336],{"class":319},[178,65149,65150,65152,65154,65156,65158],{"class":180,"line":263},[178,65151,341],{"class":319},[178,65153,55608],{"class":323},[178,65155,55614],{"class":319},[178,65157,55608],{"class":323},[178,65159,336],{"class":319},[178,65161,65162,65164,65166],{"class":180,"line":274},[178,65163,341],{"class":319},[178,65165,53541],{"class":323},[178,65167,336],{"class":319},[178,65169,65170],{"class":180,"line":354},[178,65171,65172],{"class":319},"    const button = document.querySelector('button')\n",[178,65174,65175],{"class":180,"line":364},[178,65176,65177],{"class":319},"    button.addEventListener('click', function () {\n",[178,65179,65180],{"class":180,"line":740},[178,65181,65182],{"class":319},"      \u002F\u002F console.log(this);\n",[178,65184,65185],{"class":180,"line":746},[178,65186,65187],{"class":319},"      this.style.color = 'pink'\n",[178,65189,65190],{"class":180,"line":752},[178,65191,35193],{"class":319},[178,65193,65194,65196,65198],{"class":180,"line":757},[178,65195,357],{"class":319},[178,65197,53541],{"class":323},[178,65199,336],{"class":319},[178,65201,65202,65204,65206],{"class":180,"line":763},[178,65203,367],{"class":319},[178,65205,376],{"class":323},[178,65207,336],{"class":319},[387,65209,65211],{"id":65210},"_328-回调函数","3.2.8 回调函数",[19,65213,65214],{},[3269,65215],{"alt":160,"src":65216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,65218,65219],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,65221,13093],{},[2946,65223,65224,65227,65230],{},[29,65225,65226],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[29,65228,65229],{},"回调函数本质还是函数，只不过把它当成参数使用",[29,65231,65232],{},"使用匿名函数做为回调函数比较常见",[387,65234,65236],{"id":65235},"_329-tab栏切换","3.2.9 tab栏切换",[19,65238,65239],{},[3269,65240],{"alt":160,"src":65241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[154,65243,65245],{"className":52365,"code":65244,"language":52367,"meta":160,"style":160},"\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",[70,65246,65247,65257,65271,65275,65283,65297,65317,65337,65350,65358,65364,65374,65384,65388,65392,65399,65412,65425,65437,65453,65457,65461,65468,65480,65492,65504,65514,65524,65528,65532,65541,65553,65564,65576,65580,65584,65592,65602,65612,65622,65626,65630,65640,65654,65666,65670,65674,65686,65697,65714,65724,65728,65732,65747,65758,65768,65772,65776,65783,65798,65802,65806,65814,65824,65828,65832,65841,65851,65855,65863,65871,65875,65883,65898,65913,65926,65934,65968,65995,66022,66049,66076,66084,66092,66107,66144,66179,66214,66249,66284,66292,66300,66308,66313,66318,66338,66343,66372,66377,66382,66400,66405,66410,66415,66437,66442,66458,66462,66467,66472,66493,66498,66527,66531,66536,66540,66548,66556,66560],{"__ignoreMap":160},[178,65248,65249,65251,65253,65255],{"class":180,"line":181},[178,65250,53029],{"class":319},[178,65252,53032],{"class":323},[178,65254,53035],{"class":184},[178,65256,336],{"class":319},[178,65258,65259,65261,65263,65265,65267,65269],{"class":180,"line":263},[178,65260,320],{"class":319},[178,65262,52367],{"class":323},[178,65264,53046],{"class":184},[178,65266,330],{"class":319},[178,65268,53051],{"class":188},[178,65270,336],{"class":319},[178,65272,65273],{"class":180,"line":274},[178,65274,722],{"emptyLinePlaceholder":721},[178,65276,65277,65279,65281],{"class":180,"line":354},[178,65278,320],{"class":319},[178,65280,53064],{"class":323},[178,65282,336],{"class":319},[178,65284,65285,65287,65289,65291,65293,65295],{"class":180,"line":364},[178,65286,341],{"class":319},[178,65288,53074],{"class":323},[178,65290,53077],{"class":184},[178,65292,330],{"class":319},[178,65294,53082],{"class":188},[178,65296,60848],{"class":319},[178,65298,65299,65301,65303,65305,65307,65309,65311,65313,65315],{"class":180,"line":740},[178,65300,341],{"class":319},[178,65302,53074],{"class":323},[178,65304,53093],{"class":184},[178,65306,330],{"class":319},[178,65308,53098],{"class":188},[178,65310,53101],{"class":184},[178,65312,330],{"class":319},[178,65314,53106],{"class":188},[178,65316,60848],{"class":319},[178,65318,65319,65321,65323,65325,65327,65329,65331,65333,65335],{"class":180,"line":746},[178,65320,341],{"class":319},[178,65322,53074],{"class":323},[178,65324,426],{"class":184},[178,65326,330],{"class":319},[178,65328,53121],{"class":188},[178,65330,53101],{"class":184},[178,65332,330],{"class":319},[178,65334,53128],{"class":188},[178,65336,60848],{"class":319},[178,65338,65339,65341,65343,65346,65348],{"class":180,"line":752},[178,65340,341],{"class":319},[178,65342,53137],{"class":323},[178,65344,65345],{"class":319},">tab栏切换\u003C\u002F",[178,65347,53137],{"class":323},[178,65349,336],{"class":319},[178,65351,65352,65354,65356],{"class":180,"line":757},[178,65353,341],{"class":319},[178,65355,1853],{"class":323},[178,65357,336],{"class":319},[178,65359,65360,65362],{"class":180,"line":763},[178,65361,8172],{"class":323},[178,65363,17330],{"class":319},[178,65365,65366,65368,65370,65372],{"class":180,"line":769},[178,65367,56427],{"class":195},[178,65369,53167],{"class":319},[178,65371,2133],{"class":195},[178,65373,3100],{"class":319},[178,65375,65376,65378,65380,65382],{"class":180,"line":774},[178,65377,56416],{"class":195},[178,65379,53167],{"class":319},[178,65381,2133],{"class":195},[178,65383,3100],{"class":319},[178,65385,65386],{"class":180,"line":780},[178,65387,3971],{"class":319},[178,65389,65390],{"class":180,"line":786},[178,65391,722],{"emptyLinePlaceholder":721},[178,65393,65394,65397],{"class":180,"line":792},[178,65395,65396],{"class":184},"    .tab",[178,65398,17330],{"class":319},[178,65400,65401,65403,65405,65408,65410],{"class":180,"line":798},[178,65402,56492],{"class":195},[178,65404,53167],{"class":319},[178,65406,65407],{"class":195},"590",[178,65409,53222],{"class":699},[178,65411,3100],{"class":319},[178,65413,65414,65416,65418,65421,65423],{"class":180,"line":804},[178,65415,56506],{"class":195},[178,65417,53167],{"class":319},[178,65419,65420],{"class":195},"340",[178,65422,53222],{"class":699},[178,65424,3100],{"class":319},[178,65426,65427,65429,65431,65433,65435],{"class":180,"line":810},[178,65428,56427],{"class":195},[178,65430,53167],{"class":319},[178,65432,2640],{"class":195},[178,65434,53222],{"class":699},[178,65436,3100],{"class":319},[178,65438,65439,65441,65443,65445,65447,65449,65451],{"class":180,"line":816},[178,65440,63698],{"class":195},[178,65442,53167],{"class":319},[178,65444,1665],{"class":195},[178,65446,53222],{"class":699},[178,65448,53251],{"class":195},[178,65450,63965],{"class":195},[178,65452,3100],{"class":319},[178,65454,65455],{"class":180,"line":822},[178,65456,3971],{"class":319},[178,65458,65459],{"class":180,"line":827},[178,65460,722],{"emptyLinePlaceholder":721},[178,65462,65463,65466],{"class":180,"line":832},[178,65464,65465],{"class":184},"    .tab-nav",[178,65467,17330],{"class":319},[178,65469,65470,65472,65474,65476,65478],{"class":180,"line":850},[178,65471,56492],{"class":195},[178,65473,53167],{"class":319},[178,65475,2251],{"class":195},[178,65477,2268],{"class":699},[178,65479,3100],{"class":319},[178,65481,65482,65484,65486,65488,65490],{"class":180,"line":866},[178,65483,56506],{"class":195},[178,65485,53167],{"class":319},[178,65487,2847],{"class":195},[178,65489,53222],{"class":699},[178,65491,3100],{"class":319},[178,65493,65494,65496,65498,65500,65502],{"class":180,"line":877},[178,65495,59080],{"class":195},[178,65497,53167],{"class":319},[178,65499,2847],{"class":195},[178,65501,53222],{"class":699},[178,65503,3100],{"class":319},[178,65505,65506,65508,65510,65512],{"class":180,"line":882},[178,65507,56730],{"class":195},[178,65509,53167],{"class":319},[178,65511,53207],{"class":195},[178,65513,3100],{"class":319},[178,65515,65516,65518,65520,65522],{"class":180,"line":898},[178,65517,56741],{"class":195},[178,65519,53167],{"class":319},[178,65521,53398],{"class":195},[178,65523,3100],{"class":319},[178,65525,65526],{"class":180,"line":914},[178,65527,3971],{"class":319},[178,65529,65530],{"class":180,"line":919},[178,65531,722],{"emptyLinePlaceholder":721},[178,65533,65534,65536,65539],{"class":180,"line":935},[178,65535,65465],{"class":184},[178,65537,65538],{"class":323}," h3",[178,65540,17330],{"class":319},[178,65542,65543,65545,65547,65549,65551],{"class":180,"line":952},[178,65544,56643],{"class":195},[178,65546,53167],{"class":319},[178,65548,2740],{"class":195},[178,65550,53222],{"class":699},[178,65552,3100],{"class":319},[178,65554,65555,65557,65559,65562],{"class":180,"line":966},[178,65556,64055],{"class":195},[178,65558,53167],{"class":319},[178,65560,65561],{"class":195},"normal",[178,65563,3100],{"class":319},[178,65565,65566,65568,65570,65572,65574],{"class":180,"line":980},[178,65567,63721],{"class":195},[178,65569,53167],{"class":319},[178,65571,2640],{"class":195},[178,65573,53222],{"class":699},[178,65575,3100],{"class":319},[178,65577,65578],{"class":180,"line":985},[178,65579,3971],{"class":319},[178,65581,65582],{"class":180,"line":1008},[178,65583,722],{"emptyLinePlaceholder":721},[178,65585,65586,65588,65590],{"class":180,"line":1014},[178,65587,65465],{"class":184},[178,65589,63013],{"class":323},[178,65591,17330],{"class":319},[178,65593,65594,65596,65598,65600],{"class":180,"line":1019},[178,65595,56453],{"class":195},[178,65597,53167],{"class":319},[178,65599,56458],{"class":195},[178,65601,3100],{"class":319},[178,65603,65604,65606,65608,65610],{"class":180,"line":1033},[178,65605,56730],{"class":195},[178,65607,53167],{"class":319},[178,65609,53207],{"class":195},[178,65611,3100],{"class":319},[178,65613,65614,65616,65618,65620],{"class":180,"line":1046},[178,65615,56741],{"class":195},[178,65617,53167],{"class":319},[178,65619,53310],{"class":195},[178,65621,3100],{"class":319},[178,65623,65624],{"class":180,"line":1059},[178,65625,3971],{"class":319},[178,65627,65628],{"class":180,"line":1072},[178,65629,722],{"emptyLinePlaceholder":721},[178,65631,65632,65634,65636,65638],{"class":180,"line":1077},[178,65633,65465],{"class":184},[178,65635,63013],{"class":323},[178,65637,56796],{"class":323},[178,65639,17330],{"class":319},[178,65641,65642,65644,65646,65648,65650,65652],{"class":180,"line":1082},[178,65643,56427],{"class":195},[178,65645,53167],{"class":319},[178,65647,2133],{"class":195},[178,65649,10711],{"class":195},[178,65651,53222],{"class":699},[178,65653,3100],{"class":319},[178,65655,65656,65658,65660,65662,65664],{"class":180,"line":1099},[178,65657,56643],{"class":195},[178,65659,53167],{"class":319},[178,65661,2489],{"class":195},[178,65663,53222],{"class":699},[178,65665,3100],{"class":319},[178,65667,65668],{"class":180,"line":9806},[178,65669,3971],{"class":319},[178,65671,65672],{"class":180,"line":9818},[178,65673,722],{"emptyLinePlaceholder":721},[178,65675,65676,65678,65680,65682,65684],{"class":180,"line":11477},[178,65677,65465],{"class":184},[178,65679,63013],{"class":323},[178,65681,56796],{"class":323},[178,65683,3205],{"class":323},[178,65685,17330],{"class":319},[178,65687,65688,65691,65693,65695],{"class":180,"line":11502},[178,65689,65690],{"class":195},"      text-decoration",[178,65692,53167],{"class":319},[178,65694,56458],{"class":195},[178,65696,3100],{"class":319},[178,65698,65699,65701,65703,65705,65707,65709,65712],{"class":180,"line":11525},[178,65700,63953],{"class":195},[178,65702,53167],{"class":319},[178,65704,1669],{"class":195},[178,65706,53222],{"class":699},[178,65708,53251],{"class":195},[178,65710,65711],{"class":195}," transparent",[178,65713,3100],{"class":319},[178,65715,65716,65718,65720,65722],{"class":180,"line":11549},[178,65717,59137],{"class":195},[178,65719,53167],{"class":319},[178,65721,64090],{"class":195},[178,65723,3100],{"class":319},[178,65725,65726],{"class":180,"line":11554},[178,65727,3971],{"class":319},[178,65729,65730],{"class":180,"line":11559},[178,65731,722],{"emptyLinePlaceholder":721},[178,65733,65734,65736,65738,65740,65742,65745],{"class":180,"line":11564},[178,65735,65465],{"class":184},[178,65737,63013],{"class":323},[178,65739,56796],{"class":323},[178,65741,3205],{"class":323},[178,65743,65744],{"class":184},".active",[178,65746,17330],{"class":319},[178,65748,65749,65751,65753,65756],{"class":180,"line":11573},[178,65750,63512],{"class":195},[178,65752,53167],{"class":319},[178,65754,65755],{"class":195},"#e1251b",[178,65757,3100],{"class":319},[178,65759,65760,65762,65764,65766],{"class":180,"line":11578},[178,65761,59137],{"class":195},[178,65763,53167],{"class":319},[178,65765,65755],{"class":195},[178,65767,3100],{"class":319},[178,65769,65770],{"class":180,"line":11584},[178,65771,3971],{"class":319},[178,65773,65774],{"class":180,"line":11605},[178,65775,722],{"emptyLinePlaceholder":721},[178,65777,65778,65781],{"class":180,"line":11611},[178,65779,65780],{"class":184},"    .tab-content",[178,65782,17330],{"class":319},[178,65784,65785,65787,65789,65791,65794,65796],{"class":180,"line":11625},[178,65786,56416],{"class":195},[178,65788,53167],{"class":319},[178,65790,2133],{"class":195},[178,65792,65793],{"class":195}," 16",[178,65795,53222],{"class":699},[178,65797,3100],{"class":319},[178,65799,65800],{"class":180,"line":11631},[178,65801,3971],{"class":319},[178,65803,65804],{"class":180,"line":11658},[178,65805,722],{"emptyLinePlaceholder":721},[178,65807,65808,65810,65812],{"class":180,"line":11667},[178,65809,65780],{"class":184},[178,65811,63895],{"class":184},[178,65813,17330],{"class":319},[178,65815,65816,65818,65820,65822],{"class":180,"line":11673},[178,65817,56730],{"class":195},[178,65819,53167],{"class":319},[178,65821,56458],{"class":195},[178,65823,3100],{"class":319},[178,65825,65826],{"class":180,"line":11681},[178,65827,3971],{"class":319},[178,65829,65830],{"class":180,"line":11686},[178,65831,722],{"emptyLinePlaceholder":721},[178,65833,65834,65836,65839],{"class":180,"line":18362},[178,65835,65780],{"class":184},[178,65837,65838],{"class":184}," .item.active",[178,65840,17330],{"class":319},[178,65842,65843,65845,65847,65849],{"class":180,"line":18368},[178,65844,56730],{"class":195},[178,65846,53167],{"class":319},[178,65848,62590],{"class":195},[178,65850,3100],{"class":319},[178,65852,65853],{"class":180,"line":18391},[178,65854,3971],{"class":319},[178,65856,65857,65859,65861],{"class":180,"line":18397},[178,65858,357],{"class":319},[178,65860,1853],{"class":323},[178,65862,336],{"class":319},[178,65864,65865,65867,65869],{"class":180,"line":18420},[178,65866,367],{"class":319},[178,65868,53064],{"class":323},[178,65870,336],{"class":319},[178,65872,65873],{"class":180,"line":18434},[178,65874,722],{"emptyLinePlaceholder":721},[178,65876,65877,65879,65881],{"class":180,"line":18454},[178,65878,320],{"class":319},[178,65880,376],{"class":323},[178,65882,336],{"class":319},[178,65884,65885,65887,65889,65891,65893,65896],{"class":180,"line":18460},[178,65886,341],{"class":319},[178,65888,53341],{"class":323},[178,65890,55210],{"class":184},[178,65892,330],{"class":319},[178,65894,65895],{"class":188},"\"tab\"",[178,65897,336],{"class":319},[178,65899,65900,65902,65904,65906,65908,65911],{"class":180,"line":18471},[178,65901,53071],{"class":319},[178,65903,53341],{"class":323},[178,65905,55210],{"class":184},[178,65907,330],{"class":319},[178,65909,65910],{"class":188},"\"tab-nav\"",[178,65912,336],{"class":319},[178,65914,65915,65917,65919,65922,65924],{"class":180,"line":18494},[178,65916,56955],{"class":319},[178,65918,387],{"class":323},[178,65920,65921],{"class":319},">每日特价\u003C\u002F",[178,65923,387],{"class":323},[178,65925,336],{"class":319},[178,65927,65928,65930,65932],{"class":180,"line":18516},[178,65929,56955],{"class":319},[178,65931,2946],{"class":323},[178,65933,336],{"class":319},[178,65935,65936,65938,65940,65942,65944,65946,65948,65950,65952,65954,65957,65960,65962,65964,65966],{"class":180,"line":18521},[178,65937,57023],{"class":319},[178,65939,29],{"class":323},[178,65941,62773],{"class":319},[178,65943,2178],{"class":323},[178,65945,55210],{"class":184},[178,65947,330],{"class":319},[178,65949,61427],{"class":188},[178,65951,62778],{"class":184},[178,65953,330],{"class":319},[178,65955,65956],{"class":188},"\"javascript:;\"",[178,65958,65959],{"class":319},">精选\u003C\u002F",[178,65961,2178],{"class":323},[178,65963,57035],{"class":319},[178,65965,29],{"class":323},[178,65967,336],{"class":319},[178,65969,65970,65972,65974,65976,65978,65980,65982,65984,65987,65989,65991,65993],{"class":180,"line":18527},[178,65971,57023],{"class":319},[178,65973,29],{"class":323},[178,65975,62773],{"class":319},[178,65977,2178],{"class":323},[178,65979,62778],{"class":184},[178,65981,330],{"class":319},[178,65983,65956],{"class":188},[178,65985,65986],{"class":319},">美食\u003C\u002F",[178,65988,2178],{"class":323},[178,65990,57035],{"class":319},[178,65992,29],{"class":323},[178,65994,336],{"class":319},[178,65996,65997,65999,66001,66003,66005,66007,66009,66011,66014,66016,66018,66020],{"class":180,"line":18541},[178,65998,57023],{"class":319},[178,66000,29],{"class":323},[178,66002,62773],{"class":319},[178,66004,2178],{"class":323},[178,66006,62778],{"class":184},[178,66008,330],{"class":319},[178,66010,65956],{"class":188},[178,66012,66013],{"class":319},">百货\u003C\u002F",[178,66015,2178],{"class":323},[178,66017,57035],{"class":319},[178,66019,29],{"class":323},[178,66021,336],{"class":319},[178,66023,66024,66026,66028,66030,66032,66034,66036,66038,66041,66043,66045,66047],{"class":180,"line":18554},[178,66025,57023],{"class":319},[178,66027,29],{"class":323},[178,66029,62773],{"class":319},[178,66031,2178],{"class":323},[178,66033,62778],{"class":184},[178,66035,330],{"class":319},[178,66037,65956],{"class":188},[178,66039,66040],{"class":319},">个护\u003C\u002F",[178,66042,2178],{"class":323},[178,66044,57035],{"class":319},[178,66046,29],{"class":323},[178,66048,336],{"class":319},[178,66050,66051,66053,66055,66057,66059,66061,66063,66065,66068,66070,66072,66074],{"class":180,"line":18559},[178,66052,57023],{"class":319},[178,66054,29],{"class":323},[178,66056,62773],{"class":319},[178,66058,2178],{"class":323},[178,66060,62778],{"class":184},[178,66062,330],{"class":319},[178,66064,65956],{"class":188},[178,66066,66067],{"class":319},">预告\u003C\u002F",[178,66069,2178],{"class":323},[178,66071,57035],{"class":319},[178,66073,29],{"class":323},[178,66075,336],{"class":319},[178,66077,66078,66080,66082],{"class":180,"line":18573},[178,66079,57128],{"class":319},[178,66081,2946],{"class":323},[178,66083,336],{"class":319},[178,66085,66086,66088,66090],{"class":180,"line":18578},[178,66087,53506],{"class":319},[178,66089,53341],{"class":323},[178,66091,336],{"class":319},[178,66093,66094,66096,66098,66100,66102,66105],{"class":180,"line":18584},[178,66095,53071],{"class":319},[178,66097,53341],{"class":323},[178,66099,55210],{"class":184},[178,66101,330],{"class":319},[178,66103,66104],{"class":188},"\"tab-content\"",[178,66106,336],{"class":319},[178,66108,66109,66111,66113,66115,66117,66120,66122,66124,66126,66128,66131,66133,66135,66137,66140,66142],{"class":180,"line":18589},[178,66110,56955],{"class":319},[178,66112,53341],{"class":323},[178,66114,55210],{"class":184},[178,66116,330],{"class":319},[178,66118,66119],{"class":188},"\"item active\"",[178,66121,62773],{"class":319},[178,66123,3269],{"class":323},[178,66125,56960],{"class":184},[178,66127,330],{"class":319},[178,66129,66130],{"class":188},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[178,66132,56968],{"class":184},[178,66134,330],{"class":319},[178,66136,9421],{"class":188},[178,66138,66139],{"class":319}," \u002F>\u003C\u002F",[178,66141,53341],{"class":323},[178,66143,336],{"class":319},[178,66145,66146,66148,66150,66152,66154,66156,66158,66160,66162,66164,66167,66169,66171,66173,66175,66177],{"class":180,"line":18603},[178,66147,56955],{"class":319},[178,66149,53341],{"class":323},[178,66151,55210],{"class":184},[178,66153,330],{"class":319},[178,66155,64344],{"class":188},[178,66157,62773],{"class":319},[178,66159,3269],{"class":323},[178,66161,56960],{"class":184},[178,66163,330],{"class":319},[178,66165,66166],{"class":188},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[178,66168,56968],{"class":184},[178,66170,330],{"class":319},[178,66172,9421],{"class":188},[178,66174,66139],{"class":319},[178,66176,53341],{"class":323},[178,66178,336],{"class":319},[178,66180,66181,66183,66185,66187,66189,66191,66193,66195,66197,66199,66202,66204,66206,66208,66210,66212],{"class":180,"line":18608},[178,66182,56955],{"class":319},[178,66184,53341],{"class":323},[178,66186,55210],{"class":184},[178,66188,330],{"class":319},[178,66190,64344],{"class":188},[178,66192,62773],{"class":319},[178,66194,3269],{"class":323},[178,66196,56960],{"class":184},[178,66198,330],{"class":319},[178,66200,66201],{"class":188},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[178,66203,56968],{"class":184},[178,66205,330],{"class":319},[178,66207,9421],{"class":188},[178,66209,66139],{"class":319},[178,66211,53341],{"class":323},[178,66213,336],{"class":319},[178,66215,66216,66218,66220,66222,66224,66226,66228,66230,66232,66234,66237,66239,66241,66243,66245,66247],{"class":180,"line":18613},[178,66217,56955],{"class":319},[178,66219,53341],{"class":323},[178,66221,55210],{"class":184},[178,66223,330],{"class":319},[178,66225,64344],{"class":188},[178,66227,62773],{"class":319},[178,66229,3269],{"class":323},[178,66231,56960],{"class":184},[178,66233,330],{"class":319},[178,66235,66236],{"class":188},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[178,66238,56968],{"class":184},[178,66240,330],{"class":319},[178,66242,9421],{"class":188},[178,66244,66139],{"class":319},[178,66246,53341],{"class":323},[178,66248,336],{"class":319},[178,66250,66251,66253,66255,66257,66259,66261,66263,66265,66267,66269,66272,66274,66276,66278,66280,66282],{"class":180,"line":18627},[178,66252,56955],{"class":319},[178,66254,53341],{"class":323},[178,66256,55210],{"class":184},[178,66258,330],{"class":319},[178,66260,64344],{"class":188},[178,66262,62773],{"class":319},[178,66264,3269],{"class":323},[178,66266,56960],{"class":184},[178,66268,330],{"class":319},[178,66270,66271],{"class":188},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[178,66273,56968],{"class":184},[178,66275,330],{"class":319},[178,66277,9421],{"class":188},[178,66279,66139],{"class":319},[178,66281,53341],{"class":323},[178,66283,336],{"class":319},[178,66285,66286,66288,66290],{"class":180,"line":18639},[178,66287,53506],{"class":319},[178,66289,53341],{"class":323},[178,66291,336],{"class":319},[178,66293,66294,66296,66298],{"class":180,"line":18644},[178,66295,357],{"class":319},[178,66297,53341],{"class":323},[178,66299,336],{"class":319},[178,66301,66302,66304,66306],{"class":180,"line":18657},[178,66303,341],{"class":319},[178,66305,53541],{"class":323},[178,66307,336],{"class":319},[178,66309,66310],{"class":180,"line":18662},[178,66311,66312],{"class":2008},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[178,66314,66315],{"class":180,"line":18667},[178,66316,66317],{"class":2008},"    \u002F\u002F 1.1 获取 a 元素 \n",[178,66319,66320,66322,66325,66327,66329,66331,66333,66336],{"class":180,"line":18672},[178,66321,12982],{"class":699},[178,66323,66324],{"class":195}," as",[178,66326,734],{"class":699},[178,66328,56117],{"class":319},[178,66330,57402],{"class":184},[178,66332,944],{"class":319},[178,66334,66335],{"class":188},"'.tab-nav a'",[178,66337,863],{"class":319},[178,66339,66340],{"class":180,"line":18685},[178,66341,66342],{"class":2008},"    \u002F\u002F console.log(as) \n",[178,66344,66345,66347,66349,66351,66353,66355,66357,66359,66361,66364,66366,66368,66370],{"class":180,"line":18690},[178,66346,988],{"class":699},[178,66348,3457],{"class":319},[178,66350,53575],{"class":699},[178,66352,11199],{"class":319},[178,66354,330],{"class":699},[178,66356,930],{"class":195},[178,66358,11206],{"class":319},[178,66360,320],{"class":699},[178,66362,66363],{"class":319}," as.",[178,66365,53696],{"class":195},[178,66367,4987],{"class":319},[178,66369,4076],{"class":699},[178,66371,14203],{"class":319},[178,66373,66374],{"class":180,"line":34365},[178,66375,66376],{"class":2008},"      \u002F\u002F console.log(as[i])\n",[178,66378,66379],{"class":180,"line":34371},[178,66380,66381],{"class":2008},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[178,66383,66384,66387,66389,66391,66394,66396,66398],{"class":180,"line":34377},[178,66385,66386],{"class":319},"      as[i].",[178,66388,59534],{"class":184},[178,66390,944],{"class":319},[178,66392,66393],{"class":188},"'mouseenter'",[178,66395,14196],{"class":319},[178,66397,56170],{"class":699},[178,66399,56173],{"class":319},[178,66401,66402],{"class":180,"line":34383},[178,66403,66404],{"class":2008},"        \u002F\u002F console.log('鼠标经过')\n",[178,66406,66407],{"class":180,"line":34389},[178,66408,66409],{"class":2008},"        \u002F\u002F 排他思想  \n",[178,66411,66412],{"class":180,"line":34400},[178,66413,66414],{"class":2008},"        \u002F\u002F 干掉别人 移除类active\n",[178,66416,66417,66419,66421,66423,66426,66428,66430,66432,66435],{"class":180,"line":34406},[178,66418,53653],{"class":319},[178,66420,56120],{"class":184},[178,66422,944],{"class":319},[178,66424,66425],{"class":188},"'.tab-nav .active'",[178,66427,58724],{"class":319},[178,66429,58727],{"class":184},[178,66431,944],{"class":319},[178,66433,66434],{"class":188},"'active'",[178,66436,863],{"class":319},[178,66438,66439],{"class":180,"line":34426},[178,66440,66441],{"class":2008},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[178,66443,66444,66447,66450,66452,66454,66456],{"class":180,"line":34432},[178,66445,66446],{"class":195},"        this",[178,66448,66449],{"class":319},".classList.",[178,66451,7103],{"class":184},[178,66453,944],{"class":319},[178,66455,66434],{"class":188},[178,66457,863],{"class":319},[178,66459,66460],{"class":180,"line":34443},[178,66461,722],{"emptyLinePlaceholder":721},[178,66463,66464],{"class":180,"line":34449},[178,66465,66466],{"class":2008},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[178,66468,66469],{"class":180,"line":34455},[178,66470,66471],{"class":2008},"        \u002F\u002F 干掉别人\n",[178,66473,66474,66476,66478,66480,66483,66485,66487,66489,66491],{"class":180,"line":34461},[178,66475,53653],{"class":319},[178,66477,56120],{"class":184},[178,66479,944],{"class":319},[178,66481,66482],{"class":188},"'.tab-content .active'",[178,66484,58724],{"class":319},[178,66486,58727],{"class":184},[178,66488,944],{"class":319},[178,66490,66434],{"class":188},[178,66492,863],{"class":319},[178,66494,66495],{"class":180,"line":34467},[178,66496,66497],{"class":2008},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[178,66499,66500,66502,66504,66506,66509,66511,66513,66515,66517,66519,66521,66523,66525],{"class":180,"line":34473},[178,66501,53653],{"class":319},[178,66503,56120],{"class":184},[178,66505,944],{"class":319},[178,66507,66508],{"class":188},"`.tab-content .item:nth-child(${",[178,66510,2381],{"class":319},[178,66512,47298],{"class":699},[178,66514,26870],{"class":195},[178,66516,58753],{"class":188},[178,66518,58724],{"class":319},[178,66520,7103],{"class":184},[178,66522,944],{"class":319},[178,66524,66434],{"class":188},[178,66526,863],{"class":319},[178,66528,66529],{"class":180,"line":34479},[178,66530,722],{"emptyLinePlaceholder":721},[178,66532,66533],{"class":180,"line":34485},[178,66534,66535],{"class":319},"      })\n",[178,66537,66538],{"class":180,"line":34505},[178,66539,3971],{"class":319},[178,66541,66542,66544,66546],{"class":180,"line":34511},[178,66543,357],{"class":319},[178,66545,53541],{"class":323},[178,66547,336],{"class":319},[178,66549,66550,66552,66554],{"class":180,"line":34527},[178,66551,367],{"class":319},[178,66553,376],{"class":323},[178,66555,336],{"class":319},[178,66557,66558],{"class":180,"line":34533},[178,66559,722],{"emptyLinePlaceholder":721},[178,66561,66562,66564,66566],{"class":180,"line":34547},[178,66563,367],{"class":319},[178,66565,52367],{"class":323},[178,66567,336],{"class":319},[19,66569,66570],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,66572,66573],{},"在监听事件中，this指向的就是他的调用者",[19,66575,66576],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,66578,55442],{},[19,66580,66581],{},"(function () {",[19,66583,66584],{},"const list = document.querySelector('.xtx-elevator-list')",[19,66586,66587],{},"list.addEventListener('click', function (e) {",[19,66589,66590],{},"if (e.target.tagName === 'A') {",[19,66592,66593],{},"\u002F\u002F 排他思想",[19,66595,66596],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,66598,66599],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,66601,66602],{},"\u002F\u002F console.log(old);",[19,66604,66605],{},"\u002F\u002F 判断",[19,66607,66608],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,66610,66611],{},"if (old) old.classList.remove('active')",[19,66613,66614],{},"e.target.classList.add('active')",[19,66616,2885],{},[19,66618,54190],{},[19,66620,66621],{},"})();",[387,66623,66625],{"id":66624},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[154,66627,66629],{"className":52365,"code":66628,"language":52367,"meta":160,"style":160},"\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",[70,66630,66631,66641,66645,66653,66657,66671,66685,66697,66705,66711,66721,66731,66735,66739,66746,66758,66769,66786,66799,66813,66823,66827,66831,66838,66849,66867,66877,66889,66893,66897,66904,66921,66932,66944,66948,66952,66959,66971,66975,66983,66991,66995,67003,67011,67019,67034,67078,67086,67099,67112,67125,67133,67141,67149,67177,67185,67197,67210,67223,67231,67239,67247,67273,67281,67294,67306,67319,67327,67335,67343,67369,67377,67390,67402,67415,67423,67431,67439,67444,67464,67469,67489,67494,67511,67516,67524,67529,67558,67571,67575,67579,67584,67588,67616,67621,67638,67643,67648,67653,67658,67684,67688,67692,67700,67708,67712],{"__ignoreMap":160},[178,66632,66633,66635,66637,66639],{"class":180,"line":181},[178,66634,53029],{"class":319},[178,66636,53032],{"class":323},[178,66638,53035],{"class":184},[178,66640,336],{"class":319},[178,66642,66643],{"class":180,"line":263},[178,66644,722],{"emptyLinePlaceholder":721},[178,66646,66647,66649,66651],{"class":180,"line":274},[178,66648,320],{"class":319},[178,66650,52367],{"class":323},[178,66652,336],{"class":319},[178,66654,66655],{"class":180,"line":354},[178,66656,722],{"emptyLinePlaceholder":721},[178,66658,66659,66661,66663,66665,66667,66669],{"class":180,"line":364},[178,66660,320],{"class":319},[178,66662,53064],{"class":323},[178,66664,53046],{"class":184},[178,66666,330],{"class":319},[178,66668,53051],{"class":188},[178,66670,336],{"class":319},[178,66672,66673,66675,66677,66679,66681,66683],{"class":180,"line":740},[178,66674,341],{"class":319},[178,66676,53074],{"class":323},[178,66678,53077],{"class":184},[178,66680,330],{"class":319},[178,66682,53082],{"class":188},[178,66684,336],{"class":319},[178,66686,66687,66689,66691,66693,66695],{"class":180,"line":746},[178,66688,341],{"class":319},[178,66690,53137],{"class":323},[178,66692,57035],{"class":319},[178,66694,53137],{"class":323},[178,66696,336],{"class":319},[178,66698,66699,66701,66703],{"class":180,"line":752},[178,66700,341],{"class":319},[178,66702,1853],{"class":323},[178,66704,336],{"class":319},[178,66706,66707,66709],{"class":180,"line":757},[178,66708,8172],{"class":323},[178,66710,17330],{"class":319},[178,66712,66713,66715,66717,66719],{"class":180,"line":763},[178,66714,56427],{"class":195},[178,66716,53167],{"class":319},[178,66718,2133],{"class":195},[178,66720,3100],{"class":319},[178,66722,66723,66725,66727,66729],{"class":180,"line":769},[178,66724,56416],{"class":195},[178,66726,53167],{"class":319},[178,66728,2133],{"class":195},[178,66730,3100],{"class":319},[178,66732,66733],{"class":180,"line":774},[178,66734,3971],{"class":319},[178,66736,66737],{"class":180,"line":780},[178,66738,722],{"emptyLinePlaceholder":721},[178,66740,66741,66744],{"class":180,"line":786},[178,66742,66743],{"class":323},"    table",[178,66745,17330],{"class":319},[178,66747,66748,66751,66753,66756],{"class":180,"line":792},[178,66749,66750],{"class":195},"      border-collapse",[178,66752,53167],{"class":319},[178,66754,66755],{"class":195},"collapse",[178,66757,3100],{"class":319},[178,66759,66760,66763,66765,66767],{"class":180,"line":798},[178,66761,66762],{"class":195},"      border-spacing",[178,66764,53167],{"class":319},[178,66766,2133],{"class":195},[178,66768,3100],{"class":319},[178,66770,66771,66773,66775,66777,66779,66781,66784],{"class":180,"line":804},[178,66772,63698],{"class":195},[178,66774,53167],{"class":319},[178,66776,1665],{"class":195},[178,66778,53222],{"class":699},[178,66780,53251],{"class":195},[178,66782,66783],{"class":195}," #c0c0c0",[178,66785,3100],{"class":319},[178,66787,66788,66790,66792,66795,66797],{"class":180,"line":810},[178,66789,56492],{"class":195},[178,66791,53167],{"class":319},[178,66793,66794],{"class":195},"500",[178,66796,53222],{"class":699},[178,66798,3100],{"class":319},[178,66800,66801,66803,66805,66807,66809,66811],{"class":180,"line":816},[178,66802,56427],{"class":195},[178,66804,53167],{"class":319},[178,66806,2251],{"class":195},[178,66808,53222],{"class":699},[178,66810,53286],{"class":195},[178,66812,3100],{"class":319},[178,66814,66815,66817,66819,66821],{"class":180,"line":822},[178,66816,59007],{"class":195},[178,66818,53167],{"class":319},[178,66820,53322],{"class":195},[178,66822,3100],{"class":319},[178,66824,66825],{"class":180,"line":827},[178,66826,3971],{"class":319},[178,66828,66829],{"class":180,"line":832},[178,66830,722],{"emptyLinePlaceholder":721},[178,66832,66833,66836],{"class":180,"line":850},[178,66834,66835],{"class":323},"    th",[178,66837,17330],{"class":319},[178,66839,66840,66842,66844,66847],{"class":180,"line":866},[178,66841,56605],{"class":195},[178,66843,53167],{"class":319},[178,66845,66846],{"class":195},"#09c",[178,66848,3100],{"class":319},[178,66850,66851,66854,66856,66858,66860,66862,66865],{"class":180,"line":877},[178,66852,66853],{"class":195},"      font",[178,66855,53167],{"class":319},[178,66857,64060],{"class":195},[178,66859,65793],{"class":195},[178,66861,53222],{"class":699},[178,66863,66864],{"class":188}," \"微软雅黑\"",[178,66866,3100],{"class":319},[178,66868,66869,66871,66873,66875],{"class":180,"line":882},[178,66870,59137],{"class":195},[178,66872,53167],{"class":319},[178,66874,62563],{"class":195},[178,66876,3100],{"class":319},[178,66878,66879,66881,66883,66885,66887],{"class":180,"line":898},[178,66880,56506],{"class":195},[178,66882,53167],{"class":319},[178,66884,2740],{"class":195},[178,66886,53222],{"class":699},[178,66888,3100],{"class":319},[178,66890,66891],{"class":180,"line":914},[178,66892,3971],{"class":319},[178,66894,66895],{"class":180,"line":919},[178,66896,722],{"emptyLinePlaceholder":721},[178,66898,66899,66902],{"class":180,"line":935},[178,66900,66901],{"class":323},"    td",[178,66903,17330],{"class":319},[178,66905,66906,66908,66910,66912,66914,66916,66919],{"class":180,"line":952},[178,66907,63698],{"class":195},[178,66909,53167],{"class":319},[178,66911,1665],{"class":195},[178,66913,53222],{"class":699},[178,66915,53251],{"class":195},[178,66917,66918],{"class":195}," #d0d0d0",[178,66920,3100],{"class":319},[178,66922,66923,66925,66927,66930],{"class":180,"line":966},[178,66924,59137],{"class":195},[178,66926,53167],{"class":319},[178,66928,66929],{"class":195},"#404060",[178,66931,3100],{"class":319},[178,66933,66934,66936,66938,66940,66942],{"class":180,"line":980},[178,66935,56416],{"class":195},[178,66937,53167],{"class":319},[178,66939,2386],{"class":195},[178,66941,53222],{"class":699},[178,66943,3100],{"class":319},[178,66945,66946],{"class":180,"line":985},[178,66947,3971],{"class":319},[178,66949,66950],{"class":180,"line":1008},[178,66951,722],{"emptyLinePlaceholder":721},[178,66953,66954,66957],{"class":180,"line":1014},[178,66955,66956],{"class":184},"    .allCheck",[178,66958,17330],{"class":319},[178,66960,66961,66963,66965,66967,66969],{"class":180,"line":1019},[178,66962,56492],{"class":195},[178,66964,53167],{"class":319},[178,66966,2552],{"class":195},[178,66968,53222],{"class":699},[178,66970,3100],{"class":319},[178,66972,66973],{"class":180,"line":1033},[178,66974,3971],{"class":319},[178,66976,66977,66979,66981],{"class":180,"line":1046},[178,66978,357],{"class":319},[178,66980,1853],{"class":323},[178,66982,336],{"class":319},[178,66984,66985,66987,66989],{"class":180,"line":1059},[178,66986,367],{"class":319},[178,66988,53064],{"class":323},[178,66990,336],{"class":319},[178,66992,66993],{"class":180,"line":1072},[178,66994,722],{"emptyLinePlaceholder":721},[178,66996,66997,66999,67001],{"class":180,"line":1077},[178,66998,320],{"class":319},[178,67000,376],{"class":323},[178,67002,336],{"class":319},[178,67004,67005,67007,67009],{"class":180,"line":1082},[178,67006,341],{"class":319},[178,67008,45],{"class":323},[178,67010,336],{"class":319},[178,67012,67013,67015,67017],{"class":180,"line":1099},[178,67014,53071],{"class":319},[178,67016,51],{"class":323},[178,67018,336],{"class":319},[178,67020,67021,67023,67025,67027,67029,67032],{"class":180,"line":9806},[178,67022,56955],{"class":319},[178,67024,54],{"class":323},[178,67026,55210],{"class":184},[178,67028,330],{"class":319},[178,67030,67031],{"class":188},"\"allCheck\"",[178,67033,336],{"class":319},[178,67035,67036,67038,67040,67042,67044,67046,67048,67050,67052,67054,67056,67059,67062,67064,67066,67068,67071,67074,67076],{"class":180,"line":9818},[178,67037,57023],{"class":319},[178,67039,55543],{"class":323},[178,67041,467],{"class":184},[178,67043,330],{"class":319},[178,67045,55550],{"class":188},[178,67047,426],{"class":184},[178,67049,330],{"class":319},[178,67051,9421],{"class":188},[178,67053,16717],{"class":184},[178,67055,330],{"class":319},[178,67057,67058],{"class":188},"\"checkAll\"",[178,67060,67061],{"class":319},"> \u003C",[178,67063,178],{"class":323},[178,67065,55210],{"class":184},[178,67067,330],{"class":319},[178,67069,67070],{"class":188},"\"all\"",[178,67072,67073],{"class":319},">全选\u003C\u002F",[178,67075,178],{"class":323},[178,67077,336],{"class":319},[178,67079,67080,67082,67084],{"class":180,"line":11477},[178,67081,57128],{"class":319},[178,67083,54],{"class":323},[178,67085,336],{"class":319},[178,67087,67088,67090,67092,67095,67097],{"class":180,"line":11502},[178,67089,56955],{"class":319},[178,67091,54],{"class":323},[178,67093,67094],{"class":319},">商品\u003C\u002F",[178,67096,54],{"class":323},[178,67098,336],{"class":319},[178,67100,67101,67103,67105,67108,67110],{"class":180,"line":11525},[178,67102,56955],{"class":319},[178,67104,54],{"class":323},[178,67106,67107],{"class":319},">商家\u003C\u002F",[178,67109,54],{"class":323},[178,67111,336],{"class":319},[178,67113,67114,67116,67118,67121,67123],{"class":180,"line":11549},[178,67115,56955],{"class":319},[178,67117,54],{"class":323},[178,67119,67120],{"class":319},">价格\u003C\u002F",[178,67122,54],{"class":323},[178,67124,336],{"class":319},[178,67126,67127,67129,67131],{"class":180,"line":11554},[178,67128,53506],{"class":319},[178,67130,51],{"class":323},[178,67132,336],{"class":319},[178,67134,67135,67137,67139],{"class":180,"line":11559},[178,67136,53071],{"class":319},[178,67138,51],{"class":323},[178,67140,336],{"class":319},[178,67142,67143,67145,67147],{"class":180,"line":11564},[178,67144,56955],{"class":319},[178,67146,67],{"class":323},[178,67148,336],{"class":319},[178,67150,67151,67153,67155,67157,67159,67161,67163,67165,67168,67170,67172,67175],{"class":180,"line":11573},[178,67152,57023],{"class":319},[178,67154,55543],{"class":323},[178,67156,467],{"class":184},[178,67158,330],{"class":319},[178,67160,55550],{"class":188},[178,67162,426],{"class":184},[178,67164,330],{"class":319},[178,67166,67167],{"class":188},"\"check\"",[178,67169,55210],{"class":184},[178,67171,330],{"class":319},[178,67173,67174],{"class":188},"\"ck\"",[178,67176,336],{"class":319},[178,67178,67179,67181,67183],{"class":180,"line":11578},[178,67180,57128],{"class":319},[178,67182,67],{"class":323},[178,67184,336],{"class":319},[178,67186,67187,67189,67191,67193,67195],{"class":180,"line":11584},[178,67188,56955],{"class":319},[178,67190,67],{"class":323},[178,67192,62894],{"class":319},[178,67194,67],{"class":323},[178,67196,336],{"class":319},[178,67198,67199,67201,67203,67206,67208],{"class":180,"line":11605},[178,67200,56955],{"class":319},[178,67202,67],{"class":323},[178,67204,67205],{"class":319},">小米\u003C\u002F",[178,67207,67],{"class":323},[178,67209,336],{"class":319},[178,67211,67212,67214,67216,67219,67221],{"class":180,"line":11611},[178,67213,56955],{"class":319},[178,67215,67],{"class":323},[178,67217,67218],{"class":319},">￥1999\u003C\u002F",[178,67220,67],{"class":323},[178,67222,336],{"class":319},[178,67224,67225,67227,67229],{"class":180,"line":11625},[178,67226,53506],{"class":319},[178,67228,51],{"class":323},[178,67230,336],{"class":319},[178,67232,67233,67235,67237],{"class":180,"line":11631},[178,67234,53071],{"class":319},[178,67236,51],{"class":323},[178,67238,336],{"class":319},[178,67240,67241,67243,67245],{"class":180,"line":11658},[178,67242,56955],{"class":319},[178,67244,67],{"class":323},[178,67246,336],{"class":319},[178,67248,67249,67251,67253,67255,67257,67259,67261,67263,67265,67267,67269,67271],{"class":180,"line":11667},[178,67250,57023],{"class":319},[178,67252,55543],{"class":323},[178,67254,467],{"class":184},[178,67256,330],{"class":319},[178,67258,55550],{"class":188},[178,67260,426],{"class":184},[178,67262,330],{"class":319},[178,67264,67167],{"class":188},[178,67266,55210],{"class":184},[178,67268,330],{"class":319},[178,67270,67174],{"class":188},[178,67272,336],{"class":319},[178,67274,67275,67277,67279],{"class":180,"line":11673},[178,67276,57128],{"class":319},[178,67278,67],{"class":323},[178,67280,336],{"class":319},[178,67282,67283,67285,67287,67290,67292],{"class":180,"line":11681},[178,67284,56955],{"class":319},[178,67286,67],{"class":323},[178,67288,67289],{"class":319},">小米净水器\u003C\u002F",[178,67291,67],{"class":323},[178,67293,336],{"class":319},[178,67295,67296,67298,67300,67302,67304],{"class":180,"line":11686},[178,67297,56955],{"class":319},[178,67299,67],{"class":323},[178,67301,67205],{"class":319},[178,67303,67],{"class":323},[178,67305,336],{"class":319},[178,67307,67308,67310,67312,67315,67317],{"class":180,"line":18362},[178,67309,56955],{"class":319},[178,67311,67],{"class":323},[178,67313,67314],{"class":319},">￥4999\u003C\u002F",[178,67316,67],{"class":323},[178,67318,336],{"class":319},[178,67320,67321,67323,67325],{"class":180,"line":18368},[178,67322,53506],{"class":319},[178,67324,51],{"class":323},[178,67326,336],{"class":319},[178,67328,67329,67331,67333],{"class":180,"line":18391},[178,67330,53071],{"class":319},[178,67332,51],{"class":323},[178,67334,336],{"class":319},[178,67336,67337,67339,67341],{"class":180,"line":18397},[178,67338,56955],{"class":319},[178,67340,67],{"class":323},[178,67342,336],{"class":319},[178,67344,67345,67347,67349,67351,67353,67355,67357,67359,67361,67363,67365,67367],{"class":180,"line":18420},[178,67346,57023],{"class":319},[178,67348,55543],{"class":323},[178,67350,467],{"class":184},[178,67352,330],{"class":319},[178,67354,55550],{"class":188},[178,67356,426],{"class":184},[178,67358,330],{"class":319},[178,67360,67167],{"class":188},[178,67362,55210],{"class":184},[178,67364,330],{"class":319},[178,67366,67174],{"class":188},[178,67368,336],{"class":319},[178,67370,67371,67373,67375],{"class":180,"line":18434},[178,67372,57128],{"class":319},[178,67374,67],{"class":323},[178,67376,336],{"class":319},[178,67378,67379,67381,67383,67386,67388],{"class":180,"line":18454},[178,67380,56955],{"class":319},[178,67382,67],{"class":323},[178,67384,67385],{"class":319},">小米电视\u003C\u002F",[178,67387,67],{"class":323},[178,67389,336],{"class":319},[178,67391,67392,67394,67396,67398,67400],{"class":180,"line":18460},[178,67393,56955],{"class":319},[178,67395,67],{"class":323},[178,67397,67205],{"class":319},[178,67399,67],{"class":323},[178,67401,336],{"class":319},[178,67403,67404,67406,67408,67411,67413],{"class":180,"line":18471},[178,67405,56955],{"class":319},[178,67407,67],{"class":323},[178,67409,67410],{"class":319},">￥5999\u003C\u002F",[178,67412,67],{"class":323},[178,67414,336],{"class":319},[178,67416,67417,67419,67421],{"class":180,"line":18494},[178,67418,53506],{"class":319},[178,67420,51],{"class":323},[178,67422,336],{"class":319},[178,67424,67425,67427,67429],{"class":180,"line":18516},[178,67426,357],{"class":319},[178,67428,45],{"class":323},[178,67430,336],{"class":319},[178,67432,67433,67435,67437],{"class":180,"line":18521},[178,67434,341],{"class":319},[178,67436,53541],{"class":323},[178,67438,336],{"class":319},[178,67440,67441],{"class":180,"line":18527},[178,67442,67443],{"class":2008},"    \u002F\u002F 1. 获取大复选框\n",[178,67445,67446,67448,67451,67453,67455,67457,67459,67462],{"class":180,"line":18541},[178,67447,12982],{"class":699},[178,67449,67450],{"class":195}," checkAll",[178,67452,734],{"class":699},[178,67454,56117],{"class":319},[178,67456,56120],{"class":184},[178,67458,944],{"class":319},[178,67460,67461],{"class":188},"'#checkAll'",[178,67463,863],{"class":319},[178,67465,67466],{"class":180,"line":18554},[178,67467,67468],{"class":2008},"    \u002F\u002F 2. 获取所有的小复选框\n",[178,67470,67471,67473,67476,67478,67480,67482,67484,67487],{"class":180,"line":18559},[178,67472,12982],{"class":699},[178,67474,67475],{"class":195}," cks",[178,67477,734],{"class":699},[178,67479,56117],{"class":319},[178,67481,57402],{"class":184},[178,67483,944],{"class":319},[178,67485,67486],{"class":188},"'.ck'",[178,67488,863],{"class":319},[178,67490,67491],{"class":180,"line":18573},[178,67492,67493],{"class":2008},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[178,67495,67496,67499,67501,67503,67505,67507,67509],{"class":180,"line":18578},[178,67497,67498],{"class":319},"    checkAll.",[178,67500,59534],{"class":184},[178,67502,944],{"class":319},[178,67504,59539],{"class":188},[178,67506,14196],{"class":319},[178,67508,56170],{"class":699},[178,67510,56173],{"class":319},[178,67512,67513],{"class":180,"line":18584},[178,67514,67515],{"class":2008},"      \u002F\u002F 得到当前大复选框的选中状态\n",[178,67517,67518,67521],{"class":180,"line":18589},[178,67519,67520],{"class":2008},"      \u002F\u002F console.log(checkAll.checked)",[178,67522,67523],{"class":2008},"  \u002F\u002F 得到 是 true 或者是 false\n",[178,67525,67526],{"class":180,"line":18603},[178,67527,67528],{"class":2008},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[178,67530,67531,67533,67535,67537,67539,67541,67543,67545,67547,67550,67552,67554,67556],{"class":180,"line":18608},[178,67532,54011],{"class":699},[178,67534,3457],{"class":319},[178,67536,53575],{"class":699},[178,67538,11199],{"class":319},[178,67540,330],{"class":699},[178,67542,930],{"class":195},[178,67544,11206],{"class":319},[178,67546,320],{"class":699},[178,67548,67549],{"class":319}," cks.",[178,67551,53696],{"class":195},[178,67553,4987],{"class":319},[178,67555,4076],{"class":699},[178,67557,14203],{"class":319},[178,67559,67560,67563,67565,67568],{"class":180,"line":18613},[178,67561,67562],{"class":319},"        cks[i].checked ",[178,67564,330],{"class":699},[178,67566,67567],{"class":195}," this",[178,67569,67570],{"class":319},".checked\n",[178,67572,67573],{"class":180,"line":18627},[178,67574,54125],{"class":319},[178,67576,67577],{"class":180,"line":18639},[178,67578,35193],{"class":319},[178,67580,67581],{"class":180,"line":18644},[178,67582,67583],{"class":2008},"    \u002F\u002F 5. 小复选框控制大复选框\n",[178,67585,67586],{"class":180,"line":18657},[178,67587,722],{"emptyLinePlaceholder":721},[178,67589,67590,67592,67594,67596,67598,67600,67602,67604,67606,67608,67610,67612,67614],{"class":180,"line":18662},[178,67591,988],{"class":699},[178,67593,3457],{"class":319},[178,67595,53575],{"class":699},[178,67597,11199],{"class":319},[178,67599,330],{"class":699},[178,67601,930],{"class":195},[178,67603,11206],{"class":319},[178,67605,320],{"class":699},[178,67607,67549],{"class":319},[178,67609,53696],{"class":195},[178,67611,4987],{"class":319},[178,67613,4076],{"class":699},[178,67615,14203],{"class":319},[178,67617,67618],{"class":180,"line":18667},[178,67619,67620],{"class":2008},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[178,67622,67623,67626,67628,67630,67632,67634,67636],{"class":180,"line":18672},[178,67624,67625],{"class":319},"      cks[i].",[178,67627,59534],{"class":184},[178,67629,944],{"class":319},[178,67631,59539],{"class":188},[178,67633,14196],{"class":319},[178,67635,56170],{"class":699},[178,67637,56173],{"class":319},[178,67639,67640],{"class":180,"line":18685},[178,67641,67642],{"class":2008},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[178,67644,67645],{"class":180,"line":18690},[178,67646,67647],{"class":2008},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[178,67649,67650],{"class":180,"line":34365},[178,67651,67652],{"class":2008},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[178,67654,67655],{"class":180,"line":34371},[178,67656,67657],{"class":2008},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[178,67659,67660,67663,67665,67667,67669,67671,67674,67676,67678,67680,67682],{"class":180,"line":34377},[178,67661,67662],{"class":319},"        checkAll.checked ",[178,67664,330],{"class":699},[178,67666,56117],{"class":319},[178,67668,57402],{"class":184},[178,67670,944],{"class":319},[178,67672,67673],{"class":188},"'.ck:checked'",[178,67675,32567],{"class":319},[178,67677,53696],{"class":195},[178,67679,59627],{"class":699},[178,67681,67549],{"class":319},[178,67683,57552],{"class":195},[178,67685,67686],{"class":180,"line":34383},[178,67687,66535],{"class":319},[178,67689,67690],{"class":180,"line":34389},[178,67691,3971],{"class":319},[178,67693,67694,67696,67698],{"class":180,"line":34400},[178,67695,357],{"class":319},[178,67697,53541],{"class":323},[178,67699,336],{"class":319},[178,67701,67702,67704,67706],{"class":180,"line":34406},[178,67703,367],{"class":319},[178,67705,376],{"class":323},[178,67707,336],{"class":319},[178,67709,67710],{"class":180,"line":34426},[178,67711,722],{"emptyLinePlaceholder":721},[178,67713,67714,67716,67718],{"class":180,"line":34432},[178,67715,367],{"class":319},[178,67717,52367],{"class":323},[178,67719,336],{"class":319},[19,67721,67722],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,67724,67725],{},"用好之间比较得到的布尔值！！！",[19,67727,67728,67729,67732,67733,3457,67736,2524,67738,67741],{},"在 JS 里访问的时候，",[70,67730,67731],{},"checkbox.checked"," 是一个 ",[2093,67734,67735],{},"布尔值",[70,67737,3169],{},[70,67739,67740],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,67743,67744,67745,67748,67749],{},"HTML 的 ",[70,67746,67747],{},"checked=\"checked\""," 只是 ",[2093,67750,67751,67752,67755],{},"初始值；JS 的 ",[70,67753,67754],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,67757,67758],{},"：checked是一个伪类选择器",[19,67760,67761],{},[3269,67762],{"alt":160,"src":67763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,67765,67766,67769],{},[67767,67768],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,67771,67772],{},[3269,67773],{"alt":160,"src":67774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67776,67778],{"id":67777},"_33-dom事件进阶","3.3 DOM事件进阶",[387,67780,67782],{"id":67781},"_331-事件流","3.3.1 事件流",[19,67784,67785],{},[3269,67786],{"alt":160,"src":67787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[23756,67789,67791],{"id":67790},"_3311-事件捕获","3.3.1.1 事件捕获",[19,67793,67794],{},[3269,67795],{"alt":160,"src":67796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[154,67798,67800],{"className":52365,"code":67799,"language":52367,"meta":160,"style":160},"\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",[70,67801,67802,67812,67826,67830,67838,67852,67872,67884,67892,67899,67911,67923,67933,67937,67941,67948,67960,67972,67982,67986,67994,68002,68006,68014,68029,68048,68056,68064,68084,68104,68120,68131,68139,68156,68167,68175,68192,68203,68211,68219,68227,68231],{"__ignoreMap":160},[178,67803,67804,67806,67808,67810],{"class":180,"line":181},[178,67805,53029],{"class":319},[178,67807,53032],{"class":323},[178,67809,53035],{"class":184},[178,67811,336],{"class":319},[178,67813,67814,67816,67818,67820,67822,67824],{"class":180,"line":263},[178,67815,320],{"class":319},[178,67817,52367],{"class":323},[178,67819,53046],{"class":184},[178,67821,330],{"class":319},[178,67823,53051],{"class":188},[178,67825,336],{"class":319},[178,67827,67828],{"class":180,"line":274},[178,67829,722],{"emptyLinePlaceholder":721},[178,67831,67832,67834,67836],{"class":180,"line":354},[178,67833,320],{"class":319},[178,67835,53064],{"class":323},[178,67837,336],{"class":319},[178,67839,67840,67842,67844,67846,67848,67850],{"class":180,"line":364},[178,67841,341],{"class":319},[178,67843,53074],{"class":323},[178,67845,53077],{"class":184},[178,67847,330],{"class":319},[178,67849,53082],{"class":188},[178,67851,336],{"class":319},[178,67853,67854,67856,67858,67860,67862,67864,67866,67868,67870],{"class":180,"line":740},[178,67855,341],{"class":319},[178,67857,53074],{"class":323},[178,67859,426],{"class":184},[178,67861,330],{"class":319},[178,67863,53121],{"class":188},[178,67865,53101],{"class":184},[178,67867,330],{"class":319},[178,67869,53128],{"class":188},[178,67871,336],{"class":319},[178,67873,67874,67876,67878,67880,67882],{"class":180,"line":746},[178,67875,341],{"class":319},[178,67877,53137],{"class":323},[178,67879,53140],{"class":319},[178,67881,53137],{"class":323},[178,67883,336],{"class":319},[178,67885,67886,67888,67890],{"class":180,"line":752},[178,67887,341],{"class":319},[178,67889,1853],{"class":323},[178,67891,336],{"class":319},[178,67893,67894,67897],{"class":180,"line":757},[178,67895,67896],{"class":184},"    .father",[178,67898,17330],{"class":319},[178,67900,67901,67903,67905,67907,67909],{"class":180,"line":763},[178,67902,56492],{"class":195},[178,67904,53167],{"class":319},[178,67906,66794],{"class":195},[178,67908,53222],{"class":699},[178,67910,3100],{"class":319},[178,67912,67913,67915,67917,67919,67921],{"class":180,"line":769},[178,67914,56506],{"class":195},[178,67916,53167],{"class":319},[178,67918,66794],{"class":195},[178,67920,53222],{"class":699},[178,67922,3100],{"class":319},[178,67924,67925,67927,67929,67931],{"class":180,"line":774},[178,67926,56605],{"class":195},[178,67928,53167],{"class":319},[178,67930,53375],{"class":195},[178,67932,3100],{"class":319},[178,67934,67935],{"class":180,"line":780},[178,67936,3971],{"class":319},[178,67938,67939],{"class":180,"line":786},[178,67940,722],{"emptyLinePlaceholder":721},[178,67942,67943,67946],{"class":180,"line":792},[178,67944,67945],{"class":184},"    .son",[178,67947,17330],{"class":319},[178,67949,67950,67952,67954,67956,67958],{"class":180,"line":798},[178,67951,56492],{"class":195},[178,67953,53167],{"class":319},[178,67955,1002],{"class":195},[178,67957,53222],{"class":699},[178,67959,3100],{"class":319},[178,67961,67962,67964,67966,67968,67970],{"class":180,"line":804},[178,67963,56506],{"class":195},[178,67965,53167],{"class":319},[178,67967,1002],{"class":195},[178,67969,53222],{"class":699},[178,67971,3100],{"class":319},[178,67973,67974,67976,67978,67980],{"class":180,"line":810},[178,67975,56605],{"class":195},[178,67977,53167],{"class":319},[178,67979,56610],{"class":195},[178,67981,3100],{"class":319},[178,67983,67984],{"class":180,"line":816},[178,67985,3971],{"class":319},[178,67987,67988,67990,67992],{"class":180,"line":822},[178,67989,357],{"class":319},[178,67991,1853],{"class":323},[178,67993,336],{"class":319},[178,67995,67996,67998,68000],{"class":180,"line":827},[178,67997,367],{"class":319},[178,67999,53064],{"class":323},[178,68001,336],{"class":319},[178,68003,68004],{"class":180,"line":832},[178,68005,722],{"emptyLinePlaceholder":721},[178,68007,68008,68010,68012],{"class":180,"line":850},[178,68009,320],{"class":319},[178,68011,376],{"class":323},[178,68013,336],{"class":319},[178,68015,68016,68018,68020,68022,68024,68027],{"class":180,"line":866},[178,68017,341],{"class":319},[178,68019,53341],{"class":323},[178,68021,55210],{"class":184},[178,68023,330],{"class":319},[178,68025,68026],{"class":188},"\"father\"",[178,68028,336],{"class":319},[178,68030,68031,68033,68035,68037,68039,68042,68044,68046],{"class":180,"line":877},[178,68032,53071],{"class":319},[178,68034,53341],{"class":323},[178,68036,55210],{"class":184},[178,68038,330],{"class":319},[178,68040,68041],{"class":188},"\"son\"",[178,68043,57035],{"class":319},[178,68045,53341],{"class":323},[178,68047,336],{"class":319},[178,68049,68050,68052,68054],{"class":180,"line":882},[178,68051,357],{"class":319},[178,68053,53341],{"class":323},[178,68055,336],{"class":319},[178,68057,68058,68060,68062],{"class":180,"line":898},[178,68059,341],{"class":319},[178,68061,53541],{"class":323},[178,68063,336],{"class":319},[178,68065,68066,68068,68071,68073,68075,68077,68079,68082],{"class":180,"line":914},[178,68067,12982],{"class":699},[178,68069,68070],{"class":195}," fa",[178,68072,734],{"class":699},[178,68074,56117],{"class":319},[178,68076,56120],{"class":184},[178,68078,944],{"class":319},[178,68080,68081],{"class":188},"'.father'",[178,68083,863],{"class":319},[178,68085,68086,68088,68091,68093,68095,68097,68099,68102],{"class":180,"line":919},[178,68087,12982],{"class":699},[178,68089,68090],{"class":195}," son",[178,68092,734],{"class":699},[178,68094,56117],{"class":319},[178,68096,56120],{"class":184},[178,68098,944],{"class":319},[178,68100,68101],{"class":188},"'.son'",[178,68103,863],{"class":319},[178,68105,68106,68108,68110,68112,68114,68116,68118],{"class":180,"line":935},[178,68107,54134],{"class":319},[178,68109,59534],{"class":184},[178,68111,944],{"class":319},[178,68113,59539],{"class":188},[178,68115,14196],{"class":319},[178,68117,56170],{"class":699},[178,68119,56173],{"class":319},[178,68121,68122,68124,68126,68129],{"class":180,"line":952},[178,68123,60646],{"class":184},[178,68125,944],{"class":319},[178,68127,68128],{"class":188},"'woshiu1'",[178,68130,863],{"class":319},[178,68132,68133,68135,68137],{"class":180,"line":966},[178,68134,56256],{"class":319},[178,68136,3169],{"class":195},[178,68138,863],{"class":319},[178,68140,68141,68144,68146,68148,68150,68152,68154],{"class":180,"line":980},[178,68142,68143],{"class":319},"    fa.",[178,68145,59534],{"class":184},[178,68147,944],{"class":319},[178,68149,59539],{"class":188},[178,68151,14196],{"class":319},[178,68153,56170],{"class":699},[178,68155,56173],{"class":319},[178,68157,68158,68160,68162,68165],{"class":180,"line":985},[178,68159,60646],{"class":184},[178,68161,944],{"class":319},[178,68163,68164],{"class":188},"'1'",[178,68166,863],{"class":319},[178,68168,68169,68171,68173],{"class":180,"line":1008},[178,68170,56256],{"class":319},[178,68172,3169],{"class":195},[178,68174,863],{"class":319},[178,68176,68177,68180,68182,68184,68186,68188,68190],{"class":180,"line":1014},[178,68178,68179],{"class":319},"    son.",[178,68181,59534],{"class":184},[178,68183,944],{"class":319},[178,68185,59539],{"class":188},[178,68187,14196],{"class":319},[178,68189,56170],{"class":699},[178,68191,56173],{"class":319},[178,68193,68194,68196,68198,68201],{"class":180,"line":1019},[178,68195,60646],{"class":184},[178,68197,944],{"class":319},[178,68199,68200],{"class":188},"'2'",[178,68202,863],{"class":319},[178,68204,68205,68207,68209],{"class":180,"line":1033},[178,68206,56256],{"class":319},[178,68208,3169],{"class":195},[178,68210,863],{"class":319},[178,68212,68213,68215,68217],{"class":180,"line":1046},[178,68214,357],{"class":319},[178,68216,53541],{"class":323},[178,68218,336],{"class":319},[178,68220,68221,68223,68225],{"class":180,"line":1059},[178,68222,367],{"class":319},[178,68224,376],{"class":323},[178,68226,336],{"class":319},[178,68228,68229],{"class":180,"line":1072},[178,68230,722],{"emptyLinePlaceholder":721},[178,68232,68233,68235,68237],{"class":180,"line":1077},[178,68234,367],{"class":319},[178,68236,52367],{"class":323},[178,68238,336],{"class":319},[19,68240,68241],{},[3269,68242],{"alt":160,"src":68243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,68245,68246],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[23756,68248,68250],{"id":68249},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,68252,68253],{},[3269,68254],{"alt":160,"src":68255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,68257,68258],{},"反着来",[19,68260,68261],{},"注意是同名事件，比如都是‘click’",[23756,68263,68265],{"id":68264},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,68267,68268],{},[3269,68269],{"alt":160,"src":68270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[23756,68272,68274],{"id":68273},"_3314-解绑事件","3.3.1.4 解绑事件",[19,68276,68277],{},[3269,68278],{"alt":160,"src":68279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,68281,68282],{},[3269,68283],{"alt":160,"src":68284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[23756,68286,68288],{"id":68287},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[26,68290,68291],{},[29,68292,68293],{},"事件类型的区别",[19,68295,68296],{},[3269,68297],{"alt":160,"src":68298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,68300,68301],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[26,68303,68304],{"start":263},[29,68305,68306],{},"注册事件的区别",[19,68308,68309],{},[3269,68310],{"alt":160,"src":68311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[23756,68313,68315],{"id":68314},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,68317,68318],{},[3269,68319],{"alt":160,"src":68320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,68322,68323],{},[3269,68324],{"alt":160,"src":68325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[154,68327,68329],{"className":310,"code":68328,"language":312,"meta":160,"style":160},"\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",[70,68330,68331,68339,68356,68379,68387,68392,68397,68402,68406,68414,68422],{"__ignoreMap":160},[178,68332,68333,68335,68337],{"class":180,"line":181},[178,68334,320],{"class":319},[178,68336,376],{"class":323},[178,68338,336],{"class":319},[178,68340,68341,68343,68346,68349,68351,68354],{"class":180,"line":263},[178,68342,341],{"class":319},[178,68344,68345],{"class":323},"form",[178,68347,68348],{"class":184}," action",[178,68350,330],{"class":319},[178,68352,68353],{"class":188},"\"http:\u002F\u002Fwww.itcast.cn\"",[178,68355,336],{"class":319},[178,68357,68358,68360,68362,68364,68366,68369,68372,68374,68377],{"class":180,"line":274},[178,68359,53071],{"class":319},[178,68361,55543],{"class":323},[178,68363,467],{"class":184},[178,68365,330],{"class":319},[178,68367,68368],{"class":188},"\"submit\"",[178,68370,68371],{"class":184}," value",[178,68373,330],{"class":319},[178,68375,68376],{"class":188},"\"免费注册\"",[178,68378,336],{"class":319},[178,68380,68381,68383,68385],{"class":180,"line":354},[178,68382,53071],{"class":319},[178,68384,53541],{"class":323},[178,68386,336],{"class":319},[178,68388,68389],{"class":180,"line":364},[178,68390,68391],{"class":319},"      const form = document.querySelector('form')\n",[178,68393,68394],{"class":180,"line":740},[178,68395,68396],{"class":319},"      form.addEventListener('submit', function (e) {\n",[178,68398,68399],{"class":180,"line":746},[178,68400,68401],{"class":319},"        e.preventDefault()\n",[178,68403,68404],{"class":180,"line":752},[178,68405,66535],{"class":319},[178,68407,68408,68410,68412],{"class":180,"line":757},[178,68409,53506],{"class":319},[178,68411,53541],{"class":323},[178,68413,336],{"class":319},[178,68415,68416,68418,68420],{"class":180,"line":763},[178,68417,357],{"class":319},[178,68419,68345],{"class":323},[178,68421,336],{"class":319},[178,68423,68424,68426,68428],{"class":180,"line":769},[178,68425,367],{"class":319},[178,68427,376],{"class":323},[178,68429,336],{"class":319},[19,68431,68432],{},"点击不在跳转！！！",[387,68434,68436],{"id":68435},"_332-事件委托","3.3.2 事件委托",[19,68438,68439],{},[3269,68440],{"alt":160,"src":68441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[154,68443,68445],{"className":52365,"code":68444,"language":52367,"meta":160,"style":160},"\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",[70,68446,68447,68457,68471,68475,68483,68497,68517,68529,68537,68541,68549,68557,68569,68581,68593,68605,68617,68630,68638,68646,68651,68670,68691,68696,68701,68706,68711,68720,68724,68734,68738,68743,68748,68762,68772,68776,68780,68788,68796,68800],{"__ignoreMap":160},[178,68448,68449,68451,68453,68455],{"class":180,"line":181},[178,68450,53029],{"class":319},[178,68452,53032],{"class":323},[178,68454,53035],{"class":184},[178,68456,336],{"class":319},[178,68458,68459,68461,68463,68465,68467,68469],{"class":180,"line":263},[178,68460,320],{"class":319},[178,68462,52367],{"class":323},[178,68464,53046],{"class":184},[178,68466,330],{"class":319},[178,68468,53051],{"class":188},[178,68470,336],{"class":319},[178,68472,68473],{"class":180,"line":274},[178,68474,722],{"emptyLinePlaceholder":721},[178,68476,68477,68479,68481],{"class":180,"line":354},[178,68478,320],{"class":319},[178,68480,53064],{"class":323},[178,68482,336],{"class":319},[178,68484,68485,68487,68489,68491,68493,68495],{"class":180,"line":364},[178,68486,341],{"class":319},[178,68488,53074],{"class":323},[178,68490,53077],{"class":184},[178,68492,330],{"class":319},[178,68494,53082],{"class":188},[178,68496,336],{"class":319},[178,68498,68499,68501,68503,68505,68507,68509,68511,68513,68515],{"class":180,"line":740},[178,68500,341],{"class":319},[178,68502,53074],{"class":323},[178,68504,426],{"class":184},[178,68506,330],{"class":319},[178,68508,53121],{"class":188},[178,68510,53101],{"class":184},[178,68512,330],{"class":319},[178,68514,53128],{"class":188},[178,68516,336],{"class":319},[178,68518,68519,68521,68523,68525,68527],{"class":180,"line":746},[178,68520,341],{"class":319},[178,68522,53137],{"class":323},[178,68524,53140],{"class":319},[178,68526,53137],{"class":323},[178,68528,336],{"class":319},[178,68530,68531,68533,68535],{"class":180,"line":752},[178,68532,367],{"class":319},[178,68534,53064],{"class":323},[178,68536,336],{"class":319},[178,68538,68539],{"class":180,"line":757},[178,68540,722],{"emptyLinePlaceholder":721},[178,68542,68543,68545,68547],{"class":180,"line":763},[178,68544,320],{"class":319},[178,68546,376],{"class":323},[178,68548,336],{"class":319},[178,68550,68551,68553,68555],{"class":180,"line":769},[178,68552,341],{"class":319},[178,68554,2946],{"class":323},[178,68556,336],{"class":319},[178,68558,68559,68561,68563,68565,68567],{"class":180,"line":774},[178,68560,53071],{"class":319},[178,68562,29],{"class":323},[178,68564,55687],{"class":319},[178,68566,29],{"class":323},[178,68568,336],{"class":319},[178,68570,68571,68573,68575,68577,68579],{"class":180,"line":780},[178,68572,53071],{"class":319},[178,68574,29],{"class":323},[178,68576,55706],{"class":319},[178,68578,29],{"class":323},[178,68580,336],{"class":319},[178,68582,68583,68585,68587,68589,68591],{"class":180,"line":786},[178,68584,53071],{"class":319},[178,68586,29],{"class":323},[178,68588,55725],{"class":319},[178,68590,29],{"class":323},[178,68592,336],{"class":319},[178,68594,68595,68597,68599,68601,68603],{"class":180,"line":792},[178,68596,53071],{"class":319},[178,68598,29],{"class":323},[178,68600,55744],{"class":319},[178,68602,29],{"class":323},[178,68604,336],{"class":319},[178,68606,68607,68609,68611,68613,68615],{"class":180,"line":798},[178,68608,53071],{"class":319},[178,68610,29],{"class":323},[178,68612,55763],{"class":319},[178,68614,29],{"class":323},[178,68616,336],{"class":319},[178,68618,68619,68621,68623,68626,68628],{"class":180,"line":804},[178,68620,53071],{"class":319},[178,68622,19],{"class":323},[178,68624,68625],{"class":319},">我不需要变色\u003C\u002F",[178,68627,19],{"class":323},[178,68629,336],{"class":319},[178,68631,68632,68634,68636],{"class":180,"line":810},[178,68633,357],{"class":319},[178,68635,2946],{"class":323},[178,68637,336],{"class":319},[178,68639,68640,68642,68644],{"class":180,"line":816},[178,68641,341],{"class":319},[178,68643,53541],{"class":323},[178,68645,336],{"class":319},[178,68647,68648],{"class":180,"line":822},[178,68649,68650],{"class":2008},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[178,68652,68653,68655,68657,68659,68661,68663,68665,68668],{"class":180,"line":827},[178,68654,12982],{"class":699},[178,68656,63013],{"class":195},[178,68658,734],{"class":699},[178,68660,56117],{"class":319},[178,68662,56120],{"class":184},[178,68664,944],{"class":319},[178,68666,68667],{"class":188},"'ul'",[178,68669,863],{"class":319},[178,68671,68672,68675,68677,68679,68681,68683,68685,68687,68689],{"class":180,"line":832},[178,68673,68674],{"class":319},"    ul.",[178,68676,59534],{"class":184},[178,68678,944],{"class":319},[178,68680,59539],{"class":188},[178,68682,14196],{"class":319},[178,68684,56170],{"class":699},[178,68686,3457],{"class":319},[178,68688,2024],{"class":6985},[178,68690,14203],{"class":319},[178,68692,68693],{"class":180,"line":850},[178,68694,68695],{"class":2008},"      \u002F\u002F alert(1)\n",[178,68697,68698],{"class":180,"line":866},[178,68699,68700],{"class":2008},"      \u002F\u002F e.target就是我们点击的对象\n",[178,68702,68703],{"class":180,"line":877},[178,68704,68705],{"class":2008},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[178,68707,68708],{"class":180,"line":882},[178,68709,68710],{"class":2008},"      \u002F\u002F e.target.style.color = 'red'\n",[178,68712,68713,68715,68717],{"class":180,"line":898},[178,68714,59965],{"class":319},[178,68716,59968],{"class":184},[178,68718,68719],{"class":319},"(e)\n",[178,68721,68722],{"class":180,"line":914},[178,68723,722],{"emptyLinePlaceholder":721},[178,68725,68726,68728,68731],{"class":180,"line":919},[178,68727,59965],{"class":319},[178,68729,68730],{"class":184},"dir",[178,68732,68733],{"class":319},"(e.target)\n",[178,68735,68736],{"class":180,"line":935},[178,68737,722],{"emptyLinePlaceholder":721},[178,68739,68740],{"class":180,"line":952},[178,68741,68742],{"class":2008},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[178,68744,68745],{"class":180,"line":966},[178,68746,68747],{"class":2008},"      \u002F\u002F 通过tagName来进行判断\n",[178,68749,68750,68752,68755,68757,68760],{"class":180,"line":980},[178,68751,56201],{"class":699},[178,68753,68754],{"class":319}," (e.target.tagName ",[178,68756,56207],{"class":699},[178,68758,68759],{"class":188}," 'LI'",[178,68761,14203],{"class":319},[178,68763,68764,68767,68769],{"class":180,"line":985},[178,68765,68766],{"class":319},"        e.target.style.color ",[178,68768,330],{"class":699},[178,68770,68771],{"class":188}," 'red'\n",[178,68773,68774],{"class":180,"line":1008},[178,68775,54125],{"class":319},[178,68777,68778],{"class":180,"line":1014},[178,68779,35193],{"class":319},[178,68781,68782,68784,68786],{"class":180,"line":1019},[178,68783,357],{"class":319},[178,68785,53541],{"class":323},[178,68787,336],{"class":319},[178,68789,68790,68792,68794],{"class":180,"line":1033},[178,68791,367],{"class":319},[178,68793,376],{"class":323},[178,68795,336],{"class":319},[178,68797,68798],{"class":180,"line":1046},[178,68799,722],{"emptyLinePlaceholder":721},[178,68801,68802,68804,68806],{"class":180,"line":1059},[178,68803,367],{"class":319},[178,68805,52367],{"class":323},[178,68807,336],{"class":319},[19,68809,68810],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,68812,68813],{},"if(e.target.ragName==='P') {}",[19,68815,68816],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,68818,68819],{},"通过事件委托的方式实现tab栏切换改造：",[19,68821,68822],{},"一定要记住自定义属性！！！！！！",[19,68824,68825],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,68827,68828],{},"id是自定义的属性名",[19,68830,68831],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[154,68833,68835],{"className":52365,"code":68834,"language":52367,"meta":160,"style":160},"\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",[70,68836,68837,68847,68861,68865,68873,68887,68907,68927,68939,68947,68953,68963,68973,68977,68981,68987,68999,69011,69023,69039,69043,69047,69053,69065,69077,69089,69099,69109,69113,69117,69125,69137,69147,69159,69163,69167,69175,69185,69195,69205,69209,69213,69223,69237,69249,69253,69257,69269,69279,69295,69305,69309,69313,69327,69337,69347,69351,69355,69361,69375,69379,69383,69391,69401,69405,69409,69418,69428,69432,69440,69448,69452,69460,69474,69488,69500,69508,69547,69579,69611,69643,69675,69683,69691,69705,69739,69773,69807,69841,69875,69883,69891,69899,69904,69909,69928,69933,69953,69961,69966,69979,70000,70013,70017,70022,70027,70040,70060,70088,70092,70096,70100,70108,70116,70120],{"__ignoreMap":160},[178,68838,68839,68841,68843,68845],{"class":180,"line":181},[178,68840,53029],{"class":319},[178,68842,53032],{"class":323},[178,68844,53035],{"class":184},[178,68846,336],{"class":319},[178,68848,68849,68851,68853,68855,68857,68859],{"class":180,"line":263},[178,68850,320],{"class":319},[178,68852,52367],{"class":323},[178,68854,53046],{"class":184},[178,68856,330],{"class":319},[178,68858,53051],{"class":188},[178,68860,336],{"class":319},[178,68862,68863],{"class":180,"line":274},[178,68864,722],{"emptyLinePlaceholder":721},[178,68866,68867,68869,68871],{"class":180,"line":354},[178,68868,320],{"class":319},[178,68870,53064],{"class":323},[178,68872,336],{"class":319},[178,68874,68875,68877,68879,68881,68883,68885],{"class":180,"line":364},[178,68876,341],{"class":319},[178,68878,53074],{"class":323},[178,68880,53077],{"class":184},[178,68882,330],{"class":319},[178,68884,53082],{"class":188},[178,68886,60848],{"class":319},[178,68888,68889,68891,68893,68895,68897,68899,68901,68903,68905],{"class":180,"line":740},[178,68890,341],{"class":319},[178,68892,53074],{"class":323},[178,68894,53093],{"class":184},[178,68896,330],{"class":319},[178,68898,53098],{"class":188},[178,68900,53101],{"class":184},[178,68902,330],{"class":319},[178,68904,53106],{"class":188},[178,68906,60848],{"class":319},[178,68908,68909,68911,68913,68915,68917,68919,68921,68923,68925],{"class":180,"line":746},[178,68910,341],{"class":319},[178,68912,53074],{"class":323},[178,68914,426],{"class":184},[178,68916,330],{"class":319},[178,68918,53121],{"class":188},[178,68920,53101],{"class":184},[178,68922,330],{"class":319},[178,68924,53128],{"class":188},[178,68926,60848],{"class":319},[178,68928,68929,68931,68933,68935,68937],{"class":180,"line":752},[178,68930,341],{"class":319},[178,68932,53137],{"class":323},[178,68934,65345],{"class":319},[178,68936,53137],{"class":323},[178,68938,336],{"class":319},[178,68940,68941,68943,68945],{"class":180,"line":757},[178,68942,341],{"class":319},[178,68944,1853],{"class":323},[178,68946,336],{"class":319},[178,68948,68949,68951],{"class":180,"line":763},[178,68950,8172],{"class":323},[178,68952,17330],{"class":319},[178,68954,68955,68957,68959,68961],{"class":180,"line":769},[178,68956,56427],{"class":195},[178,68958,53167],{"class":319},[178,68960,2133],{"class":195},[178,68962,3100],{"class":319},[178,68964,68965,68967,68969,68971],{"class":180,"line":774},[178,68966,56416],{"class":195},[178,68968,53167],{"class":319},[178,68970,2133],{"class":195},[178,68972,3100],{"class":319},[178,68974,68975],{"class":180,"line":780},[178,68976,3971],{"class":319},[178,68978,68979],{"class":180,"line":786},[178,68980,722],{"emptyLinePlaceholder":721},[178,68982,68983,68985],{"class":180,"line":792},[178,68984,65396],{"class":184},[178,68986,17330],{"class":319},[178,68988,68989,68991,68993,68995,68997],{"class":180,"line":798},[178,68990,56492],{"class":195},[178,68992,53167],{"class":319},[178,68994,65407],{"class":195},[178,68996,53222],{"class":699},[178,68998,3100],{"class":319},[178,69000,69001,69003,69005,69007,69009],{"class":180,"line":804},[178,69002,56506],{"class":195},[178,69004,53167],{"class":319},[178,69006,65420],{"class":195},[178,69008,53222],{"class":699},[178,69010,3100],{"class":319},[178,69012,69013,69015,69017,69019,69021],{"class":180,"line":810},[178,69014,56427],{"class":195},[178,69016,53167],{"class":319},[178,69018,2640],{"class":195},[178,69020,53222],{"class":699},[178,69022,3100],{"class":319},[178,69024,69025,69027,69029,69031,69033,69035,69037],{"class":180,"line":816},[178,69026,63698],{"class":195},[178,69028,53167],{"class":319},[178,69030,1665],{"class":195},[178,69032,53222],{"class":699},[178,69034,53251],{"class":195},[178,69036,63965],{"class":195},[178,69038,3100],{"class":319},[178,69040,69041],{"class":180,"line":822},[178,69042,3971],{"class":319},[178,69044,69045],{"class":180,"line":827},[178,69046,722],{"emptyLinePlaceholder":721},[178,69048,69049,69051],{"class":180,"line":832},[178,69050,65465],{"class":184},[178,69052,17330],{"class":319},[178,69054,69055,69057,69059,69061,69063],{"class":180,"line":850},[178,69056,56492],{"class":195},[178,69058,53167],{"class":319},[178,69060,2251],{"class":195},[178,69062,2268],{"class":699},[178,69064,3100],{"class":319},[178,69066,69067,69069,69071,69073,69075],{"class":180,"line":866},[178,69068,56506],{"class":195},[178,69070,53167],{"class":319},[178,69072,2847],{"class":195},[178,69074,53222],{"class":699},[178,69076,3100],{"class":319},[178,69078,69079,69081,69083,69085,69087],{"class":180,"line":877},[178,69080,59080],{"class":195},[178,69082,53167],{"class":319},[178,69084,2847],{"class":195},[178,69086,53222],{"class":699},[178,69088,3100],{"class":319},[178,69090,69091,69093,69095,69097],{"class":180,"line":882},[178,69092,56730],{"class":195},[178,69094,53167],{"class":319},[178,69096,53207],{"class":195},[178,69098,3100],{"class":319},[178,69100,69101,69103,69105,69107],{"class":180,"line":898},[178,69102,56741],{"class":195},[178,69104,53167],{"class":319},[178,69106,53398],{"class":195},[178,69108,3100],{"class":319},[178,69110,69111],{"class":180,"line":914},[178,69112,3971],{"class":319},[178,69114,69115],{"class":180,"line":919},[178,69116,722],{"emptyLinePlaceholder":721},[178,69118,69119,69121,69123],{"class":180,"line":935},[178,69120,65465],{"class":184},[178,69122,65538],{"class":323},[178,69124,17330],{"class":319},[178,69126,69127,69129,69131,69133,69135],{"class":180,"line":952},[178,69128,56643],{"class":195},[178,69130,53167],{"class":319},[178,69132,2740],{"class":195},[178,69134,53222],{"class":699},[178,69136,3100],{"class":319},[178,69138,69139,69141,69143,69145],{"class":180,"line":966},[178,69140,64055],{"class":195},[178,69142,53167],{"class":319},[178,69144,65561],{"class":195},[178,69146,3100],{"class":319},[178,69148,69149,69151,69153,69155,69157],{"class":180,"line":980},[178,69150,63721],{"class":195},[178,69152,53167],{"class":319},[178,69154,2640],{"class":195},[178,69156,53222],{"class":699},[178,69158,3100],{"class":319},[178,69160,69161],{"class":180,"line":985},[178,69162,3971],{"class":319},[178,69164,69165],{"class":180,"line":1008},[178,69166,722],{"emptyLinePlaceholder":721},[178,69168,69169,69171,69173],{"class":180,"line":1014},[178,69170,65465],{"class":184},[178,69172,63013],{"class":323},[178,69174,17330],{"class":319},[178,69176,69177,69179,69181,69183],{"class":180,"line":1019},[178,69178,56453],{"class":195},[178,69180,53167],{"class":319},[178,69182,56458],{"class":195},[178,69184,3100],{"class":319},[178,69186,69187,69189,69191,69193],{"class":180,"line":1033},[178,69188,56730],{"class":195},[178,69190,53167],{"class":319},[178,69192,53207],{"class":195},[178,69194,3100],{"class":319},[178,69196,69197,69199,69201,69203],{"class":180,"line":1046},[178,69198,56741],{"class":195},[178,69200,53167],{"class":319},[178,69202,53310],{"class":195},[178,69204,3100],{"class":319},[178,69206,69207],{"class":180,"line":1059},[178,69208,3971],{"class":319},[178,69210,69211],{"class":180,"line":1072},[178,69212,722],{"emptyLinePlaceholder":721},[178,69214,69215,69217,69219,69221],{"class":180,"line":1077},[178,69216,65465],{"class":184},[178,69218,63013],{"class":323},[178,69220,56796],{"class":323},[178,69222,17330],{"class":319},[178,69224,69225,69227,69229,69231,69233,69235],{"class":180,"line":1082},[178,69226,56427],{"class":195},[178,69228,53167],{"class":319},[178,69230,2133],{"class":195},[178,69232,10711],{"class":195},[178,69234,53222],{"class":699},[178,69236,3100],{"class":319},[178,69238,69239,69241,69243,69245,69247],{"class":180,"line":1099},[178,69240,56643],{"class":195},[178,69242,53167],{"class":319},[178,69244,2489],{"class":195},[178,69246,53222],{"class":699},[178,69248,3100],{"class":319},[178,69250,69251],{"class":180,"line":9806},[178,69252,3971],{"class":319},[178,69254,69255],{"class":180,"line":9818},[178,69256,722],{"emptyLinePlaceholder":721},[178,69258,69259,69261,69263,69265,69267],{"class":180,"line":11477},[178,69260,65465],{"class":184},[178,69262,63013],{"class":323},[178,69264,56796],{"class":323},[178,69266,3205],{"class":323},[178,69268,17330],{"class":319},[178,69270,69271,69273,69275,69277],{"class":180,"line":11502},[178,69272,65690],{"class":195},[178,69274,53167],{"class":319},[178,69276,56458],{"class":195},[178,69278,3100],{"class":319},[178,69280,69281,69283,69285,69287,69289,69291,69293],{"class":180,"line":11525},[178,69282,63953],{"class":195},[178,69284,53167],{"class":319},[178,69286,1669],{"class":195},[178,69288,53222],{"class":699},[178,69290,53251],{"class":195},[178,69292,65711],{"class":195},[178,69294,3100],{"class":319},[178,69296,69297,69299,69301,69303],{"class":180,"line":11549},[178,69298,59137],{"class":195},[178,69300,53167],{"class":319},[178,69302,64090],{"class":195},[178,69304,3100],{"class":319},[178,69306,69307],{"class":180,"line":11554},[178,69308,3971],{"class":319},[178,69310,69311],{"class":180,"line":11559},[178,69312,722],{"emptyLinePlaceholder":721},[178,69314,69315,69317,69319,69321,69323,69325],{"class":180,"line":11564},[178,69316,65465],{"class":184},[178,69318,63013],{"class":323},[178,69320,56796],{"class":323},[178,69322,3205],{"class":323},[178,69324,65744],{"class":184},[178,69326,17330],{"class":319},[178,69328,69329,69331,69333,69335],{"class":180,"line":11573},[178,69330,63512],{"class":195},[178,69332,53167],{"class":319},[178,69334,65755],{"class":195},[178,69336,3100],{"class":319},[178,69338,69339,69341,69343,69345],{"class":180,"line":11578},[178,69340,59137],{"class":195},[178,69342,53167],{"class":319},[178,69344,65755],{"class":195},[178,69346,3100],{"class":319},[178,69348,69349],{"class":180,"line":11584},[178,69350,3971],{"class":319},[178,69352,69353],{"class":180,"line":11605},[178,69354,722],{"emptyLinePlaceholder":721},[178,69356,69357,69359],{"class":180,"line":11611},[178,69358,65780],{"class":184},[178,69360,17330],{"class":319},[178,69362,69363,69365,69367,69369,69371,69373],{"class":180,"line":11625},[178,69364,56416],{"class":195},[178,69366,53167],{"class":319},[178,69368,2133],{"class":195},[178,69370,65793],{"class":195},[178,69372,53222],{"class":699},[178,69374,3100],{"class":319},[178,69376,69377],{"class":180,"line":11631},[178,69378,3971],{"class":319},[178,69380,69381],{"class":180,"line":11658},[178,69382,722],{"emptyLinePlaceholder":721},[178,69384,69385,69387,69389],{"class":180,"line":11667},[178,69386,65780],{"class":184},[178,69388,63895],{"class":184},[178,69390,17330],{"class":319},[178,69392,69393,69395,69397,69399],{"class":180,"line":11673},[178,69394,56730],{"class":195},[178,69396,53167],{"class":319},[178,69398,56458],{"class":195},[178,69400,3100],{"class":319},[178,69402,69403],{"class":180,"line":11681},[178,69404,3971],{"class":319},[178,69406,69407],{"class":180,"line":11686},[178,69408,722],{"emptyLinePlaceholder":721},[178,69410,69411,69413,69416],{"class":180,"line":18362},[178,69412,65780],{"class":184},[178,69414,69415],{"class":184}," .active",[178,69417,17330],{"class":319},[178,69419,69420,69422,69424,69426],{"class":180,"line":18368},[178,69421,56730],{"class":195},[178,69423,53167],{"class":319},[178,69425,62590],{"class":195},[178,69427,3100],{"class":319},[178,69429,69430],{"class":180,"line":18391},[178,69431,3971],{"class":319},[178,69433,69434,69436,69438],{"class":180,"line":18397},[178,69435,357],{"class":319},[178,69437,1853],{"class":323},[178,69439,336],{"class":319},[178,69441,69442,69444,69446],{"class":180,"line":18420},[178,69443,367],{"class":319},[178,69445,53064],{"class":323},[178,69447,336],{"class":319},[178,69449,69450],{"class":180,"line":18434},[178,69451,722],{"emptyLinePlaceholder":721},[178,69453,69454,69456,69458],{"class":180,"line":18454},[178,69455,320],{"class":319},[178,69457,376],{"class":323},[178,69459,336],{"class":319},[178,69461,69462,69464,69466,69468,69470,69472],{"class":180,"line":18460},[178,69463,341],{"class":319},[178,69465,53341],{"class":323},[178,69467,55210],{"class":184},[178,69469,330],{"class":319},[178,69471,65895],{"class":188},[178,69473,336],{"class":319},[178,69475,69476,69478,69480,69482,69484,69486],{"class":180,"line":18471},[178,69477,53071],{"class":319},[178,69479,53341],{"class":323},[178,69481,55210],{"class":184},[178,69483,330],{"class":319},[178,69485,65910],{"class":188},[178,69487,336],{"class":319},[178,69489,69490,69492,69494,69496,69498],{"class":180,"line":18494},[178,69491,56955],{"class":319},[178,69493,387],{"class":323},[178,69495,65921],{"class":319},[178,69497,387],{"class":323},[178,69499,336],{"class":319},[178,69501,69502,69504,69506],{"class":180,"line":18516},[178,69503,56955],{"class":319},[178,69505,2946],{"class":323},[178,69507,336],{"class":319},[178,69509,69510,69512,69514,69516,69518,69520,69522,69524,69526,69528,69530,69532,69534,69537,69539,69541,69543,69545],{"class":180,"line":18521},[178,69511,57023],{"class":319},[178,69513,29],{"class":323},[178,69515,62773],{"class":319},[178,69517,2178],{"class":323},[178,69519,55210],{"class":184},[178,69521,330],{"class":319},[178,69523,61427],{"class":188},[178,69525,62778],{"class":184},[178,69527,330],{"class":319},[178,69529,65956],{"class":188},[178,69531,55672],{"class":184},[178,69533,330],{"class":319},[178,69535,69536],{"class":188},"\"0\"",[178,69538,65959],{"class":319},[178,69540,2178],{"class":323},[178,69542,57035],{"class":319},[178,69544,29],{"class":323},[178,69546,336],{"class":319},[178,69548,69549,69551,69553,69555,69557,69559,69561,69563,69565,69567,69569,69571,69573,69575,69577],{"class":180,"line":18527},[178,69550,57023],{"class":319},[178,69552,29],{"class":323},[178,69554,62773],{"class":319},[178,69556,2178],{"class":323},[178,69558,62778],{"class":184},[178,69560,330],{"class":319},[178,69562,65956],{"class":188},[178,69564,55672],{"class":184},[178,69566,330],{"class":319},[178,69568,5451],{"class":188},[178,69570,65986],{"class":319},[178,69572,2178],{"class":323},[178,69574,57035],{"class":319},[178,69576,29],{"class":323},[178,69578,336],{"class":319},[178,69580,69581,69583,69585,69587,69589,69591,69593,69595,69597,69599,69601,69603,69605,69607,69609],{"class":180,"line":18541},[178,69582,57023],{"class":319},[178,69584,29],{"class":323},[178,69586,62773],{"class":319},[178,69588,2178],{"class":323},[178,69590,62778],{"class":184},[178,69592,330],{"class":319},[178,69594,65956],{"class":188},[178,69596,55672],{"class":184},[178,69598,330],{"class":319},[178,69600,5474],{"class":188},[178,69602,66013],{"class":319},[178,69604,2178],{"class":323},[178,69606,57035],{"class":319},[178,69608,29],{"class":323},[178,69610,336],{"class":319},[178,69612,69613,69615,69617,69619,69621,69623,69625,69627,69629,69631,69633,69635,69637,69639,69641],{"class":180,"line":18554},[178,69614,57023],{"class":319},[178,69616,29],{"class":323},[178,69618,62773],{"class":319},[178,69620,2178],{"class":323},[178,69622,62778],{"class":184},[178,69624,330],{"class":319},[178,69626,65956],{"class":188},[178,69628,55672],{"class":184},[178,69630,330],{"class":319},[178,69632,5487],{"class":188},[178,69634,66040],{"class":319},[178,69636,2178],{"class":323},[178,69638,57035],{"class":319},[178,69640,29],{"class":323},[178,69642,336],{"class":319},[178,69644,69645,69647,69649,69651,69653,69655,69657,69659,69661,69663,69665,69667,69669,69671,69673],{"class":180,"line":18559},[178,69646,57023],{"class":319},[178,69648,29],{"class":323},[178,69650,62773],{"class":319},[178,69652,2178],{"class":323},[178,69654,62778],{"class":184},[178,69656,330],{"class":319},[178,69658,65956],{"class":188},[178,69660,55672],{"class":184},[178,69662,330],{"class":319},[178,69664,5500],{"class":188},[178,69666,66067],{"class":319},[178,69668,2178],{"class":323},[178,69670,57035],{"class":319},[178,69672,29],{"class":323},[178,69674,336],{"class":319},[178,69676,69677,69679,69681],{"class":180,"line":18573},[178,69678,57128],{"class":319},[178,69680,2946],{"class":323},[178,69682,336],{"class":319},[178,69684,69685,69687,69689],{"class":180,"line":18578},[178,69686,53506],{"class":319},[178,69688,53341],{"class":323},[178,69690,336],{"class":319},[178,69692,69693,69695,69697,69699,69701,69703],{"class":180,"line":18584},[178,69694,53071],{"class":319},[178,69696,53341],{"class":323},[178,69698,55210],{"class":184},[178,69700,330],{"class":319},[178,69702,66104],{"class":188},[178,69704,336],{"class":319},[178,69706,69707,69709,69711,69713,69715,69717,69719,69721,69723,69725,69727,69729,69731,69733,69735,69737],{"class":180,"line":18589},[178,69708,56955],{"class":319},[178,69710,53341],{"class":323},[178,69712,55210],{"class":184},[178,69714,330],{"class":319},[178,69716,66119],{"class":188},[178,69718,62773],{"class":319},[178,69720,3269],{"class":323},[178,69722,56960],{"class":184},[178,69724,330],{"class":319},[178,69726,66130],{"class":188},[178,69728,56968],{"class":184},[178,69730,330],{"class":319},[178,69732,9421],{"class":188},[178,69734,66139],{"class":319},[178,69736,53341],{"class":323},[178,69738,336],{"class":319},[178,69740,69741,69743,69745,69747,69749,69751,69753,69755,69757,69759,69761,69763,69765,69767,69769,69771],{"class":180,"line":18603},[178,69742,56955],{"class":319},[178,69744,53341],{"class":323},[178,69746,55210],{"class":184},[178,69748,330],{"class":319},[178,69750,64344],{"class":188},[178,69752,62773],{"class":319},[178,69754,3269],{"class":323},[178,69756,56960],{"class":184},[178,69758,330],{"class":319},[178,69760,66166],{"class":188},[178,69762,56968],{"class":184},[178,69764,330],{"class":319},[178,69766,9421],{"class":188},[178,69768,66139],{"class":319},[178,69770,53341],{"class":323},[178,69772,336],{"class":319},[178,69774,69775,69777,69779,69781,69783,69785,69787,69789,69791,69793,69795,69797,69799,69801,69803,69805],{"class":180,"line":18608},[178,69776,56955],{"class":319},[178,69778,53341],{"class":323},[178,69780,55210],{"class":184},[178,69782,330],{"class":319},[178,69784,64344],{"class":188},[178,69786,62773],{"class":319},[178,69788,3269],{"class":323},[178,69790,56960],{"class":184},[178,69792,330],{"class":319},[178,69794,66201],{"class":188},[178,69796,56968],{"class":184},[178,69798,330],{"class":319},[178,69800,9421],{"class":188},[178,69802,66139],{"class":319},[178,69804,53341],{"class":323},[178,69806,336],{"class":319},[178,69808,69809,69811,69813,69815,69817,69819,69821,69823,69825,69827,69829,69831,69833,69835,69837,69839],{"class":180,"line":18613},[178,69810,56955],{"class":319},[178,69812,53341],{"class":323},[178,69814,55210],{"class":184},[178,69816,330],{"class":319},[178,69818,64344],{"class":188},[178,69820,62773],{"class":319},[178,69822,3269],{"class":323},[178,69824,56960],{"class":184},[178,69826,330],{"class":319},[178,69828,66236],{"class":188},[178,69830,56968],{"class":184},[178,69832,330],{"class":319},[178,69834,9421],{"class":188},[178,69836,66139],{"class":319},[178,69838,53341],{"class":323},[178,69840,336],{"class":319},[178,69842,69843,69845,69847,69849,69851,69853,69855,69857,69859,69861,69863,69865,69867,69869,69871,69873],{"class":180,"line":18627},[178,69844,56955],{"class":319},[178,69846,53341],{"class":323},[178,69848,55210],{"class":184},[178,69850,330],{"class":319},[178,69852,64344],{"class":188},[178,69854,62773],{"class":319},[178,69856,3269],{"class":323},[178,69858,56960],{"class":184},[178,69860,330],{"class":319},[178,69862,66271],{"class":188},[178,69864,56968],{"class":184},[178,69866,330],{"class":319},[178,69868,9421],{"class":188},[178,69870,66139],{"class":319},[178,69872,53341],{"class":323},[178,69874,336],{"class":319},[178,69876,69877,69879,69881],{"class":180,"line":18639},[178,69878,53506],{"class":319},[178,69880,53341],{"class":323},[178,69882,336],{"class":319},[178,69884,69885,69887,69889],{"class":180,"line":18644},[178,69886,357],{"class":319},[178,69888,53341],{"class":323},[178,69890,336],{"class":319},[178,69892,69893,69895,69897],{"class":180,"line":18657},[178,69894,341],{"class":319},[178,69896,53541],{"class":323},[178,69898,336],{"class":319},[178,69900,69901],{"class":180,"line":18662},[178,69902,69903],{"class":2008},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[178,69905,69906],{"class":180,"line":18667},[178,69907,69908],{"class":2008},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[178,69910,69911,69913,69915,69917,69919,69921,69923,69926],{"class":180,"line":18672},[178,69912,12982],{"class":699},[178,69914,63013],{"class":195},[178,69916,734],{"class":699},[178,69918,56117],{"class":319},[178,69920,56120],{"class":184},[178,69922,944],{"class":319},[178,69924,69925],{"class":188},"'.tab-nav ul'",[178,69927,863],{"class":319},[178,69929,69930],{"class":180,"line":18685},[178,69931,69932],{"class":2008},"    \u002F\u002F 2.添加事件\n",[178,69934,69935,69937,69939,69941,69943,69945,69947,69949,69951],{"class":180,"line":18690},[178,69936,68674],{"class":319},[178,69938,59534],{"class":184},[178,69940,944],{"class":319},[178,69942,59539],{"class":188},[178,69944,14196],{"class":319},[178,69946,56170],{"class":699},[178,69948,3457],{"class":319},[178,69950,2024],{"class":6985},[178,69952,14203],{"class":319},[178,69954,69955,69957,69959],{"class":180,"line":34365},[178,69956,59965],{"class":319},[178,69958,68730],{"class":184},[178,69960,68733],{"class":319},[178,69962,69963],{"class":180,"line":34371},[178,69964,69965],{"class":2008},"      \u002F\u002Fe.targer是我们点击的对象\n",[178,69967,69968,69970,69972,69974,69977],{"class":180,"line":34377},[178,69969,56201],{"class":699},[178,69971,68754],{"class":319},[178,69973,56207],{"class":699},[178,69975,69976],{"class":188}," 'A'",[178,69978,14203],{"class":319},[178,69980,69981,69983,69985,69987,69990,69992,69994,69996,69998],{"class":180,"line":34383},[178,69982,53653],{"class":319},[178,69984,56120],{"class":184},[178,69986,944],{"class":319},[178,69988,69989],{"class":188},"'.active'",[178,69991,58724],{"class":319},[178,69993,58727],{"class":184},[178,69995,944],{"class":319},[178,69997,66434],{"class":188},[178,69999,863],{"class":319},[178,70001,70002,70005,70007,70009,70011],{"class":180,"line":34389},[178,70003,70004],{"class":319},"        e.target.classList.",[178,70006,7103],{"class":184},[178,70008,944],{"class":319},[178,70010,66434],{"class":188},[178,70012,863],{"class":319},[178,70014,70015],{"class":180,"line":34400},[178,70016,722],{"emptyLinePlaceholder":721},[178,70018,70019],{"class":180,"line":34406},[178,70020,70021],{"class":2008},"        \u002F\u002F 下面大盒子模块\n",[178,70023,70024],{"class":180,"line":34426},[178,70025,70026],{"class":2008},"        \u002F\u002F console.log(e.target.dataset.id)\n",[178,70028,70029,70031,70033,70035,70037],{"class":180,"line":34432},[178,70030,62991],{"class":699},[178,70032,4807],{"class":195},[178,70034,734],{"class":699},[178,70036,47298],{"class":699},[178,70038,70039],{"class":319},"e.target.dataset.id\n",[178,70041,70042,70044,70046,70048,70050,70052,70054,70056,70058],{"class":180,"line":34443},[178,70043,53653],{"class":319},[178,70045,56120],{"class":184},[178,70047,944],{"class":319},[178,70049,66482],{"class":188},[178,70051,58724],{"class":319},[178,70053,58727],{"class":184},[178,70055,944],{"class":319},[178,70057,66434],{"class":188},[178,70059,863],{"class":319},[178,70061,70062,70064,70066,70068,70070,70072,70074,70076,70078,70080,70082,70084,70086],{"class":180,"line":34449},[178,70063,53653],{"class":319},[178,70065,56120],{"class":184},[178,70067,944],{"class":319},[178,70069,66508],{"class":188},[178,70071,2381],{"class":319},[178,70073,47298],{"class":699},[178,70075,26870],{"class":195},[178,70077,58753],{"class":188},[178,70079,58724],{"class":319},[178,70081,7103],{"class":184},[178,70083,944],{"class":319},[178,70085,66434],{"class":188},[178,70087,863],{"class":319},[178,70089,70090],{"class":180,"line":34455},[178,70091,722],{"emptyLinePlaceholder":721},[178,70093,70094],{"class":180,"line":34461},[178,70095,54125],{"class":319},[178,70097,70098],{"class":180,"line":34467},[178,70099,35193],{"class":319},[178,70101,70102,70104,70106],{"class":180,"line":34473},[178,70103,357],{"class":319},[178,70105,53541],{"class":323},[178,70107,336],{"class":319},[178,70109,70110,70112,70114],{"class":180,"line":34479},[178,70111,367],{"class":319},[178,70113,376],{"class":323},[178,70115,336],{"class":319},[178,70117,70118],{"class":180,"line":34485},[178,70119,722],{"emptyLinePlaceholder":721},[178,70121,70122,70124,70126],{"class":180,"line":34505},[178,70123,367],{"class":319},[178,70125,52367],{"class":323},[178,70127,336],{"class":319},[387,70129,70131],{"id":70130},"_333-页面加载事件","3.3.3 页面加载事件",[26,70133,70134],{},[29,70135,70136],{},"load",[19,70138,70139],{},[3269,70140],{"alt":160,"src":70141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,70143,70144],{},"window代表整个窗口，比document还要大",[19,70146,70147],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,70149,70150],{},"img.addEventListener('load', function () {",[19,70152,70153],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,70155,54190],{},[26,70157,70158],{"start":263},[29,70159,70160],{},"DOMContentLoaded",[19,70162,70163],{},[3269,70164],{"alt":160,"src":70165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,70167,70168],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[387,70170,70172],{"id":70171},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,70174,70175],{},[3269,70176],{"alt":160,"src":70177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,70179,70180],{},[3269,70181],{"alt":160,"src":70182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,70184,70185],{},[3269,70186],{"alt":160,"src":70187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,70189,70190],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,70192,70193],{},"获得的是数字型数据，不带单位",[19,70195,70196],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,70198,70199],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,70201,70202],{},"它是通过document.documentElement来获取",[19,70204,70205],{},[3269,70206],{"alt":160,"src":70207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,70209,70210],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[387,70212,70214],{"id":70213},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,70216,70217],{},[3269,70218],{"alt":160,"src":70219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,70221,70222],{},[3269,70223],{"alt":160,"src":70224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[387,70226,70228],{"id":70227},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,70230,70231],{},[3269,70232],{"alt":160,"src":70233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,70235,70236],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,70238,70239],{},[3269,70240],{"alt":160,"src":70241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,70243,70244],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,70246,70247],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,70249,70250],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,70252,70253],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,70255,70256],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,70258,70259],{},[3269,70260],{"alt":160,"src":70261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,70263,70264],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,70266,70267],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,70269,70270],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,70272,70273],{},"e.pageX-box.getBoundingClientRect()",[387,70275,70277],{"id":70276},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,70279,70280],{},[3269,70281],{"alt":160,"src":70282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,70284,70285],{},"这个是相对于视口来说的，它是个方法，不是属性值",[387,70287,70289],{"id":70288},"_338-总结","3.3.8 总结",[19,70291,70292],{},[3269,70293],{"alt":160,"src":70294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,70296,70297],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,70299,70300],{},"修改盒子的宽高只能通过width和height来实现",[387,70302,70304],{"id":70303},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[154,70306,70308],{"className":52365,"code":70307,"language":52367,"meta":160,"style":160},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[70,70309,70310,70315,70320,70325,70330],{"__ignoreMap":160},[178,70311,70312],{"class":180,"line":181},[178,70313,70314],{"class":319},"\u002F* 页面滑动 *\u002F\n",[178,70316,70317],{"class":180,"line":263},[178,70318,70319],{"class":319},"html {\n",[178,70321,70322],{"class":180,"line":274},[178,70323,70324],{"class":319},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[178,70326,70327],{"class":180,"line":354},[178,70328,70329],{"class":319},"  scroll-behavior: smooth;\n",[178,70331,70332],{"class":180,"line":364},[178,70333,3371],{"class":319},[19,70335,70336],{},"默认是auto",[387,70338,70340],{"id":70339},"_3310-日期对象","3.3.10 日期对象",[23756,70342,70344],{"id":70343},"_33101-实例化","3.3.10.1 实例化",[19,70346,70347],{},[3269,70348],{"alt":160,"src":70349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[23756,70351,70353],{"id":70352},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,70355,70356],{},[3269,70357],{"alt":160,"src":70358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,70360,70361],{},"月份+1",[19,70363,70364],{},"老外认为第一天为0，星期天",[19,70366,70367],{},"方法使用的时候必须要跟括号",[19,70369,70370],{},"快速获得日期",[19,70372,70373],{},"\u002F\u002F 得到年月日",[19,70375,70376],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,70378,70379],{},"\u002F\u002F 得到当地日期",[19,70381,70382],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,70384,70385],{},"\u002F\u002F 得到当地时间",[19,70387,70388],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,70390,70391],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,70393,70394],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53541,70396,70397],{},"\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,70399,70400],{},"学会去封装函数！",[23756,70402,70404],{"id":70403},"_33103-时间戳","3.3.10.3 时间戳",[19,70406,70407],{},[3269,70408],{"alt":160,"src":70409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,70411,70412],{},[3269,70413],{"alt":160,"src":70414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,70416,70417],{},"三种方法记住一个就可以",[387,70419,70421],{"id":70420},"_3311-节点操作","3.3.11 节点操作",[23756,70423,70425],{"id":70424},"_33111-dom节点","3.3.11.1 DOM节点",[19,70427,70428],{},[3269,70429],{"alt":160,"src":70430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,70432,70433],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[23756,70435,70437],{"id":70436},"_33112-查找节点","3.3.11.2 查找节点",[19,70439,70440],{},"前边的document.querySelector()是获取的元素",[19,70442,70443],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,70445,70446],{},[3269,70447],{"alt":160,"src":70448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[26,70450,70451],{},[29,70452,70453],{},"父节点",[19,70455,70456],{},[3269,70457],{"alt":160,"src":70458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[26,70460,70461],{"start":263},[29,70462,70463],{},"子节点",[19,70465,70466],{},[3269,70467],{"alt":160,"src":70468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,70470,70471],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,70473,70474],{},"children获得的是伪数组，是亲儿子",[26,70476,70477],{"start":274},[29,70478,70479],{},"兄弟节点",[19,70481,70482],{},[3269,70483],{"alt":160,"src":70484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[23756,70486,70488],{"id":70487},"_33113-增加节点","3.3.11.3 增加节点",[19,70490,70491],{},[3269,70492],{"alt":160,"src":70493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,70495,70496],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,70498,70499],{},[3269,70500],{"alt":160,"src":70501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,70503,70504],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,70506,70507],{},"下面是写法的部分展示，就按照下边的格式来写",[19,70509,70510],{},"例：",[53541,70512,70513],{},"\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,70515,70516],{},[3269,70517],{"alt":160,"src":70518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,70520,70521],{},"false只克隆标签，里边的内容不会克隆过来",[154,70523,70525],{"className":52365,"code":70524,"language":52367,"meta":160,"style":160},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[70,70526,70527],{"__ignoreMap":160},[178,70528,70529],{"class":180,"line":181},[178,70530,70524],{"class":319},[23756,70532,70534],{"id":70533},"_33114-删除节点","3.3.11.4 删除节点",[19,70536,70537],{},[3269,70538],{"alt":160,"src":70539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,70541,70542],{},"父亲删儿子",[19,70544,70545],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[387,70547,70549],{"id":70548},"_3312-m端事件","3.3.12 M端事件",[19,70551,70552],{},"M端就是移动端",[19,70554,70555],{},[3269,70556],{"alt":160,"src":70557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[387,70559,70561],{"id":70560},"_3313-插件","3.3.13 插件",[19,70563,70564],{},"要熟悉官网！！！",[19,70566,70567],{},[2178,70568,70569],{"href":70569,"rel":70570},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[25619],[19,70572,70573],{},[2178,70574,70575],{"href":70575,"rel":70576},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[25619],[387,70578,70580],{"id":70579},"_3314-学生信息表","3.3.14 学生信息表",[26,70582,70583,70586,70589,70592,70595,70598,70601,70604],{},[29,70584,70585],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[29,70587,70588],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[29,70590,70591],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[29,70593,70594],{},"用好表单元素自带的属性，value,name等",[29,70596,70597],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[29,70599,70600],{},"不要忘记事件对象",[29,70602,70603],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[29,70605,70606],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,70608,70609],{},"结构：",[154,70611,70613],{"className":52365,"code":70612,"language":52367,"meta":160,"style":160},"\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",[70,70614,70615,70625,70639,70643,70651,70665,70685,70706,70719,70743,70751,70755,70763,70776,70797,70825,70853,70858,70880,70900,70919,70927,70955,70977,70997,71017,71037,71057,71077,71085,71105,71113,71117,71130,71138,71146,71154,71167,71180,71193,71206,71219,71232,71245,71253,71261,71269,71274,71279,71284,71289,71294,71299,71304,71309,71314,71319,71324,71329,71334,71342,71350,71358,71362,71382,71401,71421,71441,71461,71481,71485,71490,71510,71515,71525,71530,71535,71555,71577,71582,71592,71596,71600,71605,71610,71639,71653,71668,71672,71676,71680,71685,71696,71709,71714,71719,71724,71729,71734,71738,71743,71748,71757,71762,71767,71779,71784,71791,71795,71800,71810,71815,71825,71830,71858,71879,71889,71909,71927,71944,71961,71978,71995,71999,72009,72014,72019,72024,72035,72039,72043,72047,72052,72057,72078,72090,72095,72100,72105,72119,72124,72131,72135,72139,72147,72151,72159,72163],{"__ignoreMap":160},[178,70616,70617,70619,70621,70623],{"class":180,"line":181},[178,70618,53029],{"class":319},[178,70620,53032],{"class":323},[178,70622,53035],{"class":184},[178,70624,336],{"class":319},[178,70626,70627,70629,70631,70633,70635,70637],{"class":180,"line":263},[178,70628,320],{"class":319},[178,70630,52367],{"class":323},[178,70632,53046],{"class":184},[178,70634,330],{"class":319},[178,70636,53051],{"class":188},[178,70638,336],{"class":319},[178,70640,70641],{"class":180,"line":274},[178,70642,722],{"emptyLinePlaceholder":721},[178,70644,70645,70647,70649],{"class":180,"line":354},[178,70646,320],{"class":319},[178,70648,53064],{"class":323},[178,70650,336],{"class":319},[178,70652,70653,70655,70657,70659,70661,70663],{"class":180,"line":364},[178,70654,341],{"class":319},[178,70656,53074],{"class":323},[178,70658,53077],{"class":184},[178,70660,330],{"class":319},[178,70662,53082],{"class":188},[178,70664,60848],{"class":319},[178,70666,70667,70669,70671,70673,70675,70677,70679,70681,70683],{"class":180,"line":740},[178,70668,341],{"class":319},[178,70670,53074],{"class":323},[178,70672,426],{"class":184},[178,70674,330],{"class":319},[178,70676,53121],{"class":188},[178,70678,53101],{"class":184},[178,70680,330],{"class":319},[178,70682,53128],{"class":188},[178,70684,60848],{"class":319},[178,70686,70687,70689,70691,70693,70695,70697,70699,70701,70704],{"class":180,"line":746},[178,70688,341],{"class":319},[178,70690,53074],{"class":323},[178,70692,53093],{"class":184},[178,70694,330],{"class":319},[178,70696,53098],{"class":188},[178,70698,53101],{"class":184},[178,70700,330],{"class":319},[178,70702,70703],{"class":188},"\"ie=edge\"",[178,70705,60848],{"class":319},[178,70707,70708,70710,70712,70715,70717],{"class":180,"line":752},[178,70709,341],{"class":319},[178,70711,53137],{"class":323},[178,70713,70714],{"class":319},">学生信息管理\u003C\u002F",[178,70716,53137],{"class":323},[178,70718,336],{"class":319},[178,70720,70721,70723,70726,70729,70731,70734,70736,70738,70741],{"class":180,"line":757},[178,70722,341],{"class":319},[178,70724,70725],{"class":323},"link",[178,70727,70728],{"class":184}," rel",[178,70730,330],{"class":319},[178,70732,70733],{"class":188},"\"stylesheet\"",[178,70735,62778],{"class":184},[178,70737,330],{"class":319},[178,70739,70740],{"class":188},"\"css\u002Findex.css\"",[178,70742,60848],{"class":319},[178,70744,70745,70747,70749],{"class":180,"line":763},[178,70746,367],{"class":319},[178,70748,53064],{"class":323},[178,70750,336],{"class":319},[178,70752,70753],{"class":180,"line":769},[178,70754,722],{"emptyLinePlaceholder":721},[178,70756,70757,70759,70761],{"class":180,"line":774},[178,70758,320],{"class":319},[178,70760,376],{"class":323},[178,70762,336],{"class":319},[178,70764,70765,70767,70769,70772,70774],{"class":180,"line":780},[178,70766,341],{"class":319},[178,70768,10],{"class":323},[178,70770,70771],{"class":319},">新增学员\u003C\u002F",[178,70773,10],{"class":323},[178,70775,336],{"class":319},[178,70777,70778,70780,70782,70784,70786,70788,70791,70793,70795],{"class":180,"line":786},[178,70779,341],{"class":319},[178,70781,68345],{"class":323},[178,70783,55210],{"class":184},[178,70785,330],{"class":319},[178,70787,64385],{"class":188},[178,70789,70790],{"class":184}," autocomplete",[178,70792,330],{"class":319},[178,70794,33511],{"class":188},[178,70796,336],{"class":319},[178,70798,70799,70802,70804,70806,70808,70810,70812,70814,70817,70819,70821,70823],{"class":180,"line":792},[178,70800,70801],{"class":319},"    姓名：\u003C",[178,70803,55543],{"class":323},[178,70805,467],{"class":184},[178,70807,330],{"class":319},[178,70809,64419],{"class":188},[178,70811,55210],{"class":184},[178,70813,330],{"class":319},[178,70815,70816],{"class":188},"\"uname\"",[178,70818,426],{"class":184},[178,70820,330],{"class":319},[178,70822,70816],{"class":188},[178,70824,60848],{"class":319},[178,70826,70827,70830,70832,70834,70836,70838,70840,70842,70845,70847,70849,70851],{"class":180,"line":798},[178,70828,70829],{"class":319},"    年龄：\u003C",[178,70831,55543],{"class":323},[178,70833,467],{"class":184},[178,70835,330],{"class":319},[178,70837,64419],{"class":188},[178,70839,55210],{"class":184},[178,70841,330],{"class":319},[178,70843,70844],{"class":188},"\"age\"",[178,70846,426],{"class":184},[178,70848,330],{"class":319},[178,70850,70844],{"class":188},[178,70852,60848],{"class":319},[178,70854,70855],{"class":180,"line":804},[178,70856,70857],{"class":319},"    性别:\n",[178,70859,70860,70862,70865,70867,70869,70872,70874,70876,70878],{"class":180,"line":810},[178,70861,53071],{"class":319},[178,70863,70864],{"class":323},"select",[178,70866,426],{"class":184},[178,70868,330],{"class":319},[178,70870,70871],{"class":188},"\"gender\"",[178,70873,55210],{"class":184},[178,70875,330],{"class":319},[178,70877,70871],{"class":188},[178,70879,336],{"class":319},[178,70881,70882,70884,70887,70889,70891,70893,70896,70898],{"class":180,"line":816},[178,70883,56955],{"class":319},[178,70885,70886],{"class":323},"option",[178,70888,68371],{"class":184},[178,70890,330],{"class":319},[178,70892,11722],{"class":188},[178,70894,70895],{"class":319},">男\u003C\u002F",[178,70897,70886],{"class":323},[178,70899,336],{"class":319},[178,70901,70902,70904,70906,70908,70910,70912,70915,70917],{"class":180,"line":822},[178,70903,56955],{"class":319},[178,70905,70886],{"class":323},[178,70907,68371],{"class":184},[178,70909,330],{"class":319},[178,70911,11791],{"class":188},[178,70913,70914],{"class":319},">女\u003C\u002F",[178,70916,70886],{"class":323},[178,70918,336],{"class":319},[178,70920,70921,70923,70925],{"class":180,"line":827},[178,70922,53506],{"class":319},[178,70924,70864],{"class":323},[178,70926,336],{"class":319},[178,70928,70929,70932,70934,70936,70938,70940,70942,70944,70947,70949,70951,70953],{"class":180,"line":832},[178,70930,70931],{"class":319},"    薪资：\u003C",[178,70933,55543],{"class":323},[178,70935,467],{"class":184},[178,70937,330],{"class":319},[178,70939,64419],{"class":188},[178,70941,55210],{"class":184},[178,70943,330],{"class":319},[178,70945,70946],{"class":188},"\"salary\"",[178,70948,426],{"class":184},[178,70950,330],{"class":319},[178,70952,70946],{"class":188},[178,70954,60848],{"class":319},[178,70956,70957,70960,70962,70964,70966,70969,70971,70973,70975],{"class":180,"line":850},[178,70958,70959],{"class":319},"    就业城市：\u003C",[178,70961,70864],{"class":323},[178,70963,426],{"class":184},[178,70965,330],{"class":319},[178,70967,70968],{"class":188},"\"city\"",[178,70970,55210],{"class":184},[178,70972,330],{"class":319},[178,70974,70968],{"class":188},[178,70976,336],{"class":319},[178,70978,70979,70981,70983,70985,70987,70990,70993,70995],{"class":180,"line":866},[178,70980,56955],{"class":319},[178,70982,70886],{"class":323},[178,70984,68371],{"class":184},[178,70986,330],{"class":319},[178,70988,70989],{"class":188},"\"北京\"",[178,70991,70992],{"class":319},">北京\u003C\u002F",[178,70994,70886],{"class":323},[178,70996,336],{"class":319},[178,70998,70999,71001,71003,71005,71007,71010,71013,71015],{"class":180,"line":877},[178,71000,56955],{"class":319},[178,71002,70886],{"class":323},[178,71004,68371],{"class":184},[178,71006,330],{"class":319},[178,71008,71009],{"class":188},"\"上海\"",[178,71011,71012],{"class":319},">上海\u003C\u002F",[178,71014,70886],{"class":323},[178,71016,336],{"class":319},[178,71018,71019,71021,71023,71025,71027,71030,71033,71035],{"class":180,"line":882},[178,71020,56955],{"class":319},[178,71022,70886],{"class":323},[178,71024,68371],{"class":184},[178,71026,330],{"class":319},[178,71028,71029],{"class":188},"\"广州\"",[178,71031,71032],{"class":319},">广州\u003C\u002F",[178,71034,70886],{"class":323},[178,71036,336],{"class":319},[178,71038,71039,71041,71043,71045,71047,71050,71053,71055],{"class":180,"line":898},[178,71040,56955],{"class":319},[178,71042,70886],{"class":323},[178,71044,68371],{"class":184},[178,71046,330],{"class":319},[178,71048,71049],{"class":188},"\"深圳\"",[178,71051,71052],{"class":319},">深圳\u003C\u002F",[178,71054,70886],{"class":323},[178,71056,336],{"class":319},[178,71058,71059,71061,71063,71065,71067,71070,71073,71075],{"class":180,"line":914},[178,71060,56955],{"class":319},[178,71062,70886],{"class":323},[178,71064,68371],{"class":184},[178,71066,330],{"class":319},[178,71068,71069],{"class":188},"\"曹县\"",[178,71071,71072],{"class":319},">曹县\u003C\u002F",[178,71074,70886],{"class":323},[178,71076,336],{"class":319},[178,71078,71079,71081,71083],{"class":180,"line":919},[178,71080,53506],{"class":319},[178,71082,70864],{"class":323},[178,71084,336],{"class":319},[178,71086,71087,71089,71091,71093,71095,71098,71101,71103],{"class":180,"line":935},[178,71088,53071],{"class":319},[178,71090,55608],{"class":323},[178,71092,55210],{"class":184},[178,71094,330],{"class":319},[178,71096,71097],{"class":188},"\"add\"",[178,71099,71100],{"class":319},">录入\u003C\u002F",[178,71102,55608],{"class":323},[178,71104,336],{"class":319},[178,71106,71107,71109,71111],{"class":180,"line":952},[178,71108,357],{"class":319},[178,71110,68345],{"class":323},[178,71112,336],{"class":319},[178,71114,71115],{"class":180,"line":966},[178,71116,722],{"emptyLinePlaceholder":721},[178,71118,71119,71121,71123,71126,71128],{"class":180,"line":980},[178,71120,341],{"class":319},[178,71122,10],{"class":323},[178,71124,71125],{"class":319},">就业榜\u003C\u002F",[178,71127,10],{"class":323},[178,71129,336],{"class":319},[178,71131,71132,71134,71136],{"class":180,"line":985},[178,71133,341],{"class":319},[178,71135,45],{"class":323},[178,71137,336],{"class":319},[178,71139,71140,71142,71144],{"class":180,"line":1008},[178,71141,53071],{"class":319},[178,71143,48],{"class":323},[178,71145,336],{"class":319},[178,71147,71148,71150,71152],{"class":180,"line":1014},[178,71149,56955],{"class":319},[178,71151,51],{"class":323},[178,71153,336],{"class":319},[178,71155,71156,71158,71160,71163,71165],{"class":180,"line":1019},[178,71157,57023],{"class":319},[178,71159,54],{"class":323},[178,71161,71162],{"class":319},">序号\u003C\u002F",[178,71164,54],{"class":323},[178,71166,336],{"class":319},[178,71168,71169,71171,71173,71176,71178],{"class":180,"line":1033},[178,71170,57023],{"class":319},[178,71172,54],{"class":323},[178,71174,71175],{"class":319},">姓名\u003C\u002F",[178,71177,54],{"class":323},[178,71179,336],{"class":319},[178,71181,71182,71184,71186,71189,71191],{"class":180,"line":1046},[178,71183,57023],{"class":319},[178,71185,54],{"class":323},[178,71187,71188],{"class":319},">年龄\u003C\u002F",[178,71190,54],{"class":323},[178,71192,336],{"class":319},[178,71194,71195,71197,71199,71202,71204],{"class":180,"line":1059},[178,71196,57023],{"class":319},[178,71198,54],{"class":323},[178,71200,71201],{"class":319},">性别\u003C\u002F",[178,71203,54],{"class":323},[178,71205,336],{"class":319},[178,71207,71208,71210,71212,71215,71217],{"class":180,"line":1072},[178,71209,57023],{"class":319},[178,71211,54],{"class":323},[178,71213,71214],{"class":319},">薪资\u003C\u002F",[178,71216,54],{"class":323},[178,71218,336],{"class":319},[178,71220,71221,71223,71225,71228,71230],{"class":180,"line":1077},[178,71222,57023],{"class":319},[178,71224,54],{"class":323},[178,71226,71227],{"class":319},">就业城市\u003C\u002F",[178,71229,54],{"class":323},[178,71231,336],{"class":319},[178,71233,71234,71236,71238,71241,71243],{"class":180,"line":1082},[178,71235,57023],{"class":319},[178,71237,54],{"class":323},[178,71239,71240],{"class":319},">操作\u003C\u002F",[178,71242,54],{"class":323},[178,71244,336],{"class":319},[178,71246,71247,71249,71251],{"class":180,"line":1099},[178,71248,57128],{"class":319},[178,71250,51],{"class":323},[178,71252,336],{"class":319},[178,71254,71255,71257,71259],{"class":180,"line":9806},[178,71256,53506],{"class":319},[178,71258,48],{"class":323},[178,71260,336],{"class":319},[178,71262,71263,71265,71267],{"class":180,"line":9818},[178,71264,53071],{"class":319},[178,71266,62],{"class":323},[178,71268,336],{"class":319},[178,71270,71271],{"class":180,"line":11477},[178,71272,71273],{"class":2008},"      \u003C!-- \n",[178,71275,71276],{"class":180,"line":11502},[178,71277,71278],{"class":2008},"        \u003Ctr>\n",[178,71280,71281],{"class":180,"line":11525},[178,71282,71283],{"class":2008},"          \u003Ctd>1001\u003C\u002Ftd>\n",[178,71285,71286],{"class":180,"line":11549},[178,71287,71288],{"class":2008},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[178,71290,71291],{"class":180,"line":11554},[178,71292,71293],{"class":2008},"          \u003Ctd>19\u003C\u002Ftd>\n",[178,71295,71296],{"class":180,"line":11559},[178,71297,71298],{"class":2008},"          \u003Ctd>男\u003C\u002Ftd>\n",[178,71300,71301],{"class":180,"line":11564},[178,71302,71303],{"class":2008},"          \u003Ctd>15000\u003C\u002Ftd>\n",[178,71305,71306],{"class":180,"line":11573},[178,71307,71308],{"class":2008},"          \u003Ctd>上海\u003C\u002Ftd>\n",[178,71310,71311],{"class":180,"line":11578},[178,71312,71313],{"class":2008},"          \u003Ctd>\n",[178,71315,71316],{"class":180,"line":11584},[178,71317,71318],{"class":2008},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[178,71320,71321],{"class":180,"line":11605},[178,71322,71323],{"class":2008},"          \u003C\u002Ftd>\n",[178,71325,71326],{"class":180,"line":11611},[178,71327,71328],{"class":2008},"        \u003C\u002Ftr> \n",[178,71330,71331],{"class":180,"line":11625},[178,71332,71333],{"class":2008},"        -->\n",[178,71335,71336,71338,71340],{"class":180,"line":11631},[178,71337,53506],{"class":319},[178,71339,62],{"class":323},[178,71341,336],{"class":319},[178,71343,71344,71346,71348],{"class":180,"line":11658},[178,71345,357],{"class":319},[178,71347,45],{"class":323},[178,71349,336],{"class":319},[178,71351,71352,71354,71356],{"class":180,"line":11667},[178,71353,341],{"class":319},[178,71355,53541],{"class":323},[178,71357,336],{"class":319},[178,71359,71360],{"class":180,"line":11673},[178,71361,61679],{"class":2008},[178,71363,71364,71366,71369,71371,71373,71375,71377,71380],{"class":180,"line":11681},[178,71365,12982],{"class":699},[178,71367,71368],{"class":195}," uname",[178,71370,734],{"class":699},[178,71372,56117],{"class":319},[178,71374,56120],{"class":184},[178,71376,944],{"class":319},[178,71378,71379],{"class":188},"'.uname'",[178,71381,863],{"class":319},[178,71383,71384,71386,71388,71390,71392,71394,71396,71399],{"class":180,"line":11686},[178,71385,12982],{"class":699},[178,71387,17447],{"class":195},[178,71389,734],{"class":699},[178,71391,56117],{"class":319},[178,71393,56120],{"class":184},[178,71395,944],{"class":319},[178,71397,71398],{"class":188},"'.age'",[178,71400,863],{"class":319},[178,71402,71403,71405,71408,71410,71412,71414,71416,71419],{"class":180,"line":18362},[178,71404,12982],{"class":699},[178,71406,71407],{"class":195}," gender",[178,71409,734],{"class":699},[178,71411,56117],{"class":319},[178,71413,56120],{"class":184},[178,71415,944],{"class":319},[178,71417,71418],{"class":188},"'.gender'",[178,71420,863],{"class":319},[178,71422,71423,71425,71428,71430,71432,71434,71436,71439],{"class":180,"line":18368},[178,71424,12982],{"class":699},[178,71426,71427],{"class":195}," salary",[178,71429,734],{"class":699},[178,71431,56117],{"class":319},[178,71433,56120],{"class":184},[178,71435,944],{"class":319},[178,71437,71438],{"class":188},"'.salary'",[178,71440,863],{"class":319},[178,71442,71443,71445,71448,71450,71452,71454,71456,71459],{"class":180,"line":18391},[178,71444,12982],{"class":699},[178,71446,71447],{"class":195}," city",[178,71449,734],{"class":699},[178,71451,56117],{"class":319},[178,71453,56120],{"class":184},[178,71455,944],{"class":319},[178,71457,71458],{"class":188},"'.city'",[178,71460,863],{"class":319},[178,71462,71463,71465,71468,71470,71472,71474,71476,71479],{"class":180,"line":18397},[178,71464,12982],{"class":699},[178,71466,71467],{"class":195}," tbody",[178,71469,734],{"class":699},[178,71471,56117],{"class":319},[178,71473,56120],{"class":184},[178,71475,944],{"class":319},[178,71477,71478],{"class":188},"'tbody'",[178,71480,863],{"class":319},[178,71482,71483],{"class":180,"line":18420},[178,71484,722],{"emptyLinePlaceholder":721},[178,71486,71487],{"class":180,"line":18434},[178,71488,71489],{"class":2008},"    \u002F\u002F 获取所有带有name属性的元素\n",[178,71491,71492,71494,71497,71499,71501,71503,71505,71508],{"class":180,"line":18454},[178,71493,12982],{"class":699},[178,71495,71496],{"class":195}," items",[178,71498,734],{"class":699},[178,71500,56117],{"class":319},[178,71502,57402],{"class":184},[178,71504,944],{"class":319},[178,71506,71507],{"class":188},"'[name]'",[178,71509,863],{"class":319},[178,71511,71512],{"class":180,"line":18460},[178,71513,71514],{"class":2008},"    \u002F\u002F 声明一个空的数组\n",[178,71516,71517,71519,71521,71523],{"class":180,"line":18471},[178,71518,12982],{"class":699},[178,71520,59416],{"class":195},[178,71522,734],{"class":699},[178,71524,53566],{"class":319},[178,71526,71527],{"class":180,"line":18494},[178,71528,71529],{"class":2008},"    \u002F\u002F 1.录入模块\n",[178,71531,71532],{"class":180,"line":18516},[178,71533,71534],{"class":2008},"    \u002F\u002F 1.1这是一个表单提交事件\n",[178,71536,71537,71539,71542,71544,71546,71548,71550,71553],{"class":180,"line":18521},[178,71538,12982],{"class":699},[178,71540,71541],{"class":195}," info",[178,71543,734],{"class":699},[178,71545,56117],{"class":319},[178,71547,56120],{"class":184},[178,71549,944],{"class":319},[178,71551,71552],{"class":188},"'.info'",[178,71554,863],{"class":319},[178,71556,71557,71560,71562,71564,71567,71569,71571,71573,71575],{"class":180,"line":18527},[178,71558,71559],{"class":319},"    info.",[178,71561,59534],{"class":184},[178,71563,944],{"class":319},[178,71565,71566],{"class":188},"'submit'",[178,71568,14196],{"class":319},[178,71570,56170],{"class":699},[178,71572,3457],{"class":319},[178,71574,2024],{"class":6985},[178,71576,14203],{"class":319},[178,71578,71579],{"class":180,"line":18541},[178,71580,71581],{"class":2008},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[178,71583,71584,71587,71590],{"class":180,"line":18554},[178,71585,71586],{"class":319},"      e.",[178,71588,71589],{"class":184},"preventDefault",[178,71591,3760],{"class":319},[178,71593,71594],{"class":180,"line":18559},[178,71595,61733],{"class":2008},[178,71597,71598],{"class":180,"line":18573},[178,71599,722],{"emptyLinePlaceholder":721},[178,71601,71602],{"class":180,"line":18578},[178,71603,71604],{"class":2008},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[178,71606,71607],{"class":180,"line":18584},[178,71608,71609],{"class":2008},"      \u002F\u002F 先遍历循环\n",[178,71611,71612,71614,71616,71618,71620,71622,71624,71626,71628,71631,71633,71635,71637],{"class":180,"line":18589},[178,71613,54011],{"class":699},[178,71615,3457],{"class":319},[178,71617,53575],{"class":699},[178,71619,11199],{"class":319},[178,71621,330],{"class":699},[178,71623,930],{"class":195},[178,71625,11206],{"class":319},[178,71627,320],{"class":699},[178,71629,71630],{"class":319}," items.",[178,71632,53696],{"class":195},[178,71634,4987],{"class":319},[178,71636,4076],{"class":699},[178,71638,14203],{"class":319},[178,71640,71641,71643,71646,71648,71651],{"class":180,"line":18603},[178,71642,4280],{"class":699},[178,71644,71645],{"class":319}," (items[i].value ",[178,71647,56207],{"class":699},[178,71649,71650],{"class":188}," ''",[178,71652,14203],{"class":319},[178,71654,71655,71658,71661,71663,71666],{"class":180,"line":18608},[178,71656,71657],{"class":699},"          return",[178,71659,71660],{"class":184}," alert",[178,71662,944],{"class":319},[178,71664,71665],{"class":188},"'输入内容不能为空'",[178,71667,863],{"class":319},[178,71669,71670],{"class":180,"line":18613},[178,71671,4312],{"class":319},[178,71673,71674],{"class":180,"line":18627},[178,71675,54125],{"class":319},[178,71677,71678],{"class":180,"line":18639},[178,71679,722],{"emptyLinePlaceholder":721},[178,71681,71682],{"class":180,"line":18644},[178,71683,71684],{"class":2008},"      \u002F\u002F 创建新的对象\n",[178,71686,71687,71689,71692,71694],{"class":180,"line":18657},[178,71688,59949],{"class":699},[178,71690,71691],{"class":195}," obj",[178,71693,734],{"class":699},[178,71695,17330],{"class":319},[178,71697,71698,71701,71703,71705,71707],{"class":180,"line":18662},[178,71699,71700],{"class":319},"        stuID: arr.",[178,71702,53696],{"class":195},[178,71704,47298],{"class":699},[178,71706,26870],{"class":195},[178,71708,33202],{"class":319},[178,71710,71711],{"class":180,"line":18667},[178,71712,71713],{"class":319},"        uname: uname.value,\n",[178,71715,71716],{"class":180,"line":18672},[178,71717,71718],{"class":319},"        age: age.value,\n",[178,71720,71721],{"class":180,"line":18685},[178,71722,71723],{"class":319},"        gender: gender.value,\n",[178,71725,71726],{"class":180,"line":18690},[178,71727,71728],{"class":319},"        salary: salary.value,\n",[178,71730,71731],{"class":180,"line":34365},[178,71732,71733],{"class":319},"        city: city.value\n",[178,71735,71736],{"class":180,"line":34371},[178,71737,54125],{"class":319},[178,71739,71740],{"class":180,"line":34377},[178,71741,71742],{"class":2008},"      \u002F\u002F console.log(obj);\n",[178,71744,71745],{"class":180,"line":34383},[178,71746,71747],{"class":2008},"      \u002F\u002F 追加到数组里面\n",[178,71749,71750,71752,71754],{"class":180,"line":34389},[178,71751,59728],{"class":319},[178,71753,53612],{"class":184},[178,71755,71756],{"class":319},"(obj)\n",[178,71758,71759],{"class":180,"line":34400},[178,71760,71761],{"class":2008},"      \u002F\u002F console.log(arr);\n",[178,71763,71764],{"class":180,"line":34406},[178,71765,71766],{"class":2008},"      \u002F\u002F 清空表单  reset重置表单\n",[178,71768,71769,71772,71774,71777],{"class":180,"line":34426},[178,71770,71771],{"class":195},"      this",[178,71773,2498],{"class":319},[178,71775,71776],{"class":184},"reset",[178,71778,3760],{"class":319},[178,71780,71781],{"class":180,"line":34432},[178,71782,71783],{"class":2008},"      \u002F\u002F 调用渲染函数\n",[178,71785,71786,71789],{"class":180,"line":34443},[178,71787,71788],{"class":184},"      render",[178,71790,3760],{"class":319},[178,71792,71793],{"class":180,"line":34449},[178,71794,35193],{"class":319},[178,71796,71797],{"class":180,"line":34455},[178,71798,71799],{"class":2008},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[178,71801,71802,71805,71808],{"class":180,"line":34461},[178,71803,71804],{"class":699},"    function",[178,71806,71807],{"class":184}," render",[178,71809,12614],{"class":319},[178,71811,71812],{"class":180,"line":34467},[178,71813,71814],{"class":2008},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[178,71816,71817,71820,71822],{"class":180,"line":34473},[178,71818,71819],{"class":319},"      tbody.innerHTML ",[178,71821,330],{"class":699},[178,71823,71824],{"class":188}," ''\n",[178,71826,71827],{"class":180,"line":34479},[178,71828,71829],{"class":2008},"      \u002F\u002F 遍历数组\n",[178,71831,71832,71834,71836,71838,71840,71842,71844,71846,71848,71850,71852,71854,71856],{"class":180,"line":34485},[178,71833,54011],{"class":699},[178,71835,3457],{"class":319},[178,71837,53575],{"class":699},[178,71839,11199],{"class":319},[178,71841,330],{"class":699},[178,71843,930],{"class":195},[178,71845,11206],{"class":319},[178,71847,320],{"class":699},[178,71849,53693],{"class":319},[178,71851,53696],{"class":195},[178,71853,4987],{"class":319},[178,71855,4076],{"class":699},[178,71857,14203],{"class":319},[178,71859,71860,71862,71865,71867,71869,71872,71874,71877],{"class":180,"line":34505},[178,71861,62991],{"class":699},[178,71863,71864],{"class":195}," tr",[178,71866,734],{"class":699},[178,71868,56117],{"class":319},[178,71870,71871],{"class":184},"createElement",[178,71873,944],{"class":319},[178,71875,71876],{"class":188},"'tr'",[178,71878,863],{"class":319},[178,71880,71881,71884,71886],{"class":180,"line":34511},[178,71882,71883],{"class":319},"        tr.innerHTML ",[178,71885,330],{"class":699},[178,71887,71888],{"class":188}," `\n",[178,71890,71891,71894,71896,71898,71900,71903,71906],{"class":180,"line":34527},[178,71892,71893],{"class":188},"        \u003Ctd>${",[178,71895,5652],{"class":319},[178,71897,2830],{"class":188},[178,71899,2381],{"class":319},[178,71901,71902],{"class":188},"].",[178,71904,71905],{"class":319},"stuID",[178,71907,71908],{"class":188},"}\u003C\u002Ftd>\n",[178,71910,71911,71914,71916,71918,71920,71922,71925],{"class":180,"line":34533},[178,71912,71913],{"class":188},"          \u003Ctd>${",[178,71915,5652],{"class":319},[178,71917,2830],{"class":188},[178,71919,2381],{"class":319},[178,71921,71902],{"class":188},[178,71923,71924],{"class":319},"uname",[178,71926,71908],{"class":188},[178,71928,71929,71931,71933,71935,71937,71939,71942],{"class":180,"line":34547},[178,71930,71913],{"class":188},[178,71932,5652],{"class":319},[178,71934,2830],{"class":188},[178,71936,2381],{"class":319},[178,71938,71902],{"class":188},[178,71940,71941],{"class":319},"age",[178,71943,71908],{"class":188},[178,71945,71946,71948,71950,71952,71954,71956,71959],{"class":180,"line":34553},[178,71947,71913],{"class":188},[178,71949,5652],{"class":319},[178,71951,2830],{"class":188},[178,71953,2381],{"class":319},[178,71955,71902],{"class":188},[178,71957,71958],{"class":319},"gender",[178,71960,71908],{"class":188},[178,71962,71963,71965,71967,71969,71971,71973,71976],{"class":180,"line":34568},[178,71964,71913],{"class":188},[178,71966,5652],{"class":319},[178,71968,2830],{"class":188},[178,71970,2381],{"class":319},[178,71972,71902],{"class":188},[178,71974,71975],{"class":319},"salary",[178,71977,71908],{"class":188},[178,71979,71980,71982,71984,71986,71988,71990,71993],{"class":180,"line":34574},[178,71981,71913],{"class":188},[178,71983,5652],{"class":319},[178,71985,2830],{"class":188},[178,71987,2381],{"class":319},[178,71989,71902],{"class":188},[178,71991,71992],{"class":319},"city",[178,71994,71908],{"class":188},[178,71996,71997],{"class":180,"line":34583},[178,71998,71313],{"class":188},[178,72000,72001,72004,72006],{"class":180,"line":34589},[178,72002,72003],{"class":188},"            \u003Ca href=\"javascript:\" data-id=${",[178,72005,2381],{"class":319},[178,72007,72008],{"class":188},"}>删除\u003C\u002Fa>\n",[178,72010,72011],{"class":180,"line":34598},[178,72012,72013],{"class":188},"          \u003C\u002Ftd> \n",[178,72015,72016],{"class":180,"line":34604},[178,72017,72018],{"class":188},"          `\n",[178,72020,72021],{"class":180,"line":34610},[178,72022,72023],{"class":2008},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[178,72025,72026,72029,72032],{"class":180,"line":34619},[178,72027,72028],{"class":319},"        tbody.",[178,72030,72031],{"class":184},"appendChild",[178,72033,72034],{"class":319},"(tr)\n",[178,72036,72037],{"class":180,"line":34625},[178,72038,54125],{"class":319},[178,72040,72041],{"class":180,"line":34636},[178,72042,3971],{"class":319},[178,72044,72045],{"class":180,"line":34642},[178,72046,722],{"emptyLinePlaceholder":721},[178,72048,72049],{"class":180,"line":34661},[178,72050,72051],{"class":2008},"    \u002F\u002F 3.删除委托\n",[178,72053,72054],{"class":180,"line":34667},[178,72055,72056],{"class":2008},"    \u002F\u002F 3.1 事件委托 tbody\n",[178,72058,72059,72062,72064,72066,72068,72070,72072,72074,72076],{"class":180,"line":34678},[178,72060,72061],{"class":319},"    tbody.",[178,72063,59534],{"class":184},[178,72065,944],{"class":319},[178,72067,59539],{"class":188},[178,72069,14196],{"class":319},[178,72071,56170],{"class":699},[178,72073,3457],{"class":319},[178,72075,2024],{"class":6985},[178,72077,14203],{"class":319},[178,72079,72080,72082,72084,72086,72088],{"class":180,"line":34684},[178,72081,56201],{"class":699},[178,72083,68754],{"class":319},[178,72085,56207],{"class":699},[178,72087,69976],{"class":188},[178,72089,14203],{"class":319},[178,72091,72092],{"class":180,"line":34704},[178,72093,72094],{"class":2008},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[178,72096,72097],{"class":180,"line":34720},[178,72098,72099],{"class":2008},"        \u002F\u002F console.log(e.target.dataset.id);\n",[178,72101,72102],{"class":180,"line":34726},[178,72103,72104],{"class":2008},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[178,72106,72107,72110,72112,72115,72117],{"class":180,"line":34740},[178,72108,72109],{"class":319},"        arr.",[178,72111,59731],{"class":184},[178,72113,72114],{"class":319},"(e.target.dataset.id, ",[178,72116,1665],{"class":195},[178,72118,863],{"class":319},[178,72120,72121],{"class":180,"line":34746},[178,72122,72123],{"class":2008},"        \u002F\u002F 重新渲染一次\n",[178,72125,72126,72129],{"class":180,"line":34752},[178,72127,72128],{"class":184},"        render",[178,72130,3760],{"class":319},[178,72132,72133],{"class":180,"line":34763},[178,72134,54125],{"class":319},[178,72136,72137],{"class":180,"line":34769},[178,72138,35193],{"class":319},[178,72140,72141,72143,72145],{"class":180,"line":34775},[178,72142,357],{"class":319},[178,72144,53541],{"class":323},[178,72146,336],{"class":319},[178,72148,72149],{"class":180,"line":34785},[178,72150,722],{"emptyLinePlaceholder":721},[178,72152,72153,72155,72157],{"class":180,"line":34791},[178,72154,367],{"class":319},[178,72156,376],{"class":323},[178,72158,336],{"class":319},[178,72160,72161],{"class":180,"line":34802},[178,72162,722],{"emptyLinePlaceholder":721},[178,72164,72165,72167,72169],{"class":180,"line":34808},[178,72166,367],{"class":319},[178,72168,52367],{"class":323},[178,72170,336],{"class":319},[19,72172,72173],{},"样式：",[154,72175,72179],{"className":72176,"code":72177,"language":72178,"meta":160,"style":160},"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",[70,72180,72181,72186,72196,72205,72209,72213,72218,72228,72233,72237,72242,72252,72257,72266,72270,72274,72279,72284,72294,72304,72309,72313,72318,72327,72337,72342,72352,72362,72366,72371,72379,72383,72388,72393,72398,72406,72415,72419,72424,72433,72437,72442,72451,72455,72460,72469,72478,72486,72490,72495,72504,72514,72523,72533,72539,72548,72558,72568,72572,72577,72586,72594,72604,72612,72621,72630,72640,72648,72652,72657,72666],{"__ignoreMap":160},[178,72182,72183],{"class":180,"line":181},[178,72184,72185],{"class":319},"* {\n",[178,72187,72188,72191,72193],{"class":180,"line":263},[178,72189,72190],{"class":323},"  margin",[178,72192,53167],{"class":319},[178,72194,72195],{"class":188},"0;\n",[178,72197,72198,72201,72203],{"class":180,"line":274},[178,72199,72200],{"class":188},"  padding",[178,72202,53167],{"class":319},[178,72204,72195],{"class":188},[178,72206,72207],{"class":180,"line":354},[178,72208,3371],{"class":319},[178,72210,72211],{"class":180,"line":364},[178,72212,722],{"emptyLinePlaceholder":721},[178,72214,72215],{"class":180,"line":740},[178,72216,72217],{"class":188},"a {\n",[178,72219,72220,72223,72225],{"class":180,"line":746},[178,72221,72222],{"class":323},"  text-decoration",[178,72224,53167],{"class":319},[178,72226,72227],{"class":188},"none;\n",[178,72229,72230],{"class":180,"line":752},[178,72231,72232],{"class":188},"  color:#721c24;\n",[178,72234,72235],{"class":180,"line":757},[178,72236,3371],{"class":319},[178,72238,72239],{"class":180,"line":763},[178,72240,72241],{"class":188},"h1 {\n",[178,72243,72244,72247,72249],{"class":180,"line":769},[178,72245,72246],{"class":323},"  text-align",[178,72248,53167],{"class":319},[178,72250,72251],{"class":188},"center;\n",[178,72253,72254],{"class":180,"line":774},[178,72255,72256],{"class":188},"  color:#333;\n",[178,72258,72259,72261,72263],{"class":180,"line":780},[178,72260,72190],{"class":323},[178,72262,53167],{"class":319},[178,72264,72265],{"class":188},"20px 0;\n",[178,72267,72268],{"class":180,"line":786},[178,72269,4450],{"class":319},[178,72271,72272],{"class":180,"line":792},[178,72273,3371],{"class":319},[178,72275,72276],{"class":180,"line":798},[178,72277,72278],{"class":188},"table {\n",[178,72280,72281],{"class":180,"line":804},[178,72282,72283],{"class":188},"  margin:0 auto;\n",[178,72285,72286,72289,72291],{"class":180,"line":810},[178,72287,72288],{"class":323},"  width",[178,72290,53167],{"class":319},[178,72292,72293],{"class":188},"800px;\n",[178,72295,72296,72299,72301],{"class":180,"line":816},[178,72297,72298],{"class":323},"  border-collapse",[178,72300,53167],{"class":319},[178,72302,72303],{"class":188},"collapse;\n",[178,72305,72306],{"class":180,"line":822},[178,72307,72308],{"class":188},"  color:#004085;\n",[178,72310,72311],{"class":180,"line":827},[178,72312,3371],{"class":319},[178,72314,72315],{"class":180,"line":832},[178,72316,72317],{"class":188},"th {\n",[178,72319,72320,72322,72324],{"class":180,"line":850},[178,72321,72200],{"class":323},[178,72323,53167],{"class":319},[178,72325,72326],{"class":188},"10px;\n",[178,72328,72329,72332,72334],{"class":180,"line":866},[178,72330,72331],{"class":323},"  background",[178,72333,53167],{"class":319},[178,72335,72336],{"class":2008},"#cfe5ff;\n",[178,72338,72339],{"class":180,"line":877},[178,72340,72341],{"class":319},"  \n",[178,72343,72344,72347,72349],{"class":180,"line":882},[178,72345,72346],{"class":323},"  font-size",[178,72348,53167],{"class":319},[178,72350,72351],{"class":188},"20px;\n",[178,72353,72354,72357,72359],{"class":180,"line":898},[178,72355,72356],{"class":323},"  font-weight",[178,72358,53167],{"class":319},[178,72360,72361],{"class":188},"400;\n",[178,72363,72364],{"class":180,"line":914},[178,72365,3371],{"class":319},[178,72367,72368],{"class":180,"line":919},[178,72369,72370],{"class":188},"td,th {\n",[178,72372,72373,72376],{"class":180,"line":935},[178,72374,72375],{"class":188},"  border:1px solid",[178,72377,72378],{"class":2008}," #b8daff;\n",[178,72380,72381],{"class":180,"line":952},[178,72382,3371],{"class":319},[178,72384,72385],{"class":180,"line":966},[178,72386,72387],{"class":188},"td {\n",[178,72389,72390],{"class":180,"line":980},[178,72391,72392],{"class":188},"  padding:10px;\n",[178,72394,72395],{"class":180,"line":985},[178,72396,72397],{"class":188},"  color:#666;\n",[178,72399,72400,72402,72404],{"class":180,"line":1008},[178,72401,72246],{"class":323},[178,72403,53167],{"class":319},[178,72405,72251],{"class":188},[178,72407,72408,72410,72412],{"class":180,"line":1014},[178,72409,72346],{"class":323},[178,72411,53167],{"class":319},[178,72413,72414],{"class":188},"16px;\n",[178,72416,72417],{"class":180,"line":1019},[178,72418,3371],{"class":319},[178,72420,72421],{"class":180,"line":1033},[178,72422,72423],{"class":188},"tbody tr {\n",[178,72425,72426,72428,72430],{"class":180,"line":1046},[178,72427,72331],{"class":323},[178,72429,53167],{"class":319},[178,72431,72432],{"class":2008},"#fff;\n",[178,72434,72435],{"class":180,"line":1059},[178,72436,3371],{"class":319},[178,72438,72439],{"class":180,"line":1072},[178,72440,72441],{"class":188},"tbody tr:hover {\n",[178,72443,72444,72446,72448],{"class":180,"line":1077},[178,72445,72331],{"class":323},[178,72447,53167],{"class":319},[178,72449,72450],{"class":2008},"#e1ecf8;\n",[178,72452,72453],{"class":180,"line":1082},[178,72454,3371],{"class":319},[178,72456,72457],{"class":180,"line":1099},[178,72458,72459],{"class":188},".info {\n",[178,72461,72462,72464,72466],{"class":180,"line":9806},[178,72463,72288],{"class":323},[178,72465,53167],{"class":319},[178,72467,72468],{"class":188},"900px;\n",[178,72470,72471,72473,72475],{"class":180,"line":9818},[178,72472,72190],{"class":323},[178,72474,53167],{"class":319},[178,72476,72477],{"class":188},"50px auto;\n",[178,72479,72480,72482,72484],{"class":180,"line":11477},[178,72481,72246],{"class":323},[178,72483,53167],{"class":319},[178,72485,72251],{"class":188},[178,72487,72488],{"class":180,"line":11502},[178,72489,3371],{"class":319},[178,72491,72492],{"class":180,"line":11525},[178,72493,72494],{"class":188},".info  input, .info select {\n",[178,72496,72497,72499,72501],{"class":180,"line":11549},[178,72498,72288],{"class":323},[178,72500,53167],{"class":319},[178,72502,72503],{"class":188},"80px;\n",[178,72505,72506,72509,72511],{"class":180,"line":11554},[178,72507,72508],{"class":323},"  height",[178,72510,53167],{"class":319},[178,72512,72513],{"class":188},"27px;\n",[178,72515,72516,72519,72521],{"class":180,"line":11559},[178,72517,72518],{"class":323},"  outline",[178,72520,53167],{"class":319},[178,72522,72227],{"class":188},[178,72524,72525,72528,72530],{"class":180,"line":11564},[178,72526,72527],{"class":323},"  border-radius",[178,72529,53167],{"class":319},[178,72531,72532],{"class":188},"5px;\n",[178,72534,72535,72537],{"class":180,"line":11573},[178,72536,72375],{"class":188},[178,72538,72378],{"class":2008},[178,72540,72541,72544,72546],{"class":180,"line":11578},[178,72542,72543],{"class":323},"  padding-left",[178,72545,53167],{"class":319},[178,72547,72532],{"class":188},[178,72549,72550,72553,72555],{"class":180,"line":11584},[178,72551,72552],{"class":323},"  box-sizing",[178,72554,53167],{"class":319},[178,72556,72557],{"class":188},"border-box;\n",[178,72559,72560,72563,72565],{"class":180,"line":11605},[178,72561,72562],{"class":323},"  margin-right",[178,72564,53167],{"class":319},[178,72566,72567],{"class":188},"15px;\n",[178,72569,72570],{"class":180,"line":11611},[178,72571,3371],{"class":319},[178,72573,72574],{"class":180,"line":11625},[178,72575,72576],{"class":188},".info button {\n",[178,72578,72579,72581,72583],{"class":180,"line":11631},[178,72580,72288],{"class":323},[178,72582,53167],{"class":319},[178,72584,72585],{"class":188},"60px;\n",[178,72587,72588,72590,72592],{"class":180,"line":11658},[178,72589,72508],{"class":323},[178,72591,53167],{"class":319},[178,72593,72513],{"class":188},[178,72595,72596,72599,72601],{"class":180,"line":11667},[178,72597,72598],{"class":323},"  background-color",[178,72600,53167],{"class":319},[178,72602,72603],{"class":2008},"#004085;\n",[178,72605,72606,72608,72610],{"class":180,"line":11673},[178,72607,72518],{"class":323},[178,72609,53167],{"class":319},[178,72611,72227],{"class":188},[178,72613,72614,72617,72619],{"class":180,"line":11681},[178,72615,72616],{"class":323},"  border",[178,72618,53167],{"class":319},[178,72620,72195],{"class":188},[178,72622,72623,72626,72628],{"class":180,"line":11686},[178,72624,72625],{"class":323},"  color",[178,72627,53167],{"class":319},[178,72629,72432],{"class":2008},[178,72631,72632,72635,72637],{"class":180,"line":18362},[178,72633,72634],{"class":323},"  cursor",[178,72636,53167],{"class":319},[178,72638,72639],{"class":188},"pointer;\n",[178,72641,72642,72644,72646],{"class":180,"line":18368},[178,72643,72527],{"class":323},[178,72645,53167],{"class":319},[178,72647,72532],{"class":188},[178,72649,72650],{"class":180,"line":18391},[178,72651,3371],{"class":319},[178,72653,72654],{"class":180,"line":18397},[178,72655,72656],{"class":188},".info .age {\n",[178,72658,72659,72661,72663],{"class":180,"line":18420},[178,72660,72288],{"class":323},[178,72662,53167],{"class":319},[178,72664,72665],{"class":188},"50px;\n",[178,72667,72668],{"class":180,"line":18434},[178,72669,3371],{"class":319},[19,72671,72672],{},"思路：",[19,72674,72675],{},[3269,72676],{"alt":160,"src":72677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,72679,72680],{},[3269,72681],{"alt":160,"src":72682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,72684,72685],{},[3269,72686],{"alt":160,"src":72687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[387,72689,72691],{"id":72690},"_3315-重绘回流","3.3.15 重绘回流",[19,72693,72694],{},[3269,72695],{"alt":160,"src":72696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,72698,72699],{},[3269,72700],{"alt":160,"src":72701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,72703,72704],{},[3269,72705],{"alt":160,"src":72706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72708,72710],{"id":72709},"_34-bom","3.4 BOM",[19,72712,72713],{},[3269,72714],{"alt":160,"src":72715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,72717,72718],{},"平时写的document省略了window而已，实际上是window.document",[19,72720,72721],{},"函数也是这样，调用的时候实际为window.fn()",[19,72723,72724],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,72726,72727],{},"window大部分情况下可以省略",[387,72729,72731],{"id":72730},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,72733,72734],{},"只执行一次",[19,72736,72737],{},[3269,72738],{"alt":160,"src":72739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,72741,72742],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,72744,72745],{},[3269,72746],{"alt":160,"src":72747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[387,72749,72751],{"id":72750},"_342-js执行机制","3.4.2 JS执行机制",[19,72753,72754],{},[3269,72755],{"alt":160,"src":72756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,72758,72759],{},"两个的结果都是1111 3333 2222",[19,72761,72762],{},[3269,72763],{"alt":160,"src":72764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,72766,72767],{},[3269,72768],{"alt":160,"src":72769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,72771,72772],{},[3269,72773],{"alt":160,"src":72774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,72776,72777],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,72779,72780],{},"工作流程：",[19,72782,72783],{},[3269,72784],{"alt":160,"src":72785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,72787,72788],{},[3269,72789],{"alt":160,"src":72790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,72792,72793],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,72795,72796],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[387,72798,72800],{"id":72799},"_343-location对象","3.4.3 location对象",[19,72802,72803],{},"location对象属于window这个全局对象下的，可以 省略window",[19,72805,72806],{},[3269,72807],{"alt":160,"src":72808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,72810,72811],{},"href可以跳转页面",[26,72813,72814],{},[29,72815,72816],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,72818,72819],{},"search得到提交信息之后网站后边的地址",[19,72821,72822],{},[3269,72823],{"alt":160,"src":72824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,72826,72827],{},[3269,72828],{"alt":160,"src":72829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[26,72831,72832],{"start":263},[29,72833,72834],{},"hash:这个获取单页面应用#后边的地址",[19,72836,72837],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,72839,72840],{},[3269,72841],{"alt":160,"src":72842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[154,72844,72846],{"className":310,"code":72845,"language":312,"meta":160,"style":160},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[70,72847,72848,72868,72888],{"__ignoreMap":160},[178,72849,72850,72852,72854,72856,72858,72861,72864,72866],{"class":180,"line":181},[178,72851,341],{"class":319},[178,72853,2178],{"class":323},[178,72855,62778],{"class":184},[178,72857,330],{"class":319},[178,72859,72860],{"class":188},"\"#\u002Fmy\"",[178,72862,72863],{"class":319},">我的\u003C\u002F",[178,72865,2178],{"class":323},[178,72867,336],{"class":319},[178,72869,72870,72872,72874,72876,72878,72881,72884,72886],{"class":180,"line":263},[178,72871,341],{"class":319},[178,72873,2178],{"class":323},[178,72875,62778],{"class":184},[178,72877,330],{"class":319},[178,72879,72880],{"class":188},"\"#\u002Ffriend\"",[178,72882,72883],{"class":319},">关注\u003C\u002F",[178,72885,2178],{"class":323},[178,72887,336],{"class":319},[178,72889,72890,72892,72894,72896,72898,72901,72904,72906],{"class":180,"line":274},[178,72891,341],{"class":319},[178,72893,2178],{"class":323},[178,72895,62778],{"class":184},[178,72897,330],{"class":319},[178,72899,72900],{"class":188},"\"#\u002Fdownload\"",[178,72902,72903],{"class":319},">下载\u003C\u002F",[178,72905,2178],{"class":323},[178,72907,336],{"class":319},[19,72909,72910],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[26,72912,72913],{"start":274},[29,72914,72915,72916,72918,72919,72921],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55438,72917],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55438,72920],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[387,72923,72925],{"id":72924},"_345-navigator对象","3.4.5 navigator对象",[19,72927,72928],{},[3269,72929],{"alt":160,"src":72930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[154,72932,72936],{"className":72933,"code":72934,"language":72935,"meta":160,"style":160},"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",[70,72937,72938,72943,72954,72966,72971,73022,73063,73068,73081,73093,73098],{"__ignoreMap":160},[178,72939,72940],{"class":180,"line":181},[178,72941,72942],{"class":2008},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[178,72944,72945,72947,72949,72951],{"class":180,"line":263},[178,72946,2166],{"class":699},[178,72948,944],{"class":319},[178,72950,56170],{"class":699},[178,72952,72953],{"class":319}," () { \n",[178,72955,72956,72958,72961,72963],{"class":180,"line":274},[178,72957,8561],{"class":699},[178,72959,72960],{"class":195}," userAgent",[178,72962,734],{"class":699},[178,72964,72965],{"class":319}," navigator.userAgent \n",[178,72967,72968],{"class":180,"line":354},[178,72969,72970],{"class":2008},"\u002F\u002F 验证是否为Android或iPhone \n",[178,72972,72973,72975,72978,72980,72983,72986,72988,72990,72993,72995,72998,73002,73004,73006,73008,73011,73013,73015,73017,73019],{"class":180,"line":364},[178,72974,8561],{"class":699},[178,72976,72977],{"class":195}," android",[178,72979,734],{"class":699},[178,72981,72982],{"class":319}," userAgent.",[178,72984,72985],{"class":184},"match",[178,72987,944],{"class":319},[178,72989,2524],{"class":188},[178,72991,72992],{"class":49709},"(Android);",[178,72994,2925],{"class":699},[178,72996,72997],{"class":195},"[\\s",[178,72999,73001],{"class":73000},"snhLl","\\\u002F",[178,73003,2879],{"class":195},[178,73005,2421],{"class":699},[178,73007,944],{"class":49709},[178,73009,73010],{"class":195},"[\\d.]",[178,73012,2421],{"class":699},[178,73014,2369],{"class":49709},[178,73016,2925],{"class":699},[178,73018,2524],{"class":188},[178,73020,73021],{"class":319},") \n",[178,73023,73024,73026,73029,73031,73033,73035,73037,73039,73042,73045,73048,73050,73052,73055,73057,73059,73061],{"class":180,"line":740},[178,73025,8561],{"class":699},[178,73027,73028],{"class":195}," iphone",[178,73030,734],{"class":699},[178,73032,72982],{"class":319},[178,73034,72985],{"class":184},[178,73036,944],{"class":319},[178,73038,2524],{"class":188},[178,73040,73041],{"class":49709},"(iPhone",[178,73043,73044],{"class":195},"\\s",[178,73046,73047],{"class":49709},"OS)",[178,73049,73044],{"class":195},[178,73051,944],{"class":49709},[178,73053,73054],{"class":195},"[\\d_]",[178,73056,2421],{"class":699},[178,73058,2369],{"class":49709},[178,73060,2524],{"class":188},[178,73062,73021],{"class":319},[178,73064,73065],{"class":180,"line":746},[178,73066,73067],{"class":2008},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[178,73069,73070,73072,73075,73078],{"class":180,"line":752},[178,73071,1085],{"class":699},[178,73073,73074],{"class":319}," (android ",[178,73076,73077],{"class":699},"||",[178,73079,73080],{"class":319}," iphone) { \n",[178,73082,73083,73086,73088,73091],{"class":180,"line":757},[178,73084,73085],{"class":319},"location.href ",[178,73087,330],{"class":699},[178,73089,73090],{"class":188}," 'http:\u002F\u002Fm.itcast.cn'",[178,73092,4450],{"class":319},[178,73094,73095],{"class":180,"line":763},[178,73096,73097],{"class":319},"} \n",[178,73099,73100],{"class":180,"line":769},[178,73101,73102],{"class":319},"})()\n",[387,73104,73106],{"id":73105},"_346-histroy对象","3.4.6 histroy对象",[19,73108,73109],{},[3269,73110],{"alt":160,"src":73111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,73113,73114],{},"浏览器地址的前进与后退!!!",[19,73116,73117],{},"history.back() 等效于 history.go(-1)",[19,73119,73120],{},"history.forward() 等效于 history.go(1)",[14,73122,73124],{"id":73123},"_35-本地存储","3.5 本地存储",[26,73126,73127,73130,73133],{},[29,73128,73129],{},"数据存储在用户浏览器中",[29,73131,73132],{},"设置、读取方便、甚至页面刷新不丢失数据",[29,73134,73135],{},"容量较大，sessionStorage和localStorage约 5M 左右",[387,73137,73139],{"id":73138},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,73141,73142],{},"只能存储字符串",[19,73144,73145],{},[3269,73146],{"alt":160,"src":73147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,73149,73150],{},[3269,73151],{"alt":160,"src":73152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,73154,73155],{},"键值对要加引号,不然就会当变量来看了",[19,73157,73158],{},"localStorage.setItem('uname', 'pink')",[19,73160,73161],{},"刷新之后信息不再丢失",[19,73163,73164],{},"操作key,value会跟着变",[19,73166,73167],{},"删除只删除键就可以,即名字",[19,73169,73158],{},[19,73171,73172],{},"改:",[19,73174,73175],{},"localStorage.setItem('uname','red')",[19,73177,73178],{},"有这个键就是改,没有这个键就是改",[19,73180,73181],{},[3269,73182],{"alt":160,"src":73183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,73185,73186],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,73188,73189],{},[3269,73190],{"alt":160,"src":73191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,73193,73194],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[387,73196,73198],{"id":73197},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,73200,73201],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,73203,73204],{},"特性:",[26,73206,73207,73210,73213,73216],{},[29,73208,73209],{},"生命周期为关闭浏览器窗口",[29,73211,73212],{},"在同一个窗口(页面)下数据可以共享",[29,73214,73215],{},"以键值对的形式存储使用",[29,73217,73218],{},"用法跟localStorage 基本相同",[387,73220,73222],{"id":73221},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,73224,73225],{},"本地只能存储字符串,无法直接存储复杂数据类型",[154,73227,73229],{"className":310,"code":73228,"language":312,"meta":160,"style":160},"\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",[70,73230,73231,73239,73244,73249,73254,73259,73263,73268,73273],{"__ignoreMap":160},[178,73232,73233,73235,73237],{"class":180,"line":181},[178,73234,320],{"class":319},[178,73236,53541],{"class":323},[178,73238,336],{"class":319},[178,73240,73241],{"class":180,"line":263},[178,73242,73243],{"class":319},"    const obj = {\n",[178,73245,73246],{"class":180,"line":274},[178,73247,73248],{"class":319},"      uname: 'pink老师',\n",[178,73250,73251],{"class":180,"line":354},[178,73252,73253],{"class":319},"      age: 18,\n",[178,73255,73256],{"class":180,"line":364},[178,73257,73258],{"class":319},"      gender: '女'\n",[178,73260,73261],{"class":180,"line":740},[178,73262,3971],{"class":319},[178,73264,73265],{"class":180,"line":746},[178,73266,73267],{"class":319},"    \u002F\u002F 存储复杂数据类型\n",[178,73269,73270],{"class":180,"line":752},[178,73271,73272],{"class":319},"    localStorage.setItem('obj', obj)\n",[178,73274,73275,73277,73279],{"class":180,"line":757},[178,73276,357],{"class":319},[178,73278,53541],{"class":323},[178,73280,336],{"class":319},[19,73282,73283],{},[3269,73284],{"alt":160,"src":73285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,73287,73288],{},"如果获取一下数据:",[19,73290,73291],{},"log(localStorage.getItem('obj'))",[19,73293,73294],{},[3269,73295],{"alt":160,"src":73296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,73298,73299],{},"发现直接存对象是使用不了的!!!",[23756,73301,73303],{"id":73302},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,73305,73306],{},[3269,73307],{"alt":160,"src":73308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[154,73310,73312],{"className":52365,"code":73311,"language":52367,"meta":160,"style":160},"\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",[70,73313,73314,73322,73332,73342,73351,73359,73363,73367,73393,73412,73420,73424,73429,73434],{"__ignoreMap":160},[178,73315,73316,73318,73320],{"class":180,"line":181},[178,73317,320],{"class":319},[178,73319,53541],{"class":323},[178,73321,336],{"class":319},[178,73323,73324,73326,73328,73330],{"class":180,"line":263},[178,73325,12982],{"class":699},[178,73327,71691],{"class":195},[178,73329,734],{"class":699},[178,73331,17330],{"class":319},[178,73333,73334,73337,73340],{"class":180,"line":274},[178,73335,73336],{"class":319},"      uname: ",[178,73338,73339],{"class":188},"'pink老师'",[178,73341,33202],{"class":319},[178,73343,73344,73347,73349],{"class":180,"line":354},[178,73345,73346],{"class":319},"      age: ",[178,73348,2590],{"class":195},[178,73350,33202],{"class":319},[178,73352,73353,73356],{"class":180,"line":364},[178,73354,73355],{"class":319},"      gender: ",[178,73357,73358],{"class":188},"'女'\n",[178,73360,73361],{"class":180,"line":740},[178,73362,3971],{"class":319},[178,73364,73365],{"class":180,"line":746},[178,73366,73267],{"class":2008},[178,73368,73369,73372,73375,73377,73380,73382,73385,73387,73390],{"class":180,"line":752},[178,73370,73371],{"class":319},"  localStorage.",[178,73373,73374],{"class":184},"setItem",[178,73376,944],{"class":319},[178,73378,73379],{"class":188},"'obj'",[178,73381,14196],{"class":319},[178,73383,73384],{"class":195},"JSON",[178,73386,2498],{"class":319},[178,73388,73389],{"class":184},"stringify",[178,73391,73392],{"class":319},"(obj))\n",[178,73394,73395,73398,73400,73403,73406,73408,73410],{"class":180,"line":757},[178,73396,73397],{"class":319},"  console.",[178,73399,59968],{"class":184},[178,73401,73402],{"class":319},"(localStorage.",[178,73404,73405],{"class":184},"getItem",[178,73407,944],{"class":319},[178,73409,73379],{"class":188},[178,73411,32239],{"class":319},[178,73413,73414,73416,73418],{"class":180,"line":763},[178,73415,357],{"class":319},[178,73417,53541],{"class":323},[178,73419,336],{"class":319},[178,73421,73422],{"class":180,"line":769},[178,73423,72341],{"class":319},[178,73425,73426],{"class":180,"line":774},[178,73427,73428],{"class":319},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[178,73430,73431],{"class":180,"line":780},[178,73432,73433],{"class":319},"  类型是字符串的\n",[178,73435,73436],{"class":180,"line":786},[178,73437,73438],{"class":319},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[23756,73440,73442],{"id":73441},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,73444,73445],{},[3269,73446],{"alt":160,"src":73447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,73449,73450],{},[3269,73451],{"alt":160,"src":73452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[154,73454,73456],{"className":310,"code":73455,"language":312,"meta":160,"style":160},"  \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",[70,73457,73458,73466,73470,73474,73478,73482,73486,73491,73496,73501,73506,73511,73516,73521,73526],{"__ignoreMap":160},[178,73459,73460,73462,73464],{"class":180,"line":181},[178,73461,341],{"class":319},[178,73463,53541],{"class":323},[178,73465,336],{"class":319},[178,73467,73468],{"class":180,"line":263},[178,73469,73243],{"class":319},[178,73471,73472],{"class":180,"line":274},[178,73473,73248],{"class":319},[178,73475,73476],{"class":180,"line":354},[178,73477,73253],{"class":319},[178,73479,73480],{"class":180,"line":364},[178,73481,73258],{"class":319},[178,73483,73484],{"class":180,"line":740},[178,73485,3971],{"class":319},[178,73487,73488],{"class":180,"line":746},[178,73489,73490],{"class":319},"    \u002F\u002F 1.存储复杂数据类型\n",[178,73492,73493],{"class":180,"line":752},[178,73494,73495],{"class":319},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[178,73497,73498],{"class":180,"line":757},[178,73499,73500],{"class":319},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[178,73502,73503],{"class":180,"line":763},[178,73504,73505],{"class":319},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[178,73507,73508],{"class":180,"line":769},[178,73509,73510],{"class":319},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[178,73512,73513],{"class":180,"line":774},[178,73514,73515],{"class":319},"    \u002F\u002F 取\n",[178,73517,73518],{"class":180,"line":780},[178,73519,73520],{"class":319},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[178,73522,73523],{"class":180,"line":786},[178,73524,73525],{"class":319},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[178,73527,73528,73530,73532],{"class":180,"line":792},[178,73529,357],{"class":319},[178,73531,53541],{"class":323},[178,73533,336],{"class":319},[19,73535,73536],{},[3269,73537],{"alt":160,"src":73538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[387,73540,73542],{"id":73541},"_356-数组map方法","3.5.6 数组map方法",[19,73544,73545],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,73547,73548],{},[3269,73549],{"alt":160,"src":73550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,73552,73553],{},[3269,73554],{"alt":160,"src":73555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,73557,73558,73561],{},[2093,73559,73560],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,73563,73564],{},"map有返回值，但是forEach没有返回值",[19,73566,73567],{},"map是个方法。用的时候要加 ()",[19,73569,73570],{},"map返回的是一个数组",[387,73572,73574],{"id":73573},"_357-数组中join方法","3.5.7 数组中join方法",[19,73576,73577],{},[3269,73578],{"alt":160,"src":73579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,73581,73582],{},"类似于python中拼接字符串一样！",[26,73584,73585,73588,73591],{},[29,73586,73587],{},"小括号为空则逗号分开",[29,73589,73590],{},"小括号为空字符串 ''，则元素之间没有分隔符",[29,73592,73593],{},"小括号用啥符号就用进行分割",[387,73595,73597],{"id":73596},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[26,73599,73600,73603,73606,73609,73612],{},[29,73601,73602],{},"记住本地时间获取快速方式：new Date().toDateString()",[29,73604,73605],{},"尽量减少DOM操作，用好map+join的渲染方式",[29,73607,73608],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[29,73610,73611],{},"return可以实现函数的结束",[29,73613,73614],{},"禁止跳转是 preventDefault() 不要忘记",[154,73616,73618],{"className":52365,"code":73617,"language":52367,"meta":160,"style":160},"\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",[70,73619,73620,73630,73644,73648,73656,73670,73690,73702,73710,73716,73726,73736,73740,73744,73750,73760,73772,73776,73780,73787,73799,73813,73823,73827,73831,73838,73845,73852,73864,73876,73886,73898,73902,73906,73913,73920,73932,73944,73954,73966,73996,74000,74004,74011,74023,74035,74059,74069,74079,74083,74087,74095,74106,74118,74130,74142,74159,74171,74183,74187,74191,74198,74210,74222,74234,74245,74263,74276,74288,74312,74323,74327,74331,74339,74349,74353,74357,74363,74375,74386,74396,74400,74404,74410,74432,74436,74440,74446,74452,74464,74474,74486,74516,74529,74546,74550,74554,74565,74587,74597,74601,74605,74618,74628,74640,74652,74664,74676,74686,74696,74706,74717,74730,74734,74742,74750,74754,74762,74775,74795,74828,74861,74894,74920,74938,74956,74964,74990,75008,75026,75044,75062,75080,75088,75096,75114,75122,75151,75159,75167,75175,75188,75200,75212,75224,75236,75248,75261,75273,75281,75289,75297,75302,75307,75311,75315,75319,75323,75327,75331,75336,75341,75346,75351,75359,75367,75375,75380,75385,75390,75395,75400,75405,75410,75415,75420,75425,75430,75435,75440,75445,75449,75454,75459,75469,75478,75482,75487,75496,75512,75554,75594,75633,75698,75706,75710,75715,75733,75741,75746,75751,75781,75787,75792,75805,75817,75829,75841,75853,75865,75877,75881,75891,75895,75900,75905,75909,75918,75922,75927,75932,75951,75956,75976,75980,75985,75989,75994,76012,76030,76048,76067,76086,76105,76110,76116,76137,76143,76152,76158,76164,76170,76197,76210,76215,76225,76231,76237,76243,76249,76254,76260,76266,76272,76278,76311,76316,76321,76326,76331,76337,76343,76349,76360,76365,76371,76378,76392,76398,76422,76427,76432,76438,76444,76465,76471,76484,76490,76496,76502,76508,76513,76519,76525,76531,76549,76563,76569,76577,76583,76605,76610,76615,76620,76625,76630,76639,76648,76653],{"__ignoreMap":160},[178,73621,73622,73624,73626,73628],{"class":180,"line":181},[178,73623,53029],{"class":319},[178,73625,53032],{"class":323},[178,73627,53035],{"class":184},[178,73629,336],{"class":319},[178,73631,73632,73634,73636,73638,73640,73642],{"class":180,"line":263},[178,73633,320],{"class":319},[178,73635,52367],{"class":323},[178,73637,53046],{"class":184},[178,73639,330],{"class":319},[178,73641,53051],{"class":188},[178,73643,336],{"class":319},[178,73645,73646],{"class":180,"line":274},[178,73647,722],{"emptyLinePlaceholder":721},[178,73649,73650,73652,73654],{"class":180,"line":354},[178,73651,320],{"class":319},[178,73653,53064],{"class":323},[178,73655,336],{"class":319},[178,73657,73658,73660,73662,73664,73666,73668],{"class":180,"line":364},[178,73659,341],{"class":319},[178,73661,53074],{"class":323},[178,73663,53077],{"class":184},[178,73665,330],{"class":319},[178,73667,53082],{"class":188},[178,73669,336],{"class":319},[178,73671,73672,73674,73676,73678,73680,73682,73684,73686,73688],{"class":180,"line":740},[178,73673,341],{"class":319},[178,73675,53074],{"class":323},[178,73677,426],{"class":184},[178,73679,330],{"class":319},[178,73681,53121],{"class":188},[178,73683,53101],{"class":184},[178,73685,330],{"class":319},[178,73687,53128],{"class":188},[178,73689,336],{"class":319},[178,73691,73692,73694,73696,73698,73700],{"class":180,"line":746},[178,73693,341],{"class":319},[178,73695,53137],{"class":323},[178,73697,53140],{"class":319},[178,73699,53137],{"class":323},[178,73701,336],{"class":319},[178,73703,73704,73706,73708],{"class":180,"line":752},[178,73705,341],{"class":319},[178,73707,1853],{"class":323},[178,73709,336],{"class":319},[178,73711,73712,73714],{"class":180,"line":757},[178,73713,8172],{"class":323},[178,73715,17330],{"class":319},[178,73717,73718,73720,73722,73724],{"class":180,"line":763},[178,73719,56416],{"class":195},[178,73721,53167],{"class":319},[178,73723,2133],{"class":195},[178,73725,3100],{"class":319},[178,73727,73728,73730,73732,73734],{"class":180,"line":769},[178,73729,56427],{"class":195},[178,73731,53167],{"class":319},[178,73733,2133],{"class":195},[178,73735,3100],{"class":319},[178,73737,73738],{"class":180,"line":774},[178,73739,3971],{"class":319},[178,73741,73742],{"class":180,"line":780},[178,73743,722],{"emptyLinePlaceholder":721},[178,73745,73746,73748],{"class":180,"line":786},[178,73747,59000],{"class":323},[178,73749,17330],{"class":319},[178,73751,73752,73754,73756,73758],{"class":180,"line":792},[178,73753,59007],{"class":195},[178,73755,53167],{"class":319},[178,73757,53322],{"class":195},[178,73759,3100],{"class":319},[178,73761,73762,73764,73766,73768,73770],{"class":180,"line":798},[178,73763,63798],{"class":195},[178,73765,53167],{"class":319},[178,73767,2640],{"class":195},[178,73769,53222],{"class":699},[178,73771,3100],{"class":319},[178,73773,73774],{"class":180,"line":804},[178,73775,3971],{"class":319},[178,73777,73778],{"class":180,"line":810},[178,73779,722],{"emptyLinePlaceholder":721},[178,73781,73782,73785],{"class":180,"line":816},[178,73783,73784],{"class":184},"    .info",[178,73786,17330],{"class":319},[178,73788,73789,73791,73793,73795,73797],{"class":180,"line":822},[178,73790,56492],{"class":195},[178,73792,53167],{"class":319},[178,73794,53219],{"class":195},[178,73796,53222],{"class":699},[178,73798,3100],{"class":319},[178,73800,73801,73803,73805,73807,73809,73811],{"class":180,"line":827},[178,73802,56427],{"class":195},[178,73804,53167],{"class":319},[178,73806,2386],{"class":195},[178,73808,53222],{"class":699},[178,73810,53286],{"class":195},[178,73812,3100],{"class":319},[178,73814,73815,73817,73819,73821],{"class":180,"line":832},[178,73816,59007],{"class":195},[178,73818,53167],{"class":319},[178,73820,53322],{"class":195},[178,73822,3100],{"class":319},[178,73824,73825],{"class":180,"line":850},[178,73826,3971],{"class":319},[178,73828,73829],{"class":180,"line":866},[178,73830,722],{"emptyLinePlaceholder":721},[178,73832,73833,73836],{"class":180,"line":877},[178,73834,73835],{"class":184},"    .uname",[178,73837,33202],{"class":319},[178,73839,73840,73843],{"class":180,"line":882},[178,73841,73842],{"class":184},"    .age",[178,73844,33202],{"class":319},[178,73846,73847,73850],{"class":180,"line":898},[178,73848,73849],{"class":184},"    .salary",[178,73851,17330],{"class":319},[178,73853,73854,73856,73858,73860,73862],{"class":180,"line":914},[178,73855,56492],{"class":195},[178,73857,53167],{"class":319},[178,73859,2251],{"class":195},[178,73861,53222],{"class":699},[178,73863,3100],{"class":319},[178,73865,73866,73868,73870,73872,73874],{"class":180,"line":919},[178,73867,56506],{"class":195},[178,73869,53167],{"class":319},[178,73871,2640],{"class":195},[178,73873,53222],{"class":699},[178,73875,3100],{"class":319},[178,73877,73878,73880,73882,73884],{"class":180,"line":935},[178,73879,63501],{"class":195},[178,73881,53167],{"class":319},[178,73883,56458],{"class":195},[178,73885,3100],{"class":319},[178,73887,73888,73890,73892,73894,73896],{"class":180,"line":952},[178,73889,63471],{"class":195},[178,73891,53167],{"class":319},[178,73893,2515],{"class":195},[178,73895,53222],{"class":699},[178,73897,3100],{"class":319},[178,73899,73900],{"class":180,"line":966},[178,73901,3971],{"class":319},[178,73903,73904],{"class":180,"line":980},[178,73905,722],{"emptyLinePlaceholder":721},[178,73907,73908,73911],{"class":180,"line":985},[178,73909,73910],{"class":184},"    .gender",[178,73912,33202],{"class":319},[178,73914,73915,73918],{"class":180,"line":1008},[178,73916,73917],{"class":184},"    .city",[178,73919,17330],{"class":319},[178,73921,73922,73924,73926,73928,73930],{"class":180,"line":1014},[178,73923,56492],{"class":195},[178,73925,53167],{"class":319},[178,73927,2251],{"class":195},[178,73929,53222],{"class":699},[178,73931,3100],{"class":319},[178,73933,73934,73936,73938,73940,73942],{"class":180,"line":1019},[178,73935,56506],{"class":195},[178,73937,53167],{"class":319},[178,73939,2765],{"class":195},[178,73941,53222],{"class":699},[178,73943,3100],{"class":319},[178,73945,73946,73948,73950,73952],{"class":180,"line":1033},[178,73947,63501],{"class":195},[178,73949,53167],{"class":319},[178,73951,56458],{"class":195},[178,73953,3100],{"class":319},[178,73955,73956,73958,73960,73962,73964],{"class":180,"line":1046},[178,73957,63471],{"class":195},[178,73959,53167],{"class":319},[178,73961,2515],{"class":195},[178,73963,53222],{"class":699},[178,73965,3100],{"class":319},[178,73967,73968,73970,73972,73974,73976,73978,73981,73983,73985,73987,73990,73992,73994],{"class":180,"line":1059},[178,73969,63698],{"class":195},[178,73971,53167],{"class":319},[178,73973,1665],{"class":195},[178,73975,53222],{"class":699},[178,73977,53251],{"class":195},[178,73979,73980],{"class":195}," rgb",[178,73982,944],{"class":319},[178,73984,1002],{"class":195},[178,73986,14196],{"class":319},[178,73988,73989],{"class":195},"197",[178,73991,14196],{"class":319},[178,73993,73989],{"class":195},[178,73995,4495],{"class":319},[178,73997,73998],{"class":180,"line":1072},[178,73999,3971],{"class":319},[178,74001,74002],{"class":180,"line":1077},[178,74003,722],{"emptyLinePlaceholder":721},[178,74005,74006,74009],{"class":180,"line":1082},[178,74007,74008],{"class":323},"    button",[178,74010,17330],{"class":319},[178,74012,74013,74015,74017,74019,74021],{"class":180,"line":1099},[178,74014,56506],{"class":195},[178,74016,53167],{"class":319},[178,74018,2765],{"class":195},[178,74020,53222],{"class":699},[178,74022,3100],{"class":319},[178,74024,74025,74027,74029,74031,74033],{"class":180,"line":9806},[178,74026,56492],{"class":195},[178,74028,53167],{"class":319},[178,74030,2424],{"class":195},[178,74032,53222],{"class":699},[178,74034,3100],{"class":319},[178,74036,74037,74039,74041,74044,74046,74048,74050,74053,74055,74057],{"class":180,"line":9818},[178,74038,56605],{"class":195},[178,74040,53167],{"class":319},[178,74042,74043],{"class":195},"rgb",[178,74045,944],{"class":319},[178,74047,2908],{"class":195},[178,74049,14196],{"class":319},[178,74051,74052],{"class":195},"187",[178,74054,14196],{"class":319},[178,74056,2239],{"class":195},[178,74058,4495],{"class":319},[178,74060,74061,74063,74065,74067],{"class":180,"line":11477},[178,74062,59137],{"class":195},[178,74064,53167],{"class":319},[178,74066,62563],{"class":195},[178,74068,3100],{"class":319},[178,74070,74071,74073,74075,74077],{"class":180,"line":11502},[178,74072,63698],{"class":195},[178,74074,53167],{"class":319},[178,74076,2133],{"class":195},[178,74078,3100],{"class":319},[178,74080,74081],{"class":180,"line":11525},[178,74082,3971],{"class":319},[178,74084,74085],{"class":180,"line":11549},[178,74086,722],{"emptyLinePlaceholder":721},[178,74088,74089,74091,74093],{"class":180,"line":11554},[178,74090,74008],{"class":323},[178,74092,53418],{"class":323},[178,74094,17330],{"class":319},[178,74096,74097,74099,74101,74104],{"class":180,"line":11559},[178,74098,56730],{"class":195},[178,74100,53167],{"class":319},[178,74102,74103],{"class":195},"inline-block",[178,74105,3100],{"class":319},[178,74107,74108,74110,74112,74114,74116],{"class":180,"line":11564},[178,74109,56492],{"class":195},[178,74111,53167],{"class":319},[178,74113,2386],{"class":195},[178,74115,53222],{"class":699},[178,74117,3100],{"class":319},[178,74119,74120,74122,74124,74126,74128],{"class":180,"line":11573},[178,74121,56506],{"class":195},[178,74123,53167],{"class":319},[178,74125,2386],{"class":195},[178,74127,53222],{"class":699},[178,74129,3100],{"class":319},[178,74131,74132,74134,74136,74138,74140],{"class":180,"line":11578},[178,74133,59080],{"class":195},[178,74135,53167],{"class":319},[178,74137,2412],{"class":195},[178,74139,53222],{"class":699},[178,74141,3100],{"class":319},[178,74143,74144,74146,74148,74150,74152,74154,74157],{"class":180,"line":11584},[178,74145,63698],{"class":195},[178,74147,53167],{"class":319},[178,74149,1665],{"class":195},[178,74151,53222],{"class":699},[178,74153,53251],{"class":195},[178,74155,74156],{"class":195}," #fff",[178,74158,3100],{"class":319},[178,74160,74161,74163,74165,74167,74169],{"class":180,"line":11605},[178,74162,56855],{"class":195},[178,74164,53167],{"class":319},[178,74166,2259],{"class":195},[178,74168,53222],{"class":699},[178,74170,3100],{"class":319},[178,74172,74173,74175,74177,74179,74181],{"class":180,"line":11611},[178,74174,63471],{"class":195},[178,74176,53167],{"class":319},[178,74178,1665],{"class":195},[178,74180,53222],{"class":699},[178,74182,3100],{"class":319},[178,74184,74185],{"class":180,"line":11625},[178,74186,3971],{"class":319},[178,74188,74189],{"class":180,"line":11631},[178,74190,722],{"emptyLinePlaceholder":721},[178,74192,74193,74196],{"class":180,"line":11658},[178,74194,74195],{"class":184},"    .total",[178,74197,17330],{"class":319},[178,74199,74200,74202,74204,74206,74208],{"class":180,"line":11667},[178,74201,56492],{"class":195},[178,74203,53167],{"class":319},[178,74205,63350],{"class":195},[178,74207,53222],{"class":699},[178,74209,3100],{"class":319},[178,74211,74212,74214,74216,74218,74220],{"class":180,"line":11673},[178,74213,56506],{"class":195},[178,74215,53167],{"class":319},[178,74217,2341],{"class":195},[178,74219,53222],{"class":699},[178,74221,3100],{"class":319},[178,74223,74224,74226,74228,74230,74232],{"class":180,"line":11681},[178,74225,59080],{"class":195},[178,74227,53167],{"class":319},[178,74229,2341],{"class":195},[178,74231,53222],{"class":699},[178,74233,3100],{"class":319},[178,74235,74236,74238,74240,74243],{"class":180,"line":11686},[178,74237,59007],{"class":195},[178,74239,53167],{"class":319},[178,74241,74242],{"class":195},"right",[178,74244,3100],{"class":319},[178,74246,74247,74249,74251,74253,74255,74257,74259,74261],{"class":180,"line":18362},[178,74248,56427],{"class":195},[178,74250,53167],{"class":319},[178,74252,2341],{"class":195},[178,74254,53222],{"class":699},[178,74256,53286],{"class":195},[178,74258,3822],{"class":195},[178,74260,53222],{"class":699},[178,74262,3100],{"class":319},[178,74264,74265,74268,74270,74272,74274],{"class":180,"line":18368},[178,74266,74267],{"class":195},"      padding-right",[178,74269,53167],{"class":319},[178,74271,2386],{"class":195},[178,74273,53222],{"class":699},[178,74275,3100],{"class":319},[178,74277,74278,74280,74282,74284,74286],{"class":180,"line":18391},[178,74279,56643],{"class":195},[178,74281,53167],{"class":319},[178,74283,2463],{"class":195},[178,74285,53222],{"class":699},[178,74287,3100],{"class":319},[178,74289,74290,74292,74294,74296,74298,74301,74303,74306,74308,74310],{"class":180,"line":18397},[178,74291,56605],{"class":195},[178,74293,53167],{"class":319},[178,74295,74043],{"class":195},[178,74297,944],{"class":319},[178,74299,74300],{"class":195},"237",[178,74302,14196],{"class":319},[178,74304,74305],{"class":195},"235",[178,74307,14196],{"class":319},[178,74309,74305],{"class":195},[178,74311,4495],{"class":319},[178,74313,74314,74317,74319,74321],{"class":180,"line":18420},[178,74315,74316],{"class":195},"      box-sizing",[178,74318,53167],{"class":319},[178,74320,62226],{"class":195},[178,74322,3100],{"class":319},[178,74324,74325],{"class":180,"line":18434},[178,74326,3971],{"class":319},[178,74328,74329],{"class":180,"line":18454},[178,74330,722],{"emptyLinePlaceholder":721},[178,74332,74333,74335,74337],{"class":180,"line":18460},[178,74334,74195],{"class":184},[178,74336,53418],{"class":323},[178,74338,17330],{"class":319},[178,74340,74341,74343,74345,74347],{"class":180,"line":18471},[178,74342,59137],{"class":195},[178,74344,53167],{"class":319},[178,74346,59142],{"class":195},[178,74348,3100],{"class":319},[178,74350,74351],{"class":180,"line":18494},[178,74352,3971],{"class":319},[178,74354,74355],{"class":180,"line":18516},[178,74356,722],{"emptyLinePlaceholder":721},[178,74358,74359,74361],{"class":180,"line":18521},[178,74360,66743],{"class":323},[178,74362,17330],{"class":319},[178,74364,74365,74367,74369,74371,74373],{"class":180,"line":18527},[178,74366,56492],{"class":195},[178,74368,53167],{"class":319},[178,74370,63350],{"class":195},[178,74372,53222],{"class":699},[178,74374,3100],{"class":319},[178,74376,74377,74379,74381,74384],{"class":180,"line":18541},[178,74378,56427],{"class":195},[178,74380,53167],{"class":319},[178,74382,74383],{"class":195},"auto",[178,74385,3100],{"class":319},[178,74387,74388,74390,74392,74394],{"class":180,"line":18554},[178,74389,66750],{"class":195},[178,74391,53167],{"class":319},[178,74393,66755],{"class":195},[178,74395,3100],{"class":319},[178,74397,74398],{"class":180,"line":18559},[178,74399,3971],{"class":319},[178,74401,74402],{"class":180,"line":18573},[178,74403,722],{"emptyLinePlaceholder":721},[178,74405,74406,74408],{"class":180,"line":18578},[178,74407,66835],{"class":323},[178,74409,17330],{"class":319},[178,74411,74412,74414,74416,74418,74420,74422,74424,74426,74428,74430],{"class":180,"line":18584},[178,74413,56605],{"class":195},[178,74415,53167],{"class":319},[178,74417,74043],{"class":195},[178,74419,944],{"class":319},[178,74421,74300],{"class":195},[178,74423,14196],{"class":319},[178,74425,74305],{"class":195},[178,74427,14196],{"class":319},[178,74429,74305],{"class":195},[178,74431,4495],{"class":319},[178,74433,74434],{"class":180,"line":18589},[178,74435,3971],{"class":319},[178,74437,74438],{"class":180,"line":18603},[178,74439,722],{"emptyLinePlaceholder":721},[178,74441,74442,74444],{"class":180,"line":18608},[178,74443,66835],{"class":323},[178,74445,33202],{"class":319},[178,74447,74448,74450],{"class":180,"line":18613},[178,74449,66901],{"class":323},[178,74451,17330],{"class":319},[178,74453,74454,74456,74458,74460,74462],{"class":180,"line":18627},[178,74455,56506],{"class":195},[178,74457,53167],{"class":319},[178,74459,2213],{"class":195},[178,74461,53222],{"class":699},[178,74463,3100],{"class":319},[178,74465,74466,74468,74470,74472],{"class":180,"line":18639},[178,74467,59007],{"class":195},[178,74469,53167],{"class":319},[178,74471,56],{"class":195},[178,74473,3100],{"class":319},[178,74475,74476,74478,74480,74482,74484],{"class":180,"line":18644},[178,74477,56643],{"class":195},[178,74479,53167],{"class":319},[178,74481,2489],{"class":195},[178,74483,53222],{"class":699},[178,74485,3100],{"class":319},[178,74487,74488,74490,74492,74494,74496,74498,74500,74502,74505,74507,74510,74512,74514],{"class":180,"line":18657},[178,74489,63698],{"class":195},[178,74491,53167],{"class":319},[178,74493,1665],{"class":195},[178,74495,53222],{"class":699},[178,74497,53251],{"class":195},[178,74499,73980],{"class":195},[178,74501,944],{"class":319},[178,74503,74504],{"class":195},"228",[178,74506,14196],{"class":319},[178,74508,74509],{"class":195},"225",[178,74511,14196],{"class":319},[178,74513,74509],{"class":195},[178,74515,4495],{"class":319},[178,74517,74518,74521,74523,74525,74527],{"class":180,"line":18662},[178,74519,74520],{"class":195},"      padding-left",[178,74522,53167],{"class":319},[178,74524,2259],{"class":195},[178,74526,53222],{"class":699},[178,74528,3100],{"class":319},[178,74530,74531,74533,74535,74537,74540,74542,74544],{"class":180,"line":18667},[178,74532,63581],{"class":195},[178,74534,53167],{"class":319},[178,74536,29870],{"class":195},[178,74538,74539],{"class":195}," linear",[178,74541,63588],{"class":195},[178,74543,2635],{"class":699},[178,74545,3100],{"class":319},[178,74547,74548],{"class":180,"line":18672},[178,74549,3971],{"class":319},[178,74551,74552],{"class":180,"line":18685},[178,74553,722],{"emptyLinePlaceholder":721},[178,74555,74556,74559,74561,74563],{"class":180,"line":18690},[178,74557,74558],{"class":323},"    tbody",[178,74560,71864],{"class":323},[178,74562,62661],{"class":184},[178,74564,17330],{"class":319},[178,74566,74567,74569,74571,74573,74575,74577,74579,74581,74583,74585],{"class":180,"line":34365},[178,74568,56605],{"class":195},[178,74570,53167],{"class":319},[178,74572,74043],{"class":195},[178,74574,944],{"class":319},[178,74576,74300],{"class":195},[178,74578,14196],{"class":319},[178,74580,74305],{"class":195},[178,74582,14196],{"class":319},[178,74584,74305],{"class":195},[178,74586,4495],{"class":319},[178,74588,74589,74591,74593,74595],{"class":180,"line":34371},[178,74590,63746],{"class":195},[178,74592,53167],{"class":319},[178,74594,63751],{"class":195},[178,74596,3100],{"class":319},[178,74598,74599],{"class":180,"line":34377},[178,74600,3971],{"class":319},[178,74602,74603],{"class":180,"line":34383},[178,74604,722],{"emptyLinePlaceholder":721},[178,74606,74607,74609,74611,74614,74616],{"class":180,"line":34389},[178,74608,74558],{"class":323},[178,74610,71864],{"class":323},[178,74612,74613],{"class":323}," td",[178,74615,3205],{"class":323},[178,74617,17330],{"class":319},[178,74619,74620,74622,74624,74626],{"class":180,"line":34400},[178,74621,56730],{"class":195},[178,74623,53167],{"class":319},[178,74625,62590],{"class":195},[178,74627,3100],{"class":319},[178,74629,74630,74632,74634,74636,74638],{"class":180,"line":34406},[178,74631,56492],{"class":195},[178,74633,53167],{"class":319},[178,74635,2847],{"class":195},[178,74637,53222],{"class":699},[178,74639,3100],{"class":319},[178,74641,74642,74644,74646,74648,74650],{"class":180,"line":34426},[178,74643,56506],{"class":195},[178,74645,53167],{"class":319},[178,74647,2765],{"class":195},[178,74649,53222],{"class":699},[178,74651,3100],{"class":319},[178,74653,74654,74656,74658,74660,74662],{"class":180,"line":34432},[178,74655,59080],{"class":195},[178,74657,53167],{"class":319},[178,74659,2765],{"class":195},[178,74661,53222],{"class":699},[178,74663,3100],{"class":319},[178,74665,74666,74668,74670,74672,74674],{"class":180,"line":34443},[178,74667,63798],{"class":195},[178,74669,53167],{"class":319},[178,74671,1669],{"class":195},[178,74673,53222],{"class":699},[178,74675,3100],{"class":319},[178,74677,74678,74680,74682,74684],{"class":180,"line":34449},[178,74679,59137],{"class":195},[178,74681,53167],{"class":319},[178,74683,62563],{"class":195},[178,74685,3100],{"class":319},[178,74687,74688,74690,74692,74694],{"class":180,"line":34455},[178,74689,59007],{"class":195},[178,74691,53167],{"class":319},[178,74693,53322],{"class":195},[178,74695,3100],{"class":319},[178,74697,74698,74700,74702,74704],{"class":180,"line":34461},[178,74699,65690],{"class":195},[178,74701,53167],{"class":319},[178,74703,56458],{"class":195},[178,74705,3100],{"class":319},[178,74707,74708,74710,74712,74715],{"class":180,"line":34467},[178,74709,56605],{"class":195},[178,74711,53167],{"class":319},[178,74713,74714],{"class":195},"orange",[178,74716,3100],{"class":319},[178,74718,74719,74721,74723,74726,74728],{"class":180,"line":34473},[178,74720,56855],{"class":195},[178,74722,53167],{"class":319},[178,74724,74725],{"class":195},"12.5",[178,74727,53222],{"class":699},[178,74729,3100],{"class":319},[178,74731,74732],{"class":180,"line":34479},[178,74733,3971],{"class":319},[178,74735,74736,74738,74740],{"class":180,"line":34485},[178,74737,357],{"class":319},[178,74739,1853],{"class":323},[178,74741,336],{"class":319},[178,74743,74744,74746,74748],{"class":180,"line":34505},[178,74745,367],{"class":319},[178,74747,53064],{"class":323},[178,74749,336],{"class":319},[178,74751,74752],{"class":180,"line":34511},[178,74753,722],{"emptyLinePlaceholder":721},[178,74755,74756,74758,74760],{"class":180,"line":34527},[178,74757,320],{"class":319},[178,74759,376],{"class":323},[178,74761,336],{"class":319},[178,74763,74764,74766,74768,74771,74773],{"class":180,"line":34533},[178,74765,341],{"class":319},[178,74767,14],{"class":323},[178,74769,74770],{"class":319},">学生就业统计表\u003C\u002F",[178,74772,14],{"class":323},[178,74774,336],{"class":319},[178,74776,74777,74779,74781,74783,74785,74787,74789,74791,74793],{"class":180,"line":34547},[178,74778,341],{"class":319},[178,74780,68345],{"class":323},[178,74782,55210],{"class":184},[178,74784,330],{"class":319},[178,74786,64385],{"class":188},[178,74788,70790],{"class":184},[178,74790,330],{"class":319},[178,74792,33511],{"class":188},[178,74794,336],{"class":319},[178,74796,74797,74799,74801,74803,74805,74807,74809,74811,74813,74815,74817,74820,74822,74824,74826],{"class":180,"line":34553},[178,74798,53071],{"class":319},[178,74800,55543],{"class":323},[178,74802,467],{"class":184},[178,74804,330],{"class":319},[178,74806,64419],{"class":188},[178,74808,426],{"class":184},[178,74810,330],{"class":319},[178,74812,70816],{"class":188},[178,74814,62741],{"class":184},[178,74816,330],{"class":319},[178,74818,74819],{"class":188},"\"姓名\"",[178,74821,55210],{"class":184},[178,74823,330],{"class":319},[178,74825,70816],{"class":188},[178,74827,336],{"class":319},[178,74829,74830,74832,74834,74836,74838,74840,74842,74844,74846,74848,74850,74853,74855,74857,74859],{"class":180,"line":34568},[178,74831,53071],{"class":319},[178,74833,55543],{"class":323},[178,74835,467],{"class":184},[178,74837,330],{"class":319},[178,74839,64419],{"class":188},[178,74841,426],{"class":184},[178,74843,330],{"class":319},[178,74845,70844],{"class":188},[178,74847,62741],{"class":184},[178,74849,330],{"class":319},[178,74851,74852],{"class":188},"\"年龄\"",[178,74854,55210],{"class":184},[178,74856,330],{"class":319},[178,74858,70844],{"class":188},[178,74860,336],{"class":319},[178,74862,74863,74865,74867,74869,74871,74873,74875,74877,74879,74881,74883,74886,74888,74890,74892],{"class":180,"line":34574},[178,74864,53071],{"class":319},[178,74866,55543],{"class":323},[178,74868,467],{"class":184},[178,74870,330],{"class":319},[178,74872,64419],{"class":188},[178,74874,426],{"class":184},[178,74876,330],{"class":319},[178,74878,70946],{"class":188},[178,74880,62741],{"class":184},[178,74882,330],{"class":319},[178,74884,74885],{"class":188},"\"薪资\"",[178,74887,55210],{"class":184},[178,74889,330],{"class":319},[178,74891,70946],{"class":188},[178,74893,336],{"class":319},[178,74895,74896,74898,74900,74902,74904,74906,74908,74910,74912,74914,74916,74918],{"class":180,"line":34583},[178,74897,53071],{"class":319},[178,74899,70864],{"class":323},[178,74901,426],{"class":184},[178,74903,330],{"class":319},[178,74905,70871],{"class":188},[178,74907,16717],{"class":184},[178,74909,330],{"class":319},[178,74911,9421],{"class":188},[178,74913,55210],{"class":184},[178,74915,330],{"class":319},[178,74917,70871],{"class":188},[178,74919,336],{"class":319},[178,74921,74922,74924,74926,74928,74930,74932,74934,74936],{"class":180,"line":34589},[178,74923,56955],{"class":319},[178,74925,70886],{"class":323},[178,74927,68371],{"class":184},[178,74929,330],{"class":319},[178,74931,11722],{"class":188},[178,74933,70895],{"class":319},[178,74935,70886],{"class":323},[178,74937,336],{"class":319},[178,74939,74940,74942,74944,74946,74948,74950,74952,74954],{"class":180,"line":34598},[178,74941,56955],{"class":319},[178,74943,70886],{"class":323},[178,74945,68371],{"class":184},[178,74947,330],{"class":319},[178,74949,11791],{"class":188},[178,74951,70914],{"class":319},[178,74953,70886],{"class":323},[178,74955,336],{"class":319},[178,74957,74958,74960,74962],{"class":180,"line":34604},[178,74959,53506],{"class":319},[178,74961,70864],{"class":323},[178,74963,336],{"class":319},[178,74965,74966,74968,74970,74972,74974,74976,74978,74980,74982,74984,74986,74988],{"class":180,"line":34610},[178,74967,53071],{"class":319},[178,74969,70864],{"class":323},[178,74971,426],{"class":184},[178,74973,330],{"class":319},[178,74975,70968],{"class":188},[178,74977,16717],{"class":184},[178,74979,330],{"class":319},[178,74981,9421],{"class":188},[178,74983,55210],{"class":184},[178,74985,330],{"class":319},[178,74987,70968],{"class":188},[178,74989,336],{"class":319},[178,74991,74992,74994,74996,74998,75000,75002,75004,75006],{"class":180,"line":34619},[178,74993,56955],{"class":319},[178,74995,70886],{"class":323},[178,74997,68371],{"class":184},[178,74999,330],{"class":319},[178,75001,70989],{"class":188},[178,75003,70992],{"class":319},[178,75005,70886],{"class":323},[178,75007,336],{"class":319},[178,75009,75010,75012,75014,75016,75018,75020,75022,75024],{"class":180,"line":34625},[178,75011,56955],{"class":319},[178,75013,70886],{"class":323},[178,75015,68371],{"class":184},[178,75017,330],{"class":319},[178,75019,71009],{"class":188},[178,75021,71012],{"class":319},[178,75023,70886],{"class":323},[178,75025,336],{"class":319},[178,75027,75028,75030,75032,75034,75036,75038,75040,75042],{"class":180,"line":34636},[178,75029,56955],{"class":319},[178,75031,70886],{"class":323},[178,75033,68371],{"class":184},[178,75035,330],{"class":319},[178,75037,71029],{"class":188},[178,75039,71032],{"class":319},[178,75041,70886],{"class":323},[178,75043,336],{"class":319},[178,75045,75046,75048,75050,75052,75054,75056,75058,75060],{"class":180,"line":34642},[178,75047,56955],{"class":319},[178,75049,70886],{"class":323},[178,75051,68371],{"class":184},[178,75053,330],{"class":319},[178,75055,71049],{"class":188},[178,75057,71052],{"class":319},[178,75059,70886],{"class":323},[178,75061,336],{"class":319},[178,75063,75064,75066,75068,75070,75072,75074,75076,75078],{"class":180,"line":34661},[178,75065,56955],{"class":319},[178,75067,70886],{"class":323},[178,75069,68371],{"class":184},[178,75071,330],{"class":319},[178,75073,71069],{"class":188},[178,75075,71072],{"class":319},[178,75077,70886],{"class":323},[178,75079,336],{"class":319},[178,75081,75082,75084,75086],{"class":180,"line":34667},[178,75083,53506],{"class":319},[178,75085,70864],{"class":323},[178,75087,336],{"class":319},[178,75089,75090,75092,75094],{"class":180,"line":34678},[178,75091,53071],{"class":319},[178,75093,55608],{"class":323},[178,75095,336],{"class":319},[178,75097,75098,75100,75102,75105,75107,75110,75112],{"class":180,"line":34684},[178,75099,56955],{"class":319},[178,75101,178],{"class":323},[178,75103,75104],{"class":319},">+\u003C\u002F",[178,75106,178],{"class":323},[178,75108,75109],{"class":319},">添加\u003C\u002F",[178,75111,55608],{"class":323},[178,75113,336],{"class":319},[178,75115,75116,75118,75120],{"class":180,"line":34704},[178,75117,357],{"class":319},[178,75119,68345],{"class":323},[178,75121,336],{"class":319},[178,75123,75124,75126,75128,75130,75132,75134,75137,75139,75142,75144,75147,75149],{"class":180,"line":34720},[178,75125,341],{"class":319},[178,75127,53341],{"class":323},[178,75129,55210],{"class":184},[178,75131,330],{"class":319},[178,75133,64301],{"class":188},[178,75135,75136],{"class":319},">共有数据 \u003C",[178,75138,178],{"class":323},[178,75140,75141],{"class":319},">0\u003C\u002F",[178,75143,178],{"class":323},[178,75145,75146],{"class":319},"> 条\u003C\u002F",[178,75148,53341],{"class":323},[178,75150,336],{"class":319},[178,75152,75153,75155,75157],{"class":180,"line":34726},[178,75154,341],{"class":319},[178,75156,45],{"class":323},[178,75158,336],{"class":319},[178,75160,75161,75163,75165],{"class":180,"line":34740},[178,75162,53071],{"class":319},[178,75164,48],{"class":323},[178,75166,336],{"class":319},[178,75168,75169,75171,75173],{"class":180,"line":34746},[178,75170,56955],{"class":319},[178,75172,51],{"class":323},[178,75174,336],{"class":319},[178,75176,75177,75179,75181,75184,75186],{"class":180,"line":34752},[178,75178,57023],{"class":319},[178,75180,54],{"class":323},[178,75182,75183],{"class":319},">ID\u003C\u002F",[178,75185,54],{"class":323},[178,75187,336],{"class":319},[178,75189,75190,75192,75194,75196,75198],{"class":180,"line":34763},[178,75191,57023],{"class":319},[178,75193,54],{"class":323},[178,75195,71175],{"class":319},[178,75197,54],{"class":323},[178,75199,336],{"class":319},[178,75201,75202,75204,75206,75208,75210],{"class":180,"line":34769},[178,75203,57023],{"class":319},[178,75205,54],{"class":323},[178,75207,71188],{"class":319},[178,75209,54],{"class":323},[178,75211,336],{"class":319},[178,75213,75214,75216,75218,75220,75222],{"class":180,"line":34775},[178,75215,57023],{"class":319},[178,75217,54],{"class":323},[178,75219,71201],{"class":319},[178,75221,54],{"class":323},[178,75223,336],{"class":319},[178,75225,75226,75228,75230,75232,75234],{"class":180,"line":34785},[178,75227,57023],{"class":319},[178,75229,54],{"class":323},[178,75231,71214],{"class":319},[178,75233,54],{"class":323},[178,75235,336],{"class":319},[178,75237,75238,75240,75242,75244,75246],{"class":180,"line":34791},[178,75239,57023],{"class":319},[178,75241,54],{"class":323},[178,75243,71227],{"class":319},[178,75245,54],{"class":323},[178,75247,336],{"class":319},[178,75249,75250,75252,75254,75257,75259],{"class":180,"line":34802},[178,75251,57023],{"class":319},[178,75253,54],{"class":323},[178,75255,75256],{"class":319},">录入时间\u003C\u002F",[178,75258,54],{"class":323},[178,75260,336],{"class":319},[178,75262,75263,75265,75267,75269,75271],{"class":180,"line":34808},[178,75264,57023],{"class":319},[178,75266,54],{"class":323},[178,75268,71240],{"class":319},[178,75270,54],{"class":323},[178,75272,336],{"class":319},[178,75274,75275,75277,75279],{"class":180,"line":34818},[178,75276,57128],{"class":319},[178,75278,51],{"class":323},[178,75280,336],{"class":319},[178,75282,75283,75285,75287],{"class":180,"line":34823},[178,75284,53506],{"class":319},[178,75286,48],{"class":323},[178,75288,336],{"class":319},[178,75290,75291,75293,75295],{"class":180,"line":34829},[178,75292,53071],{"class":319},[178,75294,62],{"class":323},[178,75296,336],{"class":319},[178,75298,75299],{"class":180,"line":34878},[178,75300,75301],{"class":2008},"      \u003C!-- \u003Ctr>\n",[178,75303,75304],{"class":180,"line":34925},[178,75305,75306],{"class":2008},"        \u003Ctd>1\u003C\u002Ftd>\n",[178,75308,75309],{"class":180,"line":34930},[178,75310,75306],{"class":2008},[178,75312,75313],{"class":180,"line":34936},[178,75314,75306],{"class":2008},[178,75316,75317],{"class":180,"line":34955},[178,75318,75306],{"class":2008},[178,75320,75321],{"class":180,"line":34961},[178,75322,75306],{"class":2008},[178,75324,75325],{"class":180,"line":34981},[178,75326,75306],{"class":2008},[178,75328,75329],{"class":180,"line":34987},[178,75330,75306],{"class":2008},[178,75332,75333],{"class":180,"line":34993},[178,75334,75335],{"class":2008},"        \u003Ctd>\n",[178,75337,75338],{"class":180,"line":35003},[178,75339,75340],{"class":2008},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[178,75342,75343],{"class":180,"line":35008},[178,75344,75345],{"class":2008},"        \u003C\u002Ftd>\n",[178,75347,75348],{"class":180,"line":35014},[178,75349,75350],{"class":2008},"      \u003C\u002Ftr> -->\n",[178,75352,75353,75355,75357],{"class":180,"line":35030},[178,75354,53506],{"class":319},[178,75356,62],{"class":323},[178,75358,336],{"class":319},[178,75360,75361,75363,75365],{"class":180,"line":35075},[178,75362,357],{"class":319},[178,75364,45],{"class":323},[178,75366,336],{"class":319},[178,75368,75369,75371,75373],{"class":180,"line":35081},[178,75370,341],{"class":319},[178,75372,53541],{"class":323},[178,75374,336],{"class":319},[178,75376,75377],{"class":180,"line":35087},[178,75378,75379],{"class":2008},"    \u002F\u002F const initData = [{\n",[178,75381,75382],{"class":180,"line":35093},[178,75383,75384],{"class":2008},"    \u002F\u002F   unameId: 1,\n",[178,75386,75387],{"class":180,"line":35104},[178,75388,75389],{"class":2008},"    \u002F\u002F   uname: '华晨宇',\n",[178,75391,75392],{"class":180,"line":35110},[178,75393,75394],{"class":2008},"    \u002F\u002F   age: 22,\n",[178,75396,75397],{"class":180,"line":35116},[178,75398,75399],{"class":2008},"    \u002F\u002F   salary: 12000,\n",[178,75401,75402],{"class":180,"line":35122},[178,75403,75404],{"class":2008},"    \u002F\u002F   gender: '男',\n",[178,75406,75407],{"class":180,"line":35140},[178,75408,75409],{"class":2008},"    \u002F\u002F   city: '北京',\n",[178,75411,75412],{"class":180,"line":35154},[178,75413,75414],{"class":2008},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[178,75416,75417],{"class":180,"line":35163},[178,75418,75419],{"class":2008},"    \u002F\u002F }]\n",[178,75421,75422],{"class":180,"line":35172},[178,75423,75424],{"class":2008},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[178,75426,75427],{"class":180,"line":35181},[178,75428,75429],{"class":2008},"    \u002F\u002F 1.渲染业务\n",[178,75431,75432],{"class":180,"line":35190},[178,75433,75434],{"class":2008},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[178,75436,75437],{"class":180,"line":35196},[178,75438,75439],{"class":2008},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[178,75441,75442],{"class":180,"line":35202},[178,75443,75444],{"class":2008},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[178,75446,75447],{"class":180,"line":35210},[178,75448,722],{"emptyLinePlaceholder":721},[178,75450,75451],{"class":180,"line":35215},[178,75452,75453],{"class":2008},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[178,75455,75456],{"class":180,"line":35221},[178,75457,75458],{"class":2008},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[178,75460,75461,75463,75465,75467],{"class":180,"line":35232},[178,75462,12982],{"class":699},[178,75464,59416],{"class":195},[178,75466,734],{"class":699},[178,75468,53566],{"class":319},[178,75470,75471,75474,75476],{"class":180,"line":35238},[178,75472,75473],{"class":319},"    console.",[178,75475,59968],{"class":184},[178,75477,54139],{"class":319},[178,75479,75480],{"class":180,"line":35258},[178,75481,722],{"emptyLinePlaceholder":721},[178,75483,75484],{"class":180,"line":35264},[178,75485,75486],{"class":2008},"    \u002F\u002F 时间函数\n",[178,75488,75489,75491,75494],{"class":180,"line":35270},[178,75490,71804],{"class":699},[178,75492,75493],{"class":184}," getTime",[178,75495,12614],{"class":319},[178,75497,75498,75500,75503,75505,75507,75510],{"class":180,"line":35276},[178,75499,59949],{"class":699},[178,75501,75502],{"class":195}," date",[178,75504,734],{"class":699},[178,75506,13339],{"class":699},[178,75508,75509],{"class":184}," Date",[178,75511,3760],{"class":319},[178,75513,75514,75516,75518,75520,75523,75526,75528,75530,75532,75535,75538,75540,75542,75544,75546,75548,75550,75552],{"class":180,"line":35293},[178,75515,59949],{"class":699},[178,75517,17849],{"class":195},[178,75519,734],{"class":699},[178,75521,75522],{"class":319}," date.",[178,75524,75525],{"class":184},"getHours",[178,75527,14811],{"class":319},[178,75529,320],{"class":699},[178,75531,3822],{"class":195},[178,75533,75534],{"class":699}," ?",[178,75536,75537],{"class":188}," '0'",[178,75539,47298],{"class":699},[178,75541,75522],{"class":319},[178,75543,75525],{"class":184},[178,75545,14811],{"class":319},[178,75547,2799],{"class":699},[178,75549,75522],{"class":319},[178,75551,75525],{"class":184},[178,75553,3760],{"class":319},[178,75555,75556,75558,75561,75563,75565,75568,75570,75572,75574,75576,75578,75580,75582,75584,75586,75588,75590,75592],{"class":180,"line":35299},[178,75557,59949],{"class":699},[178,75559,75560],{"class":195}," m",[178,75562,734],{"class":699},[178,75564,75522],{"class":319},[178,75566,75567],{"class":184},"getMinutes",[178,75569,14811],{"class":319},[178,75571,320],{"class":699},[178,75573,3822],{"class":195},[178,75575,75534],{"class":699},[178,75577,75537],{"class":188},[178,75579,47298],{"class":699},[178,75581,75522],{"class":319},[178,75583,75567],{"class":184},[178,75585,14811],{"class":319},[178,75587,2799],{"class":699},[178,75589,75522],{"class":319},[178,75591,75567],{"class":184},[178,75593,3760],{"class":319},[178,75595,75596,75598,75600,75602,75604,75607,75609,75611,75613,75615,75617,75619,75621,75623,75625,75627,75629,75631],{"class":180,"line":35305},[178,75597,59949],{"class":699},[178,75599,10189],{"class":195},[178,75601,734],{"class":699},[178,75603,75522],{"class":319},[178,75605,75606],{"class":184},"getSeconds",[178,75608,14811],{"class":319},[178,75610,320],{"class":699},[178,75612,3822],{"class":195},[178,75614,75534],{"class":699},[178,75616,75537],{"class":188},[178,75618,47298],{"class":699},[178,75620,75522],{"class":319},[178,75622,75606],{"class":184},[178,75624,14811],{"class":319},[178,75626,2799],{"class":699},[178,75628,75522],{"class":319},[178,75630,75606],{"class":184},[178,75632,3760],{"class":319},[178,75634,75635,75637,75640,75642,75644,75647,75649,75652,75654,75657,75659,75661,75664,75666,75668,75670,75672,75674,75676,75679,75681,75684,75686,75689,75691,75693,75695],{"class":180,"line":35311},[178,75636,59949],{"class":699},[178,75638,75639],{"class":195}," str",[178,75641,734],{"class":699},[178,75643,64623],{"class":188},[178,75645,75646],{"class":319},"date",[178,75648,2498],{"class":188},[178,75650,75651],{"class":184},"getFullYear",[178,75653,4210],{"class":188},[178,75655,75656],{"class":188},"}\u002F${",[178,75658,75646],{"class":319},[178,75660,2498],{"class":188},[178,75662,75663],{"class":184},"getMonth",[178,75665,14811],{"class":188},[178,75667,2421],{"class":699},[178,75669,26870],{"class":195},[178,75671,75656],{"class":188},[178,75673,75646],{"class":319},[178,75675,2498],{"class":188},[178,75677,75678],{"class":184},"getDate",[178,75680,4210],{"class":188},[178,75682,75683],{"class":188},"} ${",[178,75685,2355],{"class":319},[178,75687,75688],{"class":188},"}:${",[178,75690,2484],{"class":319},[178,75692,75688],{"class":188},[178,75694,2635],{"class":319},[178,75696,75697],{"class":188},"}`\n",[178,75699,75700,75703],{"class":180,"line":35317},[178,75701,75702],{"class":699},"      return",[178,75704,75705],{"class":319}," str\n",[178,75707,75708],{"class":180,"line":35323},[178,75709,3971],{"class":319},[178,75711,75712],{"class":180,"line":35350},[178,75713,75714],{"class":2008},"    \u002F\u002F 渲染函数\n",[178,75716,75717,75719,75721,75723,75725,75727,75729,75731],{"class":180,"line":35374},[178,75718,12982],{"class":699},[178,75720,71467],{"class":195},[178,75722,734],{"class":699},[178,75724,56117],{"class":319},[178,75726,56120],{"class":184},[178,75728,944],{"class":319},[178,75730,71478],{"class":188},[178,75732,863],{"class":319},[178,75734,75735,75737,75739],{"class":180,"line":35380},[178,75736,71804],{"class":699},[178,75738,71807],{"class":184},[178,75740,12614],{"class":319},[178,75742,75743],{"class":180,"line":35386},[178,75744,75745],{"class":2008},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[178,75747,75748],{"class":180,"line":35392},[178,75749,75750],{"class":2008},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[178,75752,75753,75755,75758,75760,75762,75765,75767,75769,75771,75774,75776,75779],{"class":180,"line":35403},[178,75754,59949],{"class":699},[178,75756,75757],{"class":195}," trArr",[178,75759,734],{"class":699},[178,75761,53693],{"class":319},[178,75763,75764],{"class":184},"map",[178,75766,944],{"class":319},[178,75768,56170],{"class":699},[178,75770,3457],{"class":319},[178,75772,75773],{"class":6985},"ele",[178,75775,14196],{"class":319},[178,75777,75778],{"class":6985},"index",[178,75780,14203],{"class":319},[178,75782,75783,75785],{"class":180,"line":35414},[178,75784,16511],{"class":699},[178,75786,71888],{"class":188},[178,75788,75789],{"class":180,"line":35420},[178,75790,75791],{"class":188},"      \u003Ctr>\n",[178,75793,75794,75796,75798,75800,75803],{"class":180,"line":35437},[178,75795,71893],{"class":188},[178,75797,75773],{"class":319},[178,75799,2498],{"class":188},[178,75801,75802],{"class":319},"unameId",[178,75804,71908],{"class":188},[178,75806,75807,75809,75811,75813,75815],{"class":180,"line":35460},[178,75808,71893],{"class":188},[178,75810,75773],{"class":319},[178,75812,2498],{"class":188},[178,75814,71924],{"class":319},[178,75816,71908],{"class":188},[178,75818,75819,75821,75823,75825,75827],{"class":180,"line":35483},[178,75820,71893],{"class":188},[178,75822,75773],{"class":319},[178,75824,2498],{"class":188},[178,75826,71941],{"class":319},[178,75828,71908],{"class":188},[178,75830,75831,75833,75835,75837,75839],{"class":180,"line":35489},[178,75832,71893],{"class":188},[178,75834,75773],{"class":319},[178,75836,2498],{"class":188},[178,75838,71958],{"class":319},[178,75840,71908],{"class":188},[178,75842,75843,75845,75847,75849,75851],{"class":180,"line":35494},[178,75844,71893],{"class":188},[178,75846,75773],{"class":319},[178,75848,2498],{"class":188},[178,75850,71975],{"class":319},[178,75852,71908],{"class":188},[178,75854,75855,75857,75859,75861,75863],{"class":180,"line":35503},[178,75856,71893],{"class":188},[178,75858,75773],{"class":319},[178,75860,2498],{"class":188},[178,75862,71992],{"class":319},[178,75864,71908],{"class":188},[178,75866,75867,75869,75871,75873,75875],{"class":180,"line":35513},[178,75868,71893],{"class":188},[178,75870,75773],{"class":319},[178,75872,2498],{"class":188},[178,75874,4171],{"class":319},[178,75876,71908],{"class":188},[178,75878,75879],{"class":180,"line":35519},[178,75880,75335],{"class":188},[178,75882,75883,75886,75888],{"class":180,"line":35524},[178,75884,75885],{"class":188},"          \u003Ca href=\"#\" data-id=\"${",[178,75887,75778],{"class":319},[178,75889,75890],{"class":188},"}\">删除\u003C\u002Fa>\n",[178,75892,75893],{"class":180,"line":35530},[178,75894,75345],{"class":188},[178,75896,75897],{"class":180,"line":35543},[178,75898,75899],{"class":188},"      \u003C\u002Ftr>\n",[178,75901,75902],{"class":180,"line":35549},[178,75903,75904],{"class":188},"  `\n",[178,75906,75907],{"class":180,"line":35560},[178,75908,66535],{"class":319},[178,75910,75911,75913,75915],{"class":180,"line":35571},[178,75912,59965],{"class":319},[178,75914,59968],{"class":184},[178,75916,75917],{"class":319},"(trArr)\n",[178,75919,75920],{"class":180,"line":35590},[178,75921,722],{"emptyLinePlaceholder":721},[178,75923,75924],{"class":180,"line":51250},[178,75925,75926],{"class":2008},"      \u002F\u002F (2) 把数组转换为字符串join\n",[178,75928,75929],{"class":180,"line":51255},[178,75930,75931],{"class":2008},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[178,75933,75934,75936,75938,75941,75944,75946,75949],{"class":180,"line":51264},[178,75935,71819],{"class":319},[178,75937,330],{"class":699},[178,75939,75940],{"class":319}," trArr.",[178,75942,75943],{"class":184},"join",[178,75945,944],{"class":319},[178,75947,75948],{"class":188},"''",[178,75950,863],{"class":319},[178,75952,75953],{"class":180,"line":51273},[178,75954,75955],{"class":2008},"      \u002F\u002F 显示共有几条\n",[178,75957,75958,75960,75962,75964,75967,75970,75972,75974],{"class":180,"line":51278},[178,75959,57492],{"class":319},[178,75961,56120],{"class":184},[178,75963,944],{"class":319},[178,75965,75966],{"class":188},"'.total span'",[178,75968,75969],{"class":319},").innerHTML ",[178,75971,330],{"class":699},[178,75973,53693],{"class":319},[178,75975,57552],{"class":195},[178,75977,75978],{"class":180,"line":51283},[178,75979,3971],{"class":319},[178,75981,75982],{"class":180,"line":51288},[178,75983,75984],{"class":2008},"    \u002F\u002F render()\n",[178,75986,75987],{"class":180,"line":51301},[178,75988,722],{"emptyLinePlaceholder":721},[178,75990,75991],{"class":180,"line":51306},[178,75992,75993],{"class":2008},"    \u002F\u002F 获取DOM对象\n",[178,75995,75996,75998,76000,76002,76004,76006,76008,76010],{"class":180,"line":51315},[178,75997,12982],{"class":699},[178,75999,71541],{"class":195},[178,76001,734],{"class":699},[178,76003,56117],{"class":319},[178,76005,56120],{"class":184},[178,76007,944],{"class":319},[178,76009,71552],{"class":188},[178,76011,863],{"class":319},[178,76013,76014,76016,76018,76020,76022,76024,76026,76028],{"class":180,"line":51324},[178,76015,12982],{"class":699},[178,76017,71368],{"class":195},[178,76019,734],{"class":699},[178,76021,56117],{"class":319},[178,76023,56120],{"class":184},[178,76025,944],{"class":319},[178,76027,71379],{"class":188},[178,76029,863],{"class":319},[178,76031,76032,76034,76036,76038,76040,76042,76044,76046],{"class":180,"line":51341},[178,76033,12982],{"class":699},[178,76035,17447],{"class":195},[178,76037,734],{"class":699},[178,76039,56117],{"class":319},[178,76041,56120],{"class":184},[178,76043,944],{"class":319},[178,76045,71398],{"class":188},[178,76047,863],{"class":319},[178,76049,76051,76053,76055,76057,76059,76061,76063,76065],{"class":180,"line":76050},231,[178,76052,12982],{"class":699},[178,76054,71427],{"class":195},[178,76056,734],{"class":699},[178,76058,56117],{"class":319},[178,76060,56120],{"class":184},[178,76062,944],{"class":319},[178,76064,71438],{"class":188},[178,76066,863],{"class":319},[178,76068,76070,76072,76074,76076,76078,76080,76082,76084],{"class":180,"line":76069},232,[178,76071,12982],{"class":699},[178,76073,71407],{"class":195},[178,76075,734],{"class":699},[178,76077,56117],{"class":319},[178,76079,56120],{"class":184},[178,76081,944],{"class":319},[178,76083,71418],{"class":188},[178,76085,863],{"class":319},[178,76087,76089,76091,76093,76095,76097,76099,76101,76103],{"class":180,"line":76088},233,[178,76090,12982],{"class":699},[178,76092,71447],{"class":195},[178,76094,734],{"class":699},[178,76096,56117],{"class":319},[178,76098,56120],{"class":184},[178,76100,944],{"class":319},[178,76102,71458],{"class":188},[178,76104,863],{"class":319},[178,76106,76108],{"class":180,"line":76107},234,[178,76109,722],{"emptyLinePlaceholder":721},[178,76111,76113],{"class":180,"line":76112},235,[178,76114,76115],{"class":2008},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[178,76117,76119,76121,76123,76125,76127,76129,76131,76133,76135],{"class":180,"line":76118},236,[178,76120,71559],{"class":319},[178,76122,59534],{"class":184},[178,76124,944],{"class":319},[178,76126,71566],{"class":188},[178,76128,14196],{"class":319},[178,76130,56170],{"class":699},[178,76132,3457],{"class":319},[178,76134,2024],{"class":6985},[178,76136,14203],{"class":319},[178,76138,76140],{"class":180,"line":76139},237,[178,76141,76142],{"class":2008},"      \u002F\u002F 禁止浏览器跳转\n",[178,76144,76146,76148,76150],{"class":180,"line":76145},238,[178,76147,71586],{"class":319},[178,76149,71589],{"class":184},[178,76151,3760],{"class":319},[178,76153,76155],{"class":180,"line":76154},239,[178,76156,76157],{"class":2008},"      \u002F\u002F 非空判断\n",[178,76159,76161],{"class":180,"line":76160},240,[178,76162,76163],{"class":2008},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[178,76165,76167],{"class":180,"line":76166},241,[178,76168,76169],{"class":2008},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[178,76171,76173,76175,76177,76179,76182,76184,76187,76190,76192,76194],{"class":180,"line":76172},242,[178,76174,56201],{"class":699},[178,76176,3457],{"class":319},[178,76178,2166],{"class":699},[178,76180,76181],{"class":319},"uname.value ",[178,76183,73077],{"class":699},[178,76185,76186],{"class":699}," !",[178,76188,76189],{"class":319},"age.value ",[178,76191,73077],{"class":699},[178,76193,76186],{"class":699},[178,76195,76196],{"class":319},"salary.value) {\n",[178,76198,76200,76202,76204,76206,76208],{"class":180,"line":76199},243,[178,76201,16511],{"class":699},[178,76203,71660],{"class":184},[178,76205,944],{"class":319},[178,76207,71665],{"class":188},[178,76209,863],{"class":319},[178,76211,76213],{"class":180,"line":76212},244,[178,76214,54125],{"class":319},[178,76216,76218,76220,76222],{"class":180,"line":76217},245,[178,76219,59728],{"class":319},[178,76221,53612],{"class":184},[178,76223,76224],{"class":319},"({\n",[178,76226,76228],{"class":180,"line":76227},246,[178,76229,76230],{"class":2008},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[178,76232,76234],{"class":180,"line":76233},247,[178,76235,76236],{"class":2008},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[178,76238,76240],{"class":180,"line":76239},248,[178,76241,76242],{"class":2008},"        \u002F\u002F 对象的序号应为数组长度+1\n",[178,76244,76246],{"class":180,"line":76245},249,[178,76247,76248],{"class":2008},"        \u002F\u002F unameId: arr.length + 1,\n",[178,76250,76252],{"class":180,"line":76251},250,[178,76253,722],{"emptyLinePlaceholder":721},[178,76255,76257],{"class":180,"line":76256},251,[178,76258,76259],{"class":2008},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[178,76261,76263],{"class":180,"line":76262},252,[178,76264,76265],{"class":2008},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[178,76267,76269],{"class":180,"line":76268},253,[178,76270,76271],{"class":2008},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[178,76273,76275],{"class":180,"line":76274},254,[178,76276,76277],{"class":2008},"        \u002F\u002F 0当假看\n",[178,76279,76281,76284,76286,76288,76291,76293,76295,76297,76300,76302,76304,76307,76309],{"class":180,"line":76280},255,[178,76282,76283],{"class":319},"        unameId: arr.",[178,76285,53696],{"class":195},[178,76287,75534],{"class":699},[178,76289,76290],{"class":319}," arr[arr.",[178,76292,53696],{"class":195},[178,76294,53998],{"class":699},[178,76296,26870],{"class":195},[178,76298,76299],{"class":319},"].unameId ",[178,76301,2421],{"class":699},[178,76303,26870],{"class":195},[178,76305,76306],{"class":699}," :",[178,76308,26870],{"class":195},[178,76310,33202],{"class":319},[178,76312,76314],{"class":180,"line":76313},256,[178,76315,71713],{"class":319},[178,76317,76319],{"class":180,"line":76318},257,[178,76320,71718],{"class":319},[178,76322,76324],{"class":180,"line":76323},258,[178,76325,71728],{"class":319},[178,76327,76329],{"class":180,"line":76328},259,[178,76330,71723],{"class":319},[178,76332,76334],{"class":180,"line":76333},260,[178,76335,76336],{"class":319},"        city: city.value,\n",[178,76338,76340],{"class":180,"line":76339},261,[178,76341,76342],{"class":2008},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[178,76344,76346],{"class":180,"line":76345},262,[178,76347,76348],{"class":2008},"        \u002F\u002F time: new Date().toDateString()\n",[178,76350,76352,76355,76358],{"class":180,"line":76351},263,[178,76353,76354],{"class":319},"        time: ",[178,76356,76357],{"class":184},"getTime",[178,76359,3760],{"class":319},[178,76361,76363],{"class":180,"line":76362},264,[178,76364,66535],{"class":319},[178,76366,76368],{"class":180,"line":76367},265,[178,76369,76370],{"class":2008},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[178,76372,76374,76376],{"class":180,"line":76373},266,[178,76375,71788],{"class":184},[178,76377,3760],{"class":319},[178,76379,76381,76383,76385,76387,76389],{"class":180,"line":76380},267,[178,76382,71771],{"class":195},[178,76384,2498],{"class":319},[178,76386,71776],{"class":184},[178,76388,14811],{"class":319},[178,76390,76391],{"class":2008},"\u002F\u002F重置表单\n",[178,76393,76395],{"class":180,"line":76394},268,[178,76396,76397],{"class":2008},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[178,76399,76401,76404,76406,76408,76411,76413,76415,76417,76419],{"class":180,"line":76400},269,[178,76402,76403],{"class":319},"      localStorage.",[178,76405,73374],{"class":184},[178,76407,944],{"class":319},[178,76409,76410],{"class":188},"'data'",[178,76412,14196],{"class":319},[178,76414,73384],{"class":195},[178,76416,2498],{"class":319},[178,76418,73389],{"class":184},[178,76420,76421],{"class":319},"(arr))\n",[178,76423,76425],{"class":180,"line":76424},270,[178,76426,35193],{"class":319},[178,76428,76430],{"class":180,"line":76429},271,[178,76431,722],{"emptyLinePlaceholder":721},[178,76433,76435],{"class":180,"line":76434},272,[178,76436,76437],{"class":2008},"    \u002F\u002F 3.删除业务\n",[178,76439,76441],{"class":180,"line":76440},273,[178,76442,76443],{"class":2008},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[178,76445,76447,76449,76451,76453,76455,76457,76459,76461,76463],{"class":180,"line":76446},274,[178,76448,72061],{"class":319},[178,76450,59534],{"class":184},[178,76452,944],{"class":319},[178,76454,59539],{"class":188},[178,76456,14196],{"class":319},[178,76458,56170],{"class":699},[178,76460,3457],{"class":319},[178,76462,2024],{"class":6985},[178,76464,14203],{"class":319},[178,76466,76468],{"class":180,"line":76467},275,[178,76469,76470],{"class":2008},"      \u002F\u002F 判断是否点击的是删除按钮\n",[178,76472,76474,76476,76478,76480,76482],{"class":180,"line":76473},276,[178,76475,56201],{"class":699},[178,76477,68754],{"class":319},[178,76479,56207],{"class":699},[178,76481,69976],{"class":188},[178,76483,14203],{"class":319},[178,76485,76487],{"class":180,"line":76486},277,[178,76488,76489],{"class":2008},"        \u002F\u002F alert(1)\n",[178,76491,76493],{"class":180,"line":76492},278,[178,76494,76495],{"class":2008},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[178,76497,76499],{"class":180,"line":76498},279,[178,76500,76501],{"class":2008},"        \u002F\u002F console.log(e.target)\n",[178,76503,76505],{"class":180,"line":76504},280,[178,76506,76507],{"class":2008},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[178,76509,76511],{"class":180,"line":76510},281,[178,76512,722],{"emptyLinePlaceholder":721},[178,76514,76516],{"class":180,"line":76515},282,[178,76517,76518],{"class":2008},"        \u002F\u002F 确认框，确然是否真的要删除\n",[178,76520,76522],{"class":180,"line":76521},283,[178,76523,76524],{"class":2008},"        \u002F\u002F confirm()为确认框\n",[178,76526,76528],{"class":180,"line":76527},284,[178,76529,76530],{"class":2008},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[178,76532,76534,76536,76538,76541,76543,76546],{"class":180,"line":76533},285,[178,76535,4280],{"class":699},[178,76537,3457],{"class":319},[178,76539,76540],{"class":184},"confirm",[178,76542,944],{"class":319},[178,76544,76545],{"class":188},"'您确定要删除这条数据吗？'",[178,76547,76548],{"class":319},")) {\n",[178,76550,76552,76555,76557,76559,76561],{"class":180,"line":76551},286,[178,76553,76554],{"class":319},"          arr.",[178,76556,59731],{"class":184},[178,76558,72114],{"class":319},[178,76560,1665],{"class":195},[178,76562,863],{"class":319},[178,76564,76566],{"class":180,"line":76565},287,[178,76567,76568],{"class":2008},"          \u002F\u002F 3.4 重新渲染页面\n",[178,76570,76572,76575],{"class":180,"line":76571},288,[178,76573,76574],{"class":184},"          render",[178,76576,3760],{"class":319},[178,76578,76580],{"class":180,"line":76579},289,[178,76581,76582],{"class":2008},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[178,76584,76586,76589,76591,76593,76595,76597,76599,76601,76603],{"class":180,"line":76585},290,[178,76587,76588],{"class":319},"          localStorage.",[178,76590,73374],{"class":184},[178,76592,944],{"class":319},[178,76594,76410],{"class":188},[178,76596,14196],{"class":319},[178,76598,73384],{"class":195},[178,76600,2498],{"class":319},[178,76602,73389],{"class":184},[178,76604,76421],{"class":319},[178,76606,76608],{"class":180,"line":76607},291,[178,76609,4312],{"class":319},[178,76611,76613],{"class":180,"line":76612},292,[178,76614,54125],{"class":319},[178,76616,76618],{"class":180,"line":76617},293,[178,76619,722],{"emptyLinePlaceholder":721},[178,76621,76623],{"class":180,"line":76622},294,[178,76624,35193],{"class":319},[178,76626,76628],{"class":180,"line":76627},295,[178,76629,722],{"emptyLinePlaceholder":721},[178,76631,76633,76635,76637],{"class":180,"line":76632},296,[178,76634,357],{"class":319},[178,76636,53541],{"class":323},[178,76638,336],{"class":319},[178,76640,76642,76644,76646],{"class":180,"line":76641},297,[178,76643,367],{"class":319},[178,76645,376],{"class":323},[178,76647,336],{"class":319},[178,76649,76651],{"class":180,"line":76650},298,[178,76652,722],{"emptyLinePlaceholder":721},[178,76654,76656,76658,76660],{"class":180,"line":76655},299,[178,76657,367],{"class":319},[178,76659,52367],{"class":323},[178,76661,336],{"class":319},[14,76663,76665],{"id":76664},"_36-正则表达式","3.6 正则表达式",[19,76667,76668],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,76670,76671],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,76673,76674],{},"正则表达式的作用：",[2946,76676,76677,76684,76690],{},[29,76678,76679,76680,76683],{},"表单验证（ ",[2093,76681,76682],{},"匹配"," ）",[29,76685,76686,76687,76683],{},"过滤敏感词（ ",[2093,76688,76689],{},"替换",[29,76691,76692,76693,76683],{},"字符串中提取我们想要的部分（ ",[2093,76694,76695],{},"提取",[387,76697,76699],{"id":76698},"_361-语法","3.6.1 语法",[19,76701,76702],{},"正则表达式使用步骤：",[26,76704,76705,76708],{},[29,76706,76707],{},"定义规则",[29,76709,76710],{},"查找是否匹配",[19,76712,76713],{},"正则表达式里边不需要写引号",[19,76715,76716],{},[3269,76717],{"alt":160,"src":76718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,76720,76721],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,76723,76724],{},"reg.test(str)",[19,76726,76727],{},[3269,76728],{"alt":160,"src":76729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,76731,76732],{},[3269,76733],{"alt":160,"src":76734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[387,76736,76738],{"id":76737},"_362-元字符","3.6.2 元字符",[26,76740,76741,76744,76747,76750,76757],{},[29,76742,76743],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[29,76745,76746],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[29,76748,76749],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[29,76751,76752,76753],{},"正则验证工具：",[2178,76754,76755],{"href":76755,"rel":76756},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[25619],[29,76758,76759],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[23756,76761,76763],{"id":76762},"_3621-边界符","3.6.2.1 边界符",[19,76765,76766],{},[3269,76767],{"alt":160,"src":76768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,76770,76771],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,76773,76774],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,76776,76777],{},"只匹配一次",[19,76779,76780],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[23756,76782,76784],{"id":76783},"_3622-量词","3.6.2.2 量词",[19,76786,76787],{},[3269,76788],{"alt":160,"src":76789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,76791,76792],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[23756,76794,76796],{"id":76795},"_3623-元字符","3.6.2.3 元字符",[19,76798,76799],{},[3269,76800],{"alt":160,"src":76801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,76803,76804],{},"匹配的是a或b或c []只选一个",[19,76806,76807],{},[3269,76808],{"alt":160,"src":76809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,76811,76812],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,76814,76815],{},[3269,76816],{"alt":160,"src":76817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,76819,76820],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,76822,76823],{},[3269,76824],{"alt":160,"src":76825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[154,76827,76829],{"className":52365,"code":76828,"language":52367,"meta":160,"style":160},"\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",[70,76830,76831,76841,76855,76859,76867,76881,76901,76913,76921,76925,76933,76941,76946,76977,77004,77032,77036,77041,77069,77100,77105,77110,77141,77173,77205,77209,77214,77245,77275,77305,77309,77314,77345,77376,77406,77436,77440,77445,77478,77482,77487,77518,77549,77553,77558,77589,77619,77650,77654,77659,77691,77722,77753,77780,77811,77843,77876,77907,77938,77970,78001,78009,78017,78021],{"__ignoreMap":160},[178,76832,76833,76835,76837,76839],{"class":180,"line":181},[178,76834,53029],{"class":319},[178,76836,53032],{"class":323},[178,76838,53035],{"class":184},[178,76840,336],{"class":319},[178,76842,76843,76845,76847,76849,76851,76853],{"class":180,"line":263},[178,76844,320],{"class":319},[178,76846,52367],{"class":323},[178,76848,53046],{"class":184},[178,76850,330],{"class":319},[178,76852,53051],{"class":188},[178,76854,336],{"class":319},[178,76856,76857],{"class":180,"line":274},[178,76858,722],{"emptyLinePlaceholder":721},[178,76860,76861,76863,76865],{"class":180,"line":354},[178,76862,320],{"class":319},[178,76864,53064],{"class":323},[178,76866,336],{"class":319},[178,76868,76869,76871,76873,76875,76877,76879],{"class":180,"line":364},[178,76870,341],{"class":319},[178,76872,53074],{"class":323},[178,76874,53077],{"class":184},[178,76876,330],{"class":319},[178,76878,53082],{"class":188},[178,76880,336],{"class":319},[178,76882,76883,76885,76887,76889,76891,76893,76895,76897,76899],{"class":180,"line":740},[178,76884,341],{"class":319},[178,76886,53074],{"class":323},[178,76888,426],{"class":184},[178,76890,330],{"class":319},[178,76892,53121],{"class":188},[178,76894,53101],{"class":184},[178,76896,330],{"class":319},[178,76898,53128],{"class":188},[178,76900,336],{"class":319},[178,76902,76903,76905,76907,76909,76911],{"class":180,"line":746},[178,76904,341],{"class":319},[178,76906,53137],{"class":323},[178,76908,53140],{"class":319},[178,76910,53137],{"class":323},[178,76912,336],{"class":319},[178,76914,76915,76917,76919],{"class":180,"line":752},[178,76916,367],{"class":319},[178,76918,53064],{"class":323},[178,76920,336],{"class":319},[178,76922,76923],{"class":180,"line":757},[178,76924,722],{"emptyLinePlaceholder":721},[178,76926,76927,76929,76931],{"class":180,"line":763},[178,76928,320],{"class":319},[178,76930,376],{"class":323},[178,76932,336],{"class":319},[178,76934,76935,76937,76939],{"class":180,"line":769},[178,76936,341],{"class":319},[178,76938,53541],{"class":323},[178,76940,336],{"class":319},[178,76942,76943],{"class":180,"line":774},[178,76944,76945],{"class":2008},"    \u002F\u002F 元字符中\n",[178,76947,76948,76950,76952,76954,76956,76959,76961,76963,76966,76968,76971,76974],{"class":180,"line":780},[178,76949,75473],{"class":319},[178,76951,59968],{"class":184},[178,76953,944],{"class":319},[178,76955,2524],{"class":188},[178,76957,76958],{"class":49709},"哈",[178,76960,2524],{"class":188},[178,76962,2498],{"class":319},[178,76964,76965],{"class":184},"test",[178,76967,944],{"class":319},[178,76969,76970],{"class":188},"'哈'",[178,76972,76973],{"class":319},"))  ",[178,76975,76976],{"class":2008},"\u002F\u002Ftrue\n",[178,76978,76979,76981,76983,76985,76987,76989,76991,76993,76995,76997,77000,77002],{"class":180,"line":786},[178,76980,75473],{"class":319},[178,76982,59968],{"class":184},[178,76984,944],{"class":319},[178,76986,2524],{"class":188},[178,76988,76958],{"class":49709},[178,76990,2524],{"class":188},[178,76992,2498],{"class":319},[178,76994,76965],{"class":184},[178,76996,944],{"class":319},[178,76998,76999],{"class":188},"'哈哈'",[178,77001,76973],{"class":319},[178,77003,76976],{"class":2008},[178,77005,77006,77008,77010,77012,77014,77016,77018,77020,77022,77024,77027,77030],{"class":180,"line":792},[178,77007,75473],{"class":319},[178,77009,59968],{"class":184},[178,77011,944],{"class":319},[178,77013,2524],{"class":188},[178,77015,76958],{"class":49709},[178,77017,2524],{"class":188},[178,77019,2498],{"class":319},[178,77021,76965],{"class":184},[178,77023,944],{"class":319},[178,77025,77026],{"class":188},"'二哈'",[178,77028,77029],{"class":319},"))   ",[178,77031,76976],{"class":2008},[178,77033,77034],{"class":180,"line":798},[178,77035,722],{"emptyLinePlaceholder":721},[178,77037,77038],{"class":180,"line":804},[178,77039,77040],{"class":2008},"    \u002F\u002F 1.边界符\n",[178,77042,77043,77045,77047,77049,77051,77053,77055,77057,77059,77061,77063,77065,77067],{"class":180,"line":810},[178,77044,75473],{"class":319},[178,77046,59968],{"class":184},[178,77048,944],{"class":319},[178,77050,2524],{"class":188},[178,77052,2905],{"class":699},[178,77054,76958],{"class":49709},[178,77056,2524],{"class":188},[178,77058,2498],{"class":319},[178,77060,76965],{"class":184},[178,77062,944],{"class":319},[178,77064,76970],{"class":188},[178,77066,76973],{"class":319},[178,77068,76976],{"class":2008},[178,77070,77071,77073,77075,77077,77079,77081,77083,77085,77087,77089,77091,77093,77095,77097],{"class":180,"line":816},[178,77072,75473],{"class":319},[178,77074,59968],{"class":184},[178,77076,944],{"class":319},[178,77078,2524],{"class":188},[178,77080,2905],{"class":699},[178,77082,76958],{"class":49709},[178,77084,2242],{"class":699},[178,77086,2524],{"class":188},[178,77088,2498],{"class":319},[178,77090,76965],{"class":184},[178,77092,944],{"class":319},[178,77094,76999],{"class":188},[178,77096,76973],{"class":319},[178,77098,77099],{"class":2008},"\u002F\u002Ffalse\n",[178,77101,77102],{"class":180,"line":822},[178,77103,77104],{"class":2008},"    \u002F\u002F 2.量词\n",[178,77106,77107],{"class":180,"line":827},[178,77108,77109],{"class":2008},"    \u002F\u002F 量词 * 类似于 >= 0\n",[178,77111,77112,77114,77116,77118,77120,77122,77124,77127,77129,77131,77133,77135,77137,77139],{"class":180,"line":832},[178,77113,75473],{"class":319},[178,77115,59968],{"class":184},[178,77117,944],{"class":319},[178,77119,2524],{"class":188},[178,77121,2905],{"class":699},[178,77123,76958],{"class":49709},[178,77125,77126],{"class":699},"*$",[178,77128,2524],{"class":188},[178,77130,2498],{"class":319},[178,77132,76965],{"class":184},[178,77134,944],{"class":319},[178,77136,76999],{"class":188},[178,77138,76973],{"class":319},[178,77140,76976],{"class":2008},[178,77142,77143,77145,77147,77149,77151,77153,77155,77157,77159,77161,77163,77165,77168,77170],{"class":180,"line":850},[178,77144,75473],{"class":319},[178,77146,59968],{"class":184},[178,77148,944],{"class":319},[178,77150,2524],{"class":188},[178,77152,2905],{"class":699},[178,77154,76958],{"class":49709},[178,77156,77126],{"class":699},[178,77158,2524],{"class":188},[178,77160,2498],{"class":319},[178,77162,76965],{"class":184},[178,77164,944],{"class":319},[178,77166,77167],{"class":188},"'二哈好傻'",[178,77169,76973],{"class":319},[178,77171,77172],{"class":2008},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[178,77174,77175,77177,77179,77181,77183,77185,77187,77189,77191,77193,77195,77197,77200,77202],{"class":180,"line":866},[178,77176,75473],{"class":319},[178,77178,59968],{"class":184},[178,77180,944],{"class":319},[178,77182,2524],{"class":188},[178,77184,2905],{"class":699},[178,77186,76958],{"class":49709},[178,77188,77126],{"class":699},[178,77190,2524],{"class":188},[178,77192,2498],{"class":319},[178,77194,76965],{"class":184},[178,77196,944],{"class":319},[178,77198,77199],{"class":188},"'哈好哈'",[178,77201,77029],{"class":319},[178,77203,77204],{"class":2008},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[178,77206,77207],{"class":180,"line":877},[178,77208,722],{"emptyLinePlaceholder":721},[178,77210,77211],{"class":180,"line":882},[178,77212,77213],{"class":2008},"    \u002F\u002F +类似于>=1\n",[178,77215,77216,77218,77220,77222,77224,77226,77228,77231,77233,77235,77237,77239,77241,77243],{"class":180,"line":898},[178,77217,75473],{"class":319},[178,77219,59968],{"class":184},[178,77221,944],{"class":319},[178,77223,2524],{"class":188},[178,77225,2905],{"class":699},[178,77227,76958],{"class":49709},[178,77229,77230],{"class":699},"+$",[178,77232,2524],{"class":188},[178,77234,2498],{"class":319},[178,77236,76965],{"class":184},[178,77238,944],{"class":319},[178,77240,76999],{"class":188},[178,77242,76973],{"class":319},[178,77244,76976],{"class":2008},[178,77246,77247,77249,77251,77253,77255,77257,77259,77261,77263,77265,77267,77269,77271,77273],{"class":180,"line":914},[178,77248,75473],{"class":319},[178,77250,59968],{"class":184},[178,77252,944],{"class":319},[178,77254,2524],{"class":188},[178,77256,2905],{"class":699},[178,77258,76958],{"class":49709},[178,77260,77230],{"class":699},[178,77262,2524],{"class":188},[178,77264,2498],{"class":319},[178,77266,76965],{"class":184},[178,77268,944],{"class":319},[178,77270,77167],{"class":188},[178,77272,76973],{"class":319},[178,77274,77172],{"class":2008},[178,77276,77277,77279,77281,77283,77285,77287,77289,77291,77293,77295,77297,77299,77301,77303],{"class":180,"line":919},[178,77278,75473],{"class":319},[178,77280,59968],{"class":184},[178,77282,944],{"class":319},[178,77284,2524],{"class":188},[178,77286,2905],{"class":699},[178,77288,76958],{"class":49709},[178,77290,77230],{"class":699},[178,77292,2524],{"class":188},[178,77294,2498],{"class":319},[178,77296,76965],{"class":184},[178,77298,944],{"class":319},[178,77300,77199],{"class":188},[178,77302,77029],{"class":319},[178,77304,77099],{"class":2008},[178,77306,77307],{"class":180,"line":935},[178,77308,722],{"emptyLinePlaceholder":721},[178,77310,77311],{"class":180,"line":952},[178,77312,77313],{"class":2008},"    \u002F\u002F ?类似于0次或一次\n",[178,77315,77316,77318,77320,77322,77324,77326,77329,77331,77333,77335,77337,77339,77341,77343],{"class":180,"line":966},[178,77317,75473],{"class":319},[178,77319,59968],{"class":184},[178,77321,944],{"class":319},[178,77323,2524],{"class":188},[178,77325,2905],{"class":699},[178,77327,77328],{"class":49709},"哈？",[178,77330,2242],{"class":699},[178,77332,2524],{"class":188},[178,77334,2498],{"class":319},[178,77336,76965],{"class":184},[178,77338,944],{"class":319},[178,77340,75948],{"class":188},[178,77342,77029],{"class":319},[178,77344,76976],{"class":2008},[178,77346,77347,77349,77351,77353,77355,77357,77359,77362,77364,77366,77368,77370,77372,77374],{"class":180,"line":980},[178,77348,75473],{"class":319},[178,77350,59968],{"class":184},[178,77352,944],{"class":319},[178,77354,2524],{"class":188},[178,77356,2905],{"class":699},[178,77358,76958],{"class":49709},[178,77360,77361],{"class":699},"?$",[178,77363,2524],{"class":188},[178,77365,2498],{"class":319},[178,77367,76965],{"class":184},[178,77369,944],{"class":319},[178,77371,76999],{"class":188},[178,77373,76973],{"class":319},[178,77375,77099],{"class":2008},[178,77377,77378,77380,77382,77384,77386,77388,77390,77392,77394,77396,77398,77400,77402,77404],{"class":180,"line":985},[178,77379,75473],{"class":319},[178,77381,59968],{"class":184},[178,77383,944],{"class":319},[178,77385,2524],{"class":188},[178,77387,2905],{"class":699},[178,77389,76958],{"class":49709},[178,77391,77361],{"class":699},[178,77393,2524],{"class":188},[178,77395,2498],{"class":319},[178,77397,76965],{"class":184},[178,77399,944],{"class":319},[178,77401,77167],{"class":188},[178,77403,76973],{"class":319},[178,77405,77172],{"class":2008},[178,77407,77408,77410,77412,77414,77416,77418,77420,77422,77424,77426,77428,77430,77432,77434],{"class":180,"line":1008},[178,77409,75473],{"class":319},[178,77411,59968],{"class":184},[178,77413,944],{"class":319},[178,77415,2524],{"class":188},[178,77417,2905],{"class":699},[178,77419,76958],{"class":49709},[178,77421,77361],{"class":699},[178,77423,2524],{"class":188},[178,77425,2498],{"class":319},[178,77427,76965],{"class":184},[178,77429,944],{"class":319},[178,77431,77199],{"class":188},[178,77433,76973],{"class":319},[178,77435,77099],{"class":2008},[178,77437,77438],{"class":180,"line":1014},[178,77439,722],{"emptyLinePlaceholder":721},[178,77441,77442],{"class":180,"line":1019},[178,77443,77444],{"class":2008},"    \u002F\u002F {n}写几，就必须出现几次\n",[178,77446,77447,77449,77451,77453,77455,77457,77459,77462,77464,77466,77468,77470,77473,77476],{"class":180,"line":1033},[178,77448,75473],{"class":319},[178,77450,59968],{"class":184},[178,77452,944],{"class":319},[178,77454,2524],{"class":188},[178,77456,2905],{"class":699},[178,77458,76958],{"class":49709},[178,77460,77461],{"class":699},"{4}$",[178,77463,2524],{"class":188},[178,77465,2498],{"class":319},[178,77467,76965],{"class":184},[178,77469,944],{"class":319},[178,77471,77472],{"class":188},"'哈哈哈哈'",[178,77474,77475],{"class":319},")) ",[178,77477,76976],{"class":2008},[178,77479,77480],{"class":180,"line":1046},[178,77481,722],{"emptyLinePlaceholder":721},[178,77483,77484],{"class":180,"line":1059},[178,77485,77486],{"class":2008},"    \u002F\u002F {n,}大于等于n次\n",[178,77488,77489,77491,77493,77495,77497,77499,77501,77504,77506,77508,77510,77512,77514,77516],{"class":180,"line":1072},[178,77490,75473],{"class":319},[178,77492,59968],{"class":184},[178,77494,944],{"class":319},[178,77496,2524],{"class":188},[178,77498,2905],{"class":699},[178,77500,76958],{"class":49709},[178,77502,77503],{"class":699},"{4,}$",[178,77505,2524],{"class":188},[178,77507,2498],{"class":319},[178,77509,76965],{"class":184},[178,77511,944],{"class":319},[178,77513,77472],{"class":188},[178,77515,77475],{"class":319},[178,77517,76976],{"class":2008},[178,77519,77520,77522,77524,77526,77528,77530,77532,77534,77536,77538,77540,77542,77545,77547],{"class":180,"line":1077},[178,77521,75473],{"class":319},[178,77523,59968],{"class":184},[178,77525,944],{"class":319},[178,77527,2524],{"class":188},[178,77529,2905],{"class":699},[178,77531,76958],{"class":49709},[178,77533,77503],{"class":699},[178,77535,2524],{"class":188},[178,77537,2498],{"class":319},[178,77539,76965],{"class":184},[178,77541,944],{"class":319},[178,77543,77544],{"class":188},"'哈哈哈哈哈'",[178,77546,77475],{"class":319},[178,77548,76976],{"class":2008},[178,77550,77551],{"class":180,"line":1082},[178,77552,722],{"emptyLinePlaceholder":721},[178,77554,77555],{"class":180,"line":1099},[178,77556,77557],{"class":2008},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[178,77559,77560,77562,77564,77566,77568,77570,77572,77575,77577,77579,77581,77583,77585,77587],{"class":180,"line":9806},[178,77561,75473],{"class":319},[178,77563,59968],{"class":184},[178,77565,944],{"class":319},[178,77567,2524],{"class":188},[178,77569,2905],{"class":699},[178,77571,76958],{"class":49709},[178,77573,77574],{"class":699},"{4,6}$",[178,77576,2524],{"class":188},[178,77578,2498],{"class":319},[178,77580,76965],{"class":184},[178,77582,944],{"class":319},[178,77584,77472],{"class":188},[178,77586,77475],{"class":319},[178,77588,76976],{"class":2008},[178,77590,77591,77593,77595,77597,77599,77601,77603,77605,77607,77609,77611,77613,77615,77617],{"class":180,"line":9818},[178,77592,75473],{"class":319},[178,77594,59968],{"class":184},[178,77596,944],{"class":319},[178,77598,2524],{"class":188},[178,77600,2905],{"class":699},[178,77602,76958],{"class":49709},[178,77604,77574],{"class":699},[178,77606,2524],{"class":188},[178,77608,2498],{"class":319},[178,77610,76965],{"class":184},[178,77612,944],{"class":319},[178,77614,77544],{"class":188},[178,77616,77475],{"class":319},[178,77618,76976],{"class":2008},[178,77620,77621,77623,77625,77627,77629,77631,77633,77635,77637,77639,77641,77643,77646,77648],{"class":180,"line":11477},[178,77622,75473],{"class":319},[178,77624,59968],{"class":184},[178,77626,944],{"class":319},[178,77628,2524],{"class":188},[178,77630,2905],{"class":699},[178,77632,76958],{"class":49709},[178,77634,77574],{"class":699},[178,77636,2524],{"class":188},[178,77638,2498],{"class":319},[178,77640,76965],{"class":184},[178,77642,944],{"class":319},[178,77644,77645],{"class":188},"'哈哈哈哈哈哈哈'",[178,77647,77475],{"class":319},[178,77649,77099],{"class":2008},[178,77651,77652],{"class":180,"line":11502},[178,77653,722],{"emptyLinePlaceholder":721},[178,77655,77656],{"class":180,"line":11525},[178,77657,77658],{"class":2008},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[178,77660,77661,77663,77665,77667,77669,77671,77674,77676,77678,77680,77682,77684,77687,77689],{"class":180,"line":11549},[178,77662,75473],{"class":319},[178,77664,59968],{"class":184},[178,77666,944],{"class":319},[178,77668,2524],{"class":188},[178,77670,2905],{"class":699},[178,77672,77673],{"class":195},"[abc]",[178,77675,2242],{"class":699},[178,77677,2524],{"class":188},[178,77679,2498],{"class":319},[178,77681,76965],{"class":184},[178,77683,944],{"class":319},[178,77685,77686],{"class":188},"'a'",[178,77688,76973],{"class":319},[178,77690,76976],{"class":2008},[178,77692,77693,77695,77697,77699,77701,77703,77705,77707,77709,77711,77713,77715,77718,77720],{"class":180,"line":11554},[178,77694,75473],{"class":319},[178,77696,59968],{"class":184},[178,77698,944],{"class":319},[178,77700,2524],{"class":188},[178,77702,2905],{"class":699},[178,77704,77673],{"class":195},[178,77706,2242],{"class":699},[178,77708,2524],{"class":188},[178,77710,2498],{"class":319},[178,77712,76965],{"class":184},[178,77714,944],{"class":319},[178,77716,77717],{"class":188},"'b'",[178,77719,76973],{"class":319},[178,77721,76976],{"class":2008},[178,77723,77724,77726,77728,77730,77732,77734,77736,77738,77740,77742,77744,77746,77749,77751],{"class":180,"line":11559},[178,77725,75473],{"class":319},[178,77727,59968],{"class":184},[178,77729,944],{"class":319},[178,77731,2524],{"class":188},[178,77733,2905],{"class":699},[178,77735,77673],{"class":195},[178,77737,2242],{"class":699},[178,77739,2524],{"class":188},[178,77741,2498],{"class":319},[178,77743,76965],{"class":184},[178,77745,944],{"class":319},[178,77747,77748],{"class":188},"'c'",[178,77750,76973],{"class":319},[178,77752,76976],{"class":2008},[178,77754,77755,77757,77759,77761,77763,77765,77767,77769,77771,77773,77776,77778],{"class":180,"line":11564},[178,77756,75473],{"class":319},[178,77758,59968],{"class":184},[178,77760,944],{"class":319},[178,77762,2524],{"class":188},[178,77764,77673],{"class":195},[178,77766,2524],{"class":188},[178,77768,2498],{"class":319},[178,77770,76965],{"class":184},[178,77772,944],{"class":319},[178,77774,77775],{"class":188},"'ab'",[178,77777,76973],{"class":319},[178,77779,76976],{"class":2008},[178,77781,77782,77784,77786,77788,77790,77792,77794,77796,77798,77800,77802,77804,77806,77808],{"class":180,"line":11573},[178,77783,75473],{"class":319},[178,77785,59968],{"class":184},[178,77787,944],{"class":319},[178,77789,2524],{"class":188},[178,77791,2905],{"class":699},[178,77793,77673],{"class":195},[178,77795,2242],{"class":699},[178,77797,2524],{"class":188},[178,77799,2498],{"class":319},[178,77801,76965],{"class":184},[178,77803,944],{"class":319},[178,77805,77775],{"class":188},[178,77807,76973],{"class":319},[178,77809,77810],{"class":2008},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[178,77812,77813,77815,77817,77819,77821,77823,77825,77828,77830,77832,77834,77836,77838,77840],{"class":180,"line":11578},[178,77814,75473],{"class":319},[178,77816,59968],{"class":184},[178,77818,944],{"class":319},[178,77820,2524],{"class":188},[178,77822,2905],{"class":699},[178,77824,77673],{"class":195},[178,77826,77827],{"class":699},"{2}$",[178,77829,2524],{"class":188},[178,77831,2498],{"class":319},[178,77833,76965],{"class":184},[178,77835,944],{"class":319},[178,77837,77775],{"class":188},[178,77839,76973],{"class":319},[178,77841,77842],{"class":2008},"\u002F\u002Ftrue   可以选两个\n",[178,77844,77845,77847,77849,77851,77853,77855,77858,77860,77862,77864,77866,77868,77871,77873],{"class":180,"line":11584},[178,77846,75473],{"class":319},[178,77848,59968],{"class":184},[178,77850,944],{"class":319},[178,77852,2524],{"class":188},[178,77854,2905],{"class":699},[178,77856,77857],{"class":195},"[a-z]",[178,77859,2242],{"class":699},[178,77861,2524],{"class":188},[178,77863,2498],{"class":319},[178,77865,76965],{"class":184},[178,77867,944],{"class":319},[178,77869,77870],{"class":188},"'p'",[178,77872,77029],{"class":319},[178,77874,77875],{"class":2008},"\u002F\u002Ftrue   依然只能选一个\n",[178,77877,77878,77880,77882,77884,77886,77888,77891,77893,77895,77897,77899,77901,77903,77905],{"class":180,"line":11605},[178,77879,75473],{"class":319},[178,77881,59968],{"class":184},[178,77883,944],{"class":319},[178,77885,2524],{"class":188},[178,77887,2905],{"class":699},[178,77889,77890],{"class":195},"[A-Z]",[178,77892,2242],{"class":699},[178,77894,2524],{"class":188},[178,77896,2498],{"class":319},[178,77898,76965],{"class":184},[178,77900,944],{"class":319},[178,77902,77870],{"class":188},[178,77904,77029],{"class":319},[178,77906,77099],{"class":2008},[178,77908,77909,77911,77913,77915,77917,77919,77921,77923,77925,77927,77929,77931,77934,77936],{"class":180,"line":11611},[178,77910,75473],{"class":319},[178,77912,59968],{"class":184},[178,77914,944],{"class":319},[178,77916,2524],{"class":188},[178,77918,2905],{"class":699},[178,77920,77890],{"class":195},[178,77922,2242],{"class":699},[178,77924,2524],{"class":188},[178,77926,2498],{"class":319},[178,77928,76965],{"class":184},[178,77930,944],{"class":319},[178,77932,77933],{"class":188},"'P'",[178,77935,77029],{"class":319},[178,77937,76976],{"class":2008},[178,77939,77940,77942,77944,77946,77948,77950,77953,77955,77957,77959,77961,77963,77966,77968],{"class":180,"line":11625},[178,77941,75473],{"class":319},[178,77943,59968],{"class":184},[178,77945,944],{"class":319},[178,77947,2524],{"class":188},[178,77949,2905],{"class":699},[178,77951,77952],{"class":195},"[0-9]",[178,77954,2242],{"class":699},[178,77956,2524],{"class":188},[178,77958,2498],{"class":319},[178,77960,76965],{"class":184},[178,77962,944],{"class":319},[178,77964,77965],{"class":188},"'0'",[178,77967,77029],{"class":319},[178,77969,76976],{"class":2008},[178,77971,77972,77974,77976,77978,77980,77982,77985,77987,77989,77991,77993,77995,77997,77999],{"class":180,"line":11631},[178,77973,75473],{"class":319},[178,77975,59968],{"class":184},[178,77977,944],{"class":319},[178,77979,2524],{"class":188},[178,77981,2905],{"class":699},[178,77983,77984],{"class":195},"[a-zA-Z0-9]",[178,77986,2242],{"class":699},[178,77988,2524],{"class":188},[178,77990,2498],{"class":319},[178,77992,76965],{"class":184},[178,77994,944],{"class":319},[178,77996,77870],{"class":188},[178,77998,76973],{"class":319},[178,78000,76976],{"class":2008},[178,78002,78003,78005,78007],{"class":180,"line":11658},[178,78004,357],{"class":319},[178,78006,53541],{"class":323},[178,78008,336],{"class":319},[178,78010,78011,78013,78015],{"class":180,"line":11667},[178,78012,367],{"class":319},[178,78014,376],{"class":323},[178,78016,336],{"class":319},[178,78018,78019],{"class":180,"line":11673},[178,78020,722],{"emptyLinePlaceholder":721},[178,78022,78023,78025,78027],{"class":180,"line":11681},[178,78024,367],{"class":319},[178,78026,52367],{"class":323},[178,78028,336],{"class":319},[23756,78030,78032],{"id":78031},"_3624-修饰符","3.6.2.4 修饰符",[19,78034,78035],{},[3269,78036],{"alt":160,"src":78037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,78039,78040],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,78042,78043],{},[3269,78044],{"alt":160,"src":78045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[154,78047,78049],{"className":52365,"code":78048,"language":52367,"meta":160,"style":160},"\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",[70,78050,78051,78061,78075,78083,78097,78117,78129,78137,78145,78153,78185,78216,78221,78253,78264,78297,78306,78314,78322],{"__ignoreMap":160},[178,78052,78053,78055,78057,78059],{"class":180,"line":181},[178,78054,53029],{"class":319},[178,78056,53032],{"class":323},[178,78058,53035],{"class":184},[178,78060,336],{"class":319},[178,78062,78063,78065,78067,78069,78071,78073],{"class":180,"line":263},[178,78064,320],{"class":319},[178,78066,52367],{"class":323},[178,78068,53046],{"class":184},[178,78070,330],{"class":319},[178,78072,53051],{"class":188},[178,78074,336],{"class":319},[178,78076,78077,78079,78081],{"class":180,"line":274},[178,78078,320],{"class":319},[178,78080,53064],{"class":323},[178,78082,336],{"class":319},[178,78084,78085,78087,78089,78091,78093,78095],{"class":180,"line":354},[178,78086,341],{"class":319},[178,78088,53074],{"class":323},[178,78090,53077],{"class":184},[178,78092,330],{"class":319},[178,78094,53082],{"class":188},[178,78096,336],{"class":319},[178,78098,78099,78101,78103,78105,78107,78109,78111,78113,78115],{"class":180,"line":364},[178,78100,341],{"class":319},[178,78102,53074],{"class":323},[178,78104,426],{"class":184},[178,78106,330],{"class":319},[178,78108,53121],{"class":188},[178,78110,53101],{"class":184},[178,78112,330],{"class":319},[178,78114,53128],{"class":188},[178,78116,336],{"class":319},[178,78118,78119,78121,78123,78125,78127],{"class":180,"line":740},[178,78120,341],{"class":319},[178,78122,53137],{"class":323},[178,78124,53140],{"class":319},[178,78126,53137],{"class":323},[178,78128,336],{"class":319},[178,78130,78131,78133,78135],{"class":180,"line":746},[178,78132,367],{"class":319},[178,78134,53064],{"class":323},[178,78136,336],{"class":319},[178,78138,78139,78141,78143],{"class":180,"line":752},[178,78140,320],{"class":319},[178,78142,376],{"class":323},[178,78144,336],{"class":319},[178,78146,78147,78149,78151],{"class":180,"line":757},[178,78148,341],{"class":319},[178,78150,53541],{"class":323},[178,78152,336],{"class":319},[178,78154,78155,78157,78159,78161,78163,78165,78168,78170,78172,78174,78176,78178,78181,78183],{"class":180,"line":763},[178,78156,75473],{"class":319},[178,78158,59968],{"class":184},[178,78160,944],{"class":319},[178,78162,2524],{"class":188},[178,78164,2905],{"class":699},[178,78166,78167],{"class":49709},"java",[178,78169,2242],{"class":699},[178,78171,2524],{"class":188},[178,78173,2498],{"class":319},[178,78175,76965],{"class":184},[178,78177,944],{"class":319},[178,78179,78180],{"class":188},"'java'",[178,78182,77475],{"class":319},[178,78184,76976],{"class":2008},[178,78186,78187,78189,78191,78193,78195,78197,78199,78201,78203,78205,78207,78209,78212,78214],{"class":180,"line":769},[178,78188,75473],{"class":319},[178,78190,59968],{"class":184},[178,78192,944],{"class":319},[178,78194,2524],{"class":188},[178,78196,2905],{"class":699},[178,78198,78167],{"class":49709},[178,78200,2242],{"class":699},[178,78202,2524],{"class":188},[178,78204,2498],{"class":319},[178,78206,76965],{"class":184},[178,78208,944],{"class":319},[178,78210,78211],{"class":188},"'Java'",[178,78213,77475],{"class":319},[178,78215,77099],{"class":2008},[178,78217,78218],{"class":180,"line":774},[178,78219,78220],{"class":2008},"    \u002F\u002F 不区分大小写、\n",[178,78222,78223,78225,78227,78229,78231,78233,78235,78237,78239,78241,78243,78245,78247,78249,78251],{"class":180,"line":780},[178,78224,75473],{"class":319},[178,78226,59968],{"class":184},[178,78228,944],{"class":319},[178,78230,2524],{"class":188},[178,78232,2905],{"class":699},[178,78234,78167],{"class":49709},[178,78236,2242],{"class":699},[178,78238,2524],{"class":188},[178,78240,2381],{"class":699},[178,78242,2498],{"class":319},[178,78244,76965],{"class":184},[178,78246,944],{"class":319},[178,78248,78211],{"class":188},[178,78250,77475],{"class":319},[178,78252,76976],{"class":2008},[178,78254,78255,78257,78259,78261],{"class":180,"line":786},[178,78256,12982],{"class":699},[178,78258,75639],{"class":195},[178,78260,734],{"class":699},[178,78262,78263],{"class":188}," 'java是一门编程语言，学完java工资很高'\n",[178,78265,78266,78268,78271,78273,78276,78279,78281,78283,78285,78287,78290,78292,78295],{"class":180,"line":792},[178,78267,12982],{"class":699},[178,78269,78270],{"class":195}," result",[178,78272,734],{"class":699},[178,78274,78275],{"class":319}," str.",[178,78277,78278],{"class":184},"replace",[178,78280,944],{"class":319},[178,78282,2524],{"class":188},[178,78284,78167],{"class":49709},[178,78286,2524],{"class":188},[178,78288,78289],{"class":699},"ig",[178,78291,14196],{"class":319},[178,78293,78294],{"class":188},"'前端'",[178,78296,863],{"class":319},[178,78298,78299,78301,78303],{"class":180,"line":798},[178,78300,75473],{"class":319},[178,78302,59968],{"class":184},[178,78304,78305],{"class":319},"(result)\n",[178,78307,78308,78310,78312],{"class":180,"line":804},[178,78309,357],{"class":319},[178,78311,53541],{"class":323},[178,78313,336],{"class":319},[178,78315,78316,78318,78320],{"class":180,"line":810},[178,78317,367],{"class":319},[178,78319,376],{"class":323},[178,78321,336],{"class":319},[178,78323,78324,78326,78328],{"class":180,"line":816},[178,78325,367],{"class":319},[178,78327,52367],{"class":323},[178,78329,336],{"class":319},[1853,78331,78332],{},"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":160,"searchDepth":263,"depth":263,"links":78334},[78335,78345,78357,78374,78381,78389],{"id":55084,"depth":263,"text":55085,"children":78336},[78337,78338,78339,78340,78341,78342,78343,78344],{"id":55088,"depth":274,"text":55089},{"id":55121,"depth":274,"text":55122},{"id":55160,"depth":274,"text":55161},{"id":55317,"depth":274,"text":55318},{"id":55365,"depth":274,"text":55366},{"id":55501,"depth":274,"text":55502},{"id":55822,"depth":274,"text":55823},{"id":58810,"depth":274,"text":58811},{"id":58838,"depth":263,"text":58839,"children":78346},[78347,78348,78349,78350,78351,78352,78353,78354,78355,78356],{"id":58842,"depth":274,"text":58843},{"id":58865,"depth":274,"text":58866},{"id":59780,"depth":274,"text":59781},{"id":60470,"depth":274,"text":60471},{"id":60752,"depth":274,"text":60753},{"id":64912,"depth":274,"text":64913},{"id":65082,"depth":274,"text":65083},{"id":65210,"depth":274,"text":65211},{"id":65235,"depth":274,"text":65236},{"id":66624,"depth":274,"text":66625},{"id":67777,"depth":263,"text":67778,"children":78358},[78359,78360,78361,78362,78363,78364,78365,78366,78367,78368,78369,78370,78371,78372,78373],{"id":67781,"depth":274,"text":67782},{"id":68435,"depth":274,"text":68436},{"id":70130,"depth":274,"text":70131},{"id":70171,"depth":274,"text":70172},{"id":70213,"depth":274,"text":70214},{"id":70227,"depth":274,"text":70228},{"id":70276,"depth":274,"text":70277},{"id":70288,"depth":274,"text":70289},{"id":70303,"depth":274,"text":70304},{"id":70339,"depth":274,"text":70340},{"id":70420,"depth":274,"text":70421},{"id":70548,"depth":274,"text":70549},{"id":70560,"depth":274,"text":70561},{"id":70579,"depth":274,"text":70580},{"id":72690,"depth":274,"text":72691},{"id":72709,"depth":263,"text":72710,"children":78375},[78376,78377,78378,78379,78380],{"id":72730,"depth":274,"text":72731},{"id":72750,"depth":274,"text":72751},{"id":72799,"depth":274,"text":72800},{"id":72924,"depth":274,"text":72925},{"id":73105,"depth":274,"text":73106},{"id":73123,"depth":263,"text":73124,"children":78382},[78383,78384,78385,78386,78387,78388],{"id":73138,"depth":274,"text":73139},{"id":73197,"depth":274,"text":73198},{"id":73221,"depth":274,"text":73222},{"id":73541,"depth":274,"text":73542},{"id":73573,"depth":274,"text":73574},{"id":73596,"depth":274,"text":73597},{"id":76664,"depth":263,"text":76665,"children":78390},[78391,78392],{"id":76698,"depth":274,"text":76699},{"id":76737,"depth":274,"text":76738},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55056,"description":25135},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78399,"title":78400,"body":78401,"description":25135,"extension":1880,"meta":94533,"navigation":721,"path":94534,"seo":94535,"stem":94536,"__hash__":94537},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78402,"toc":94469},[78403,78406,78409,78413,78417,78422,78427,78438,78442,78447,78450,78454,78457,78462,78466,78470,78473,78478,78481,78485,78488,78496,78499,78503,78508,78513,78516,78520,78525,78530,78533,78537,78542,78545,78550,78553,78558,78561,78566,78571,78574,78577,78581,78586,78591,78594,78598,78602,78605,78608,78611,78615,78619,78624,78629,78632,78636,78641,78646,78649,78652,78655,78658,78661,78664,78667,78670,78673,78678,78682,78687,78692,78695,78698,78701,78704,78707,78710,78713,78716,78720,78724,78727,78730,78733,78738,78740,78743,78746,78749,78752,78755,78758,78761,78764,78767,78770,78773,78776,78779,78784,78789,78794,78797,78801,78804,78809,78813,78815,78826,78831,78932,78935,78938,78941,78944,78947,78950,78953,78956,78958,78961,78964,78967,78970,78973,78975,78978,78981,78984,78987,78990,78993,78995,78998,79000,79002,79005,79009,79013,79016,79019,79022,79025,79028,79031,79034,79037,79040,79045,79165,79168,79171,79176,79179,79182,79185,79188,79193,79196,79199,79202,79205,79210,79213,79313,79378,79452,79456,79459,79462,79466,79469,79483,79512,79515,79518,79521,79524,79527,79530,79533,79535,79538,79541,79544,79547,79551,79556,79560,79565,79640,79643,79826,79829,79832,79835,79838,79841,79843,79846,79849,79852,79855,79858,79861,79863,79867,79870,79875,79878,79881,79884,79887,79889,79894,79897,79900,79903,79906,79908,79913,79916,79919,79921,79923,79926,79930,79933,79936,79941,79944,79947,79950,80000,80005,80009,80014,80017,80086,80089,80098,80102,80107,80110,80113,80121,80124,80141,81942,81946,81950,81955,81958,81962,81968,81974,82126,82131,82136,82139,82142,82145,82148,82151,82154,82157,82160,82163,82166,82169,82172,82177,82181,82184,82195,82199,82204,82207,82210,82213,82216,82219,82221,82224,82227,82230,82233,82235,82252,82255,82259,82262,82267,82272,82275,82278,82282,82285,82288,82297,82300,82304,82307,82312,82317,82384,82388,82391,82394,82399,82404,82490,82495,82499,82502,82505,82520,82523,82528,82532,82537,82646,82649,82660,82810,82814,82819,82928,82932,82937,82942,82947,82950,82957,82977,83012,83176,83181,83184,83189,83196,83199,83202,83205,83264,83320,83376,83380,83385,83700,83703,83707,83710,83715,83824,83829,83833,83838,83842,83913,83917,83919,83922,83925,83962,84238,84242,84257,84323,84357,84361,84364,84369,84398,84405,84414,84419,84434,84439,84448,84451,84588,84592,84654,84658,84663,84908,84912,84917,84920,84923,84926,84929,84933,84938,86519,86523,86527,86533,86536,86541,86545,86548,86553,86556,86567,86571,86576,86580,86585,86590,86593,86598,86602,86606,86609,86614,86619,86622,86625,86628,86750,86755,86857,86860,86863,86867,86872,87044,87049,87053,87056,87061,87127,87132,87135,87266,87269,87274,87277,87280,87371,87376,87379,87382,87385,87388,87393,87398,87401,87406,87411,87416,87420,87423,87426,87431,87436,87441,87446,87500,87503,87506,87511,87514,87517,87522,87527,87532,87536,87541,87555,87560,87563,87568,87572,87577,87582,87587,87592,87597,87602,87607,87612,87615,87619,87624,87627,87630,87633,87638,87643,87646,87649,87653,87656,87659,87664,87669,87674,87679,87682,87687,87692,87753,87758,87761,87766,89007,89012,89016,89020,89025,89028,89033,89038,89041,89046,89048,89053,89057,89060,89063,89074,89078,89083,89088,89143,89148,89153,89158,89369,89374,89378,89383,89386,89388,89391,89394,89841,89846,89853,89859,89862,89865,90129,90134,90138,90403,90408,90412,90417,90422,90427,90432,90763,90766,90771,90776,90779,90783,90787,90792,90797,90802,90807,90812,90817,90821,90824,90829,90834,90837,90911,90916,90921,90926,90928,90931,91301,91306,91311,91316,91319,91322,91424,91429,91434,91537,91541,91546,91550,91554,91559,91564,91567,91572,91575,91578,91971,91976,91979,91982,91985,91988,92508,92512,92517,92522,92527,92530,92535,92538,92541,92923,92928,92930,92932,92935,92938,93450,93454,93515,93518,93521,93524,93528,93531,93536,93541,94466],[10,78404,78400],{"id":78405},"_4js进阶",[19,78407,78408],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78410,78412],{"id":78411},"_41-作用域","4.1 作用域",[387,78414,78416],{"id":78415},"_411-局部作用域","4.1.1 局部作用域",[19,78418,78419],{},[3269,78420],{"alt":160,"src":78421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,78423,78424],{},[3269,78425],{"alt":160,"src":78426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[2946,78428,78429,78432,78435],{},[29,78430,78431],{},"函数作用域在函数内部",[29,78433,78434],{},"块级作用域在{}",[29,78436,78437],{},"对象的那个{}不是作用域，不是块作用域",[387,78439,78441],{"id":78440},"_412-全局作用域","4.1.2 全局作用域",[19,78443,78444],{},[3269,78445],{"alt":160,"src":78446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,78448,78449],{},"window.a=10不要这样写",[387,78451,78453],{"id":78452},"_413-作用域链","4.1.3 作用域链",[19,78455,78456],{},"变量查找机制",[19,78458,78459],{},[3269,78460],{"alt":160,"src":78461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78463,78465],{"id":78464},"_42-垃圾回收机制","4.2 垃圾回收机制",[387,78467,78469],{"id":78468},"_421-大体介绍","4.2.1 大体介绍",[19,78471,78472],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,78474,78475],{},[3269,78476],{"alt":160,"src":78477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,78479,78480],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[387,78482,78484],{"id":78483},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,78486,78487],{},"堆栈空间分配区别：",[26,78489,78490,78493],{},[29,78491,78492],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[29,78494,78495],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,78497,78498],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[23756,78500,78502],{"id":78501},"_4221-引用计数","4.2.2.1 引用计数",[19,78504,78505],{},[3269,78506],{"alt":160,"src":78507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,78509,78510],{},[3269,78511],{"alt":160,"src":78512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,78514,78515],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[23756,78517,78519],{"id":78518},"_4222-标记清除法","4.2.2.2 标记清除法",[19,78521,78522],{},[3269,78523],{"alt":160,"src":78524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,78526,78527],{},[3269,78528],{"alt":160,"src":78529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,78531,78532],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78534,78536],{"id":78535},"_43-闭包","4.3 闭包",[19,78538,78539],{},[3269,78540],{"alt":160,"src":78541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,78543,78544],{},"闭包：内层函数+外层函数的变量",[19,78546,78547],{},[3269,78548],{"alt":160,"src":78549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,78551,78552],{},"closure就是闭包",[19,78554,78555],{},[3269,78556],{"alt":160,"src":78557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,78559,78560],{},"内层函数必须包含外层函数的变量才是闭包",[19,78562,78563],{},[3269,78564],{"alt":160,"src":78565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,78567,78568],{},[3269,78569],{"alt":160,"src":78570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,78572,78573],{},"闭包可能会引起内存泄漏",[19,78575,78576],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78578,78580],{"id":78579},"_44-变量提升","4.4 变量提升",[19,78582,78583],{},[3269,78584],{"alt":160,"src":78585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,78587,78588],{},[3269,78589],{"alt":160,"src":78590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,78592,78593],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78595,78597],{"id":78596},"_45-函数进阶","4.5 函数进阶",[387,78599,78601],{"id":78600},"_451-函数提升","4.5.1 函数提升",[19,78603,78604],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,78606,78607],{},"只提升函数声明，不提升函数调用",[53541,78609,78610],{},"\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",[387,78612,78614],{"id":78613},"_452-函数参数","4.5.2 函数参数",[23756,78616,78618],{"id":78617},"_4521-动态参数","4.5.2.1 动态参数",[19,78620,78621],{},[3269,78622],{"alt":160,"src":78623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,78625,78626],{},[3269,78627],{"alt":160,"src":78628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,78630,78631],{},"箭头函数里边没有arguments",[23756,78633,78635],{"id":78634},"_4522-剩余参数","4.5.2.2 剩余参数",[19,78637,78638],{},[3269,78639],{"alt":160,"src":78640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,78642,78643],{},[3269,78644],{"alt":160,"src":78645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,78647,78648],{},"剩余参数使用的时候不需要写...",[19,78650,78651],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,78653,78654],{},"  function getSum(a,b,...arr) {",[19,78656,78657],{},"  console.log(11)",[19,78659,78660],{},"  }",[19,78662,78663],{},"  getSum(1,2,3,4)",[19,78665,78666],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,78668,78669],{},"  getSum(1,2)",[19,78671,78672],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,78674,78675],{},[3269,78676],{"alt":160,"src":78677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[23756,78679,78681],{"id":78680},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,78683,78684],{},[3269,78685],{"alt":160,"src":78686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,78688,78689],{},[3269,78690],{"alt":160,"src":78691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,78693,78694],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,78696,78697],{},"展开运算符可以用于数组之间的合并：",[19,78699,78700],{},"const arr1 = [1, 2, 3]",[19,78702,78703],{},"const arr2 = [3, 4, 5]",[19,78705,78706],{},"const arr = [...arr1, ...arr2]",[19,78708,78709],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,78711,78712],{},"剩余参数：函数参数使用，得到真数组",[19,78714,78715],{},"展开运算符：数组中使用，数组展开",[387,78717,78719],{"id":78718},"_453-箭头函数","4.5.3 箭头函数",[23756,78721,78723],{"id":78722},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,78725,78726],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,78728,78729],{},"它不是万能的！！！",[19,78731,78732],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,78734,78735],{},[3269,78736],{"alt":160,"src":78737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,78739,1981],{},[19,78741,78742],{},"① 只有一个形参的时候，可以省略小括号：",[19,78744,78745],{},"const fn=x=>{console.log(x)}",[19,78747,78748],{},"② 只有一行代码时可以省略大括号：",[19,78750,78751],{},"const fn=x=>console.log(11)",[19,78753,78754],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,78756,78757],{},"const fn=x=>x+x",[19,78759,78760],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,78762,78763],{},"⑤ 阻止表单默认提交：",[19,78765,78766],{},"const form = document.querySelector('form')",[19,78768,78769],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,78771,78772],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,78774,78775],{},"const fn=uname=>({uname:uname})",[19,78777,78778],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,78780,78781],{},[3269,78782],{"alt":160,"src":78783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,78785,78786],{},[3269,78787],{"alt":160,"src":78788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,78790,78791],{},[3269,78792],{"alt":160,"src":78793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,78795,78796],{},"一定不要忘记用()，有()就理解为自带return",[23756,78798,78800],{"id":78799},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,78802,78803],{},"箭头函数是没有动态参数的arguments",[19,78805,78806],{},[3269,78807],{"alt":160,"src":78808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[23756,78810,78812],{"id":78811},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,78814,13093],{},[26,78816,78817,78820,78823],{},[29,78818,78819],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[29,78821,78822],{},"事件回调函数使用箭头函数时，this 为全局的 window",[29,78824,78825],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,78827,78828],{},[3269,78829],{"alt":160,"src":78830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[154,78832,78834],{"className":310,"code":78833,"language":312,"meta":160,"style":160},"  \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",[70,78835,78836,78844,78849,78854,78859,78864,78869,78873,78878,78882,78886,78891,78896,78901,78905,78909,78914,78919,78924],{"__ignoreMap":160},[178,78837,78838,78840,78842],{"class":180,"line":181},[178,78839,341],{"class":319},[178,78841,53541],{"class":323},[178,78843,336],{"class":319},[178,78845,78846],{"class":180,"line":263},[178,78847,78848],{"class":319},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[178,78850,78851],{"class":180,"line":274},[178,78852,78853],{"class":319},"    console.log(this) \u002F\u002F指向window\n",[178,78855,78856],{"class":180,"line":354},[178,78857,78858],{"class":319},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[178,78860,78861],{"class":180,"line":364},[178,78862,78863],{"class":319},"    function fn() {\n",[178,78865,78866],{"class":180,"line":740},[178,78867,78868],{"class":319},"      console.log(this)  \u002F\u002F指向window\n",[178,78870,78871],{"class":180,"line":746},[178,78872,3971],{"class":319},[178,78874,78875],{"class":180,"line":752},[178,78876,78877],{"class":319},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[178,78879,78880],{"class":180,"line":757},[178,78881,722],{"emptyLinePlaceholder":721},[178,78883,78884],{"class":180,"line":763},[178,78885,73243],{"class":319},[178,78887,78888],{"class":180,"line":769},[178,78889,78890],{"class":319},"      name: 'andy',\n",[178,78892,78893],{"class":180,"line":774},[178,78894,78895],{"class":319},"      sayHai: function () {\n",[178,78897,78898],{"class":180,"line":780},[178,78899,78900],{"class":319},"        console.log(this)\n",[178,78902,78903],{"class":180,"line":786},[178,78904,54125],{"class":319},[178,78906,78907],{"class":180,"line":792},[178,78908,3971],{"class":319},[178,78910,78911],{"class":180,"line":798},[178,78912,78913],{"class":319},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[178,78915,78916],{"class":180,"line":804},[178,78917,78918],{"class":319},"    \u002F\u002F 2.箭头函数的this\n",[178,78920,78921],{"class":180,"line":810},[178,78922,78923],{"class":319},"    const fn = () => console.log(this)\n",[178,78925,78926,78928,78930],{"class":180,"line":816},[178,78927,357],{"class":319},[178,78929,53541],{"class":323},[178,78931,336],{"class":319},[19,78933,78934],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,78936,78937],{},"const fn = () => console.log(this)",[19,78939,78940],{},"fn() \u002F\u002F指向window",[19,78942,78943],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,78945,78946],{},"①",[19,78948,78949],{},"const obj = {",[19,78951,78952],{},"uname: 'pink老师',",[19,78954,78955],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,78957,2885],{},[19,78959,78960],{},"调用对象里边的函数",[19,78962,78963],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,78965,78966],{},"obj.sayHai()",[19,78968,78969],{},"②",[19,78971,78972],{},"const obj1 = {",[19,78974,78952],{},[19,78976,78977],{},"sayHai: function () {",[19,78979,78980],{},"let i = 10",[19,78982,78983],{},"const count = () => {",[19,78985,78986],{},"console.log(this)",[19,78988,78989],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,78991,78992],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,78994,2885],{},[19,78996,78997],{},"count()",[19,78999,2885],{},[19,79001,2885],{},[19,79003,79004],{},"obj1.sayHai()",[14,79006,79008],{"id":79007},"_46-解构赋值","4.6 解构赋值",[387,79010,79012],{"id":79011},"_461-数组解构","4.6.1 数组解构",[19,79014,79015],{},"以前要是使用数组中的值的话：",[19,79017,79018],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,79020,79021],{},"const arr=[100,60,80]",[19,79023,79024],{},"const max=arr[0]",[19,79026,79027],{},"const min=arr[1]",[19,79029,79030],{},"const avg=arr[2]",[19,79032,79033],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,79035,79036],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,79038,79039],{},"这个写法就类似于上边的那种用很多const的方法",[19,79041,79042],{},[3269,79043],{"alt":160,"src":79044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[154,79046,79048],{"className":52365,"code":79047,"language":52367,"meta":160,"style":160},"①变量之间交换值:\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",[70,79049,79050,79055,79060,79065,79070,79075,79079,79083,79088,79092,79097,79102,79106,79111,79116,79127,79137,79142,79147,79152,79156,79160],{"__ignoreMap":160},[178,79051,79052],{"class":180,"line":181},[178,79053,79054],{"class":319},"①变量之间交换值:\n",[178,79056,79057],{"class":180,"line":263},[178,79058,79059],{"class":319},"let a=1\n",[178,79061,79062],{"class":180,"line":274},[178,79063,79064],{"class":319},"let b=2;\n",[178,79066,79067],{"class":180,"line":354},[178,79068,79069],{"class":319},"必须加这行代码，不然就会报错\n",[178,79071,79072],{"class":180,"line":364},[178,79073,79074],{"class":319},"[b,a]=[a,b]\n",[178,79076,79077],{"class":180,"line":740},[178,79078,722],{"emptyLinePlaceholder":721},[178,79080,79081],{"class":180,"line":746},[178,79082,722],{"emptyLinePlaceholder":721},[178,79084,79085],{"class":180,"line":752},[178,79086,79087],{"class":319},"可以写成下面的方式：\n",[178,79089,79090],{"class":180,"line":757},[178,79091,79059],{"class":319},[178,79093,79094],{"class":180,"line":763},[178,79095,79096],{"class":319},"let b=2\n",[178,79098,79099],{"class":180,"line":769},[178,79100,79101],{"class":319},";[b,a]=[a,b]\n",[178,79103,79104],{"class":180,"line":774},[178,79105,722],{"emptyLinePlaceholder":721},[178,79107,79108],{"class":180,"line":780},[178,79109,79110],{"class":319},"②排序\n",[178,79112,79113],{"class":180,"line":786},[178,79114,79115],{"class":319},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[178,79117,79118,79121,79124],{"class":180,"line":792},[178,79119,79120],{"class":319},"for (let i = 0; i ",[178,79122,320],{"class":79123},"s7hpK",[178,79125,79126],{"class":319}," arr1.length; i++) {\n",[178,79128,79129,79132,79134],{"class":180,"line":798},[178,79130,79131],{"class":319},"   for (let j = 0; j ",[178,79133,320],{"class":79123},[178,79135,79136],{"class":319}," arr1.length - 1; j++) {\n",[178,79138,79139],{"class":180,"line":804},[178,79140,79141],{"class":319},"      if (arr1[j] > arr1[j + 1]) {\n",[178,79143,79144],{"class":180,"line":810},[178,79145,79146],{"class":319},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[178,79148,79149],{"class":180,"line":816},[178,79150,79151],{"class":319},"       }\n",[178,79153,79154],{"class":180,"line":822},[178,79155,6080],{"class":319},[178,79157,79158],{"class":180,"line":827},[178,79159,3371],{"class":319},[178,79161,79162],{"class":180,"line":832},[178,79163,79164],{"class":319},"console.log(arr1)\n",[19,79166,79167],{},"数组解构的细节：",[19,79169,79170],{},"①变量多，单元值少",[19,79172,79173],{},[3269,79174],{"alt":160,"src":79175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,79177,79178],{},"防止出现undefined的方法：",[19,79180,79181],{},"const [a=0,b=0] =[1]",[19,79183,79184],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,79186,79187],{},"②变量少，单元值多",[19,79189,79190],{},[3269,79191],{"alt":160,"src":79192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,79194,79195],{},"此时可以使用剩余参数来接收多余的值",[19,79197,79198],{},"const [a,b,...c]=[1,2,3,4]",[19,79200,79201],{},"console.log(c) 输出[3,4]",[19,79203,79204],{},"③可以按需导入，忽略某些返回值",[19,79206,79207],{},[3269,79208],{"alt":160,"src":79209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,79211,79212],{},"④支持多维数组的结构",[154,79214,79218],{"className":79215,"code":79216,"language":79217,"meta":160,"style":160},"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",[70,79219,79220,79248,79264,79279,79294],{"__ignoreMap":160},[178,79221,79222,79224,79226,79228,79230,79232,79234,79236,79239,79241,79243,79245],{"class":180,"line":181},[178,79223,8561],{"class":699},[178,79225,53561],{"class":319},[178,79227,330],{"class":699},[178,79229,53953],{"class":319},[178,79231,1665],{"class":195},[178,79233,14196],{"class":319},[178,79235,1669],{"class":195},[178,79237,79238],{"class":319},", [",[178,79240,2021],{"class":195},[178,79242,14196],{"class":319},[178,79244,2233],{"class":195},[178,79246,79247],{"class":319},"]]\n",[178,79249,79250,79253,79255,79257,79259,79261],{"class":180,"line":263},[178,79251,79252],{"class":319},"console.",[178,79254,59968],{"class":184},[178,79256,5623],{"class":319},[178,79258,2133],{"class":195},[178,79260,5987],{"class":319},[178,79262,79263],{"class":2008},"  \u002F\u002F1\n",[178,79265,79266,79268,79270,79272,79274,79276],{"class":180,"line":274},[178,79267,79252],{"class":319},[178,79269,59968],{"class":184},[178,79271,5623],{"class":319},[178,79273,1665],{"class":195},[178,79275,5987],{"class":319},[178,79277,79278],{"class":2008},"  \u002F\u002F2\n",[178,79280,79281,79283,79285,79287,79289,79291],{"class":180,"line":354},[178,79282,79252],{"class":319},[178,79284,59968],{"class":184},[178,79286,5623],{"class":319},[178,79288,1669],{"class":195},[178,79290,5987],{"class":319},[178,79292,79293],{"class":2008},"  \u002F\u002F[3,4]\n",[178,79295,79296,79298,79300,79302,79304,79306,79308,79310],{"class":180,"line":364},[178,79297,79252],{"class":319},[178,79299,59968],{"class":184},[178,79301,5623],{"class":319},[178,79303,1669],{"class":195},[178,79305,6672],{"class":319},[178,79307,2133],{"class":195},[178,79309,5987],{"class":319},[178,79311,79312],{"class":2008},"  \u002F\u002F3\n",[154,79314,79316],{"className":79215,"code":79315,"language":79217,"meta":160,"style":160},"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",[70,79317,79318,79345,79356,79367],{"__ignoreMap":160},[178,79319,79320,79322,79325,79327,79329,79331,79333,79335,79337,79339,79341,79343],{"class":180,"line":181},[178,79321,8561],{"class":699},[178,79323,79324],{"class":319}," [a, b, c] ",[178,79326,330],{"class":699},[178,79328,53953],{"class":319},[178,79330,1665],{"class":195},[178,79332,14196],{"class":319},[178,79334,1669],{"class":195},[178,79336,79238],{"class":319},[178,79338,2021],{"class":195},[178,79340,14196],{"class":319},[178,79342,2233],{"class":195},[178,79344,79247],{"class":319},[178,79346,79347,79349,79351,79354],{"class":180,"line":263},[178,79348,79252],{"class":319},[178,79350,59968],{"class":184},[178,79352,79353],{"class":319},"(a)",[178,79355,79263],{"class":2008},[178,79357,79358,79360,79362,79365],{"class":180,"line":274},[178,79359,79252],{"class":319},[178,79361,59968],{"class":184},[178,79363,79364],{"class":319},"(b)",[178,79366,79278],{"class":2008},[178,79368,79369,79371,79373,79376],{"class":180,"line":354},[178,79370,79252],{"class":319},[178,79372,59968],{"class":184},[178,79374,79375],{"class":319},"(c)",[178,79377,79293],{"class":2008},[154,79379,79381],{"className":79215,"code":79380,"language":79217,"meta":160,"style":160},"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",[70,79382,79383,79410,79420,79430,79440],{"__ignoreMap":160},[178,79384,79385,79387,79390,79392,79394,79396,79398,79400,79402,79404,79406,79408],{"class":180,"line":181},[178,79386,8561],{"class":699},[178,79388,79389],{"class":319}," [a, b, [c, d]] ",[178,79391,330],{"class":699},[178,79393,53953],{"class":319},[178,79395,1665],{"class":195},[178,79397,14196],{"class":319},[178,79399,1669],{"class":195},[178,79401,79238],{"class":319},[178,79403,2021],{"class":195},[178,79405,14196],{"class":319},[178,79407,2233],{"class":195},[178,79409,79247],{"class":319},[178,79411,79412,79414,79416,79418],{"class":180,"line":263},[178,79413,79252],{"class":319},[178,79415,59968],{"class":184},[178,79417,79353],{"class":319},[178,79419,79263],{"class":2008},[178,79421,79422,79424,79426,79428],{"class":180,"line":274},[178,79423,79252],{"class":319},[178,79425,59968],{"class":184},[178,79427,79364],{"class":319},[178,79429,79278],{"class":2008},[178,79431,79432,79434,79436,79438],{"class":180,"line":354},[178,79433,79252],{"class":319},[178,79435,59968],{"class":184},[178,79437,79375],{"class":319},[178,79439,79312],{"class":2008},[178,79441,79442,79444,79446,79449],{"class":180,"line":364},[178,79443,79252],{"class":319},[178,79445,59968],{"class":184},[178,79447,79448],{"class":319},"(d)",[178,79450,79451],{"class":2008},"  \u002F\u002F4\n",[387,79453,79455],{"id":79454},"_462-对象解构","4.6.2 对象解构",[19,79457,79458],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,79460,79461],{},"用的非常非常多！！！！！！",[23756,79463,79465],{"id":79464},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,79467,79468],{},"基本语法：",[26,79470,79471,79474,79477,79480],{},[29,79472,79473],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[29,79475,79476],{},"对象属性的值将被赋值给与属性名相同的变量",[29,79478,79479],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[29,79481,79482],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[154,79484,79486],{"className":52365,"code":79485,"language":52367,"meta":160,"style":160},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[70,79487,79488,79493,79498,79503,79507],{"__ignoreMap":160},[178,79489,79490],{"class":180,"line":181},[178,79491,79492],{"class":319},"const obj = {\n",[178,79494,79495],{"class":180,"line":263},[178,79496,79497],{"class":319},"   uname: 'pink老师',\n",[178,79499,79500],{"class":180,"line":274},[178,79501,79502],{"class":319},"   age: 18,\n",[178,79504,79505],{"class":180,"line":354},[178,79506,3371],{"class":319},[178,79508,79509],{"class":180,"line":364},[178,79510,79511],{"class":319},"const { uname, age } = obj\n",[19,79513,79514],{},"上方代码这样写等价于：",[19,79516,79517],{},"const uname等价于obj.uname",[19,79519,79520],{},"变量名可以重新改名：",[19,79522,79523],{},"const uname='red老师'",[19,79525,79526],{},"const user={",[19,79528,79529],{},"  uname:'pink老师',",[19,79531,79532],{},"  age:18",[19,79534,2885],{},[19,79536,79537],{},"const {uname,age}=user",[19,79539,79540],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,79542,79543],{},"const {旧变量名：新变量名}=对象",[19,79545,79546],{},"const {uname:username,age}=user",[23756,79548,79550],{"id":79549},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,79552,79553],{},[3269,79554],{"alt":160,"src":79555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[23756,79557,79559],{"id":79558},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,79561,79562],{},[3269,79563],{"alt":160,"src":79564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[154,79566,79568],{"className":310,"code":79567,"language":312,"meta":160,"style":160},"  \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",[70,79569,79570,79578,79583,79588,79593,79598,79603,79608,79613,79618,79622,79627,79632],{"__ignoreMap":160},[178,79571,79572,79574,79576],{"class":180,"line":181},[178,79573,341],{"class":319},[178,79575,53541],{"class":323},[178,79577,336],{"class":319},[178,79579,79580],{"class":180,"line":263},[178,79581,79582],{"class":319},"    const pig = {\n",[178,79584,79585],{"class":180,"line":274},[178,79586,79587],{"class":319},"      name: '佩奇',\n",[178,79589,79590],{"class":180,"line":354},[178,79591,79592],{"class":319},"      family: {\n",[178,79594,79595],{"class":180,"line":364},[178,79596,79597],{"class":319},"        mother: '猪妈妈',\n",[178,79599,79600],{"class":180,"line":740},[178,79601,79602],{"class":319},"        father: '猪爸爸',\n",[178,79604,79605],{"class":180,"line":746},[178,79606,79607],{"class":319},"        sister: '乔治'\n",[178,79609,79610],{"class":180,"line":752},[178,79611,79612],{"class":319},"      },\n",[178,79614,79615],{"class":180,"line":757},[178,79616,79617],{"class":319},"      age: 6\n",[178,79619,79620],{"class":180,"line":763},[178,79621,3971],{"class":319},[178,79623,79624],{"class":180,"line":769},[178,79625,79626],{"class":319},"    \u002F\u002F 多级对象解构\n",[178,79628,79629],{"class":180,"line":774},[178,79630,79631],{"class":319},"    const { name, family: { mother, father, sister }, age } = pig\n",[178,79633,79634,79636,79638],{"class":180,"line":780},[178,79635,357],{"class":319},[178,79637,53541],{"class":323},[178,79639,336],{"class":319},[19,79641,79642],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[154,79644,79647],{"className":79645,"code":79646,"language":78167,"meta":160,"style":160},"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",[70,79648,79649,79654,79665,79677,79689,79698,79702,79713,79725,79735,79740,79744,79754,79765,79774,79778,79782,79793,79804,79813,79817,79822],{"__ignoreMap":160},[178,79650,79651],{"class":180,"line":181},[178,79652,79653],{"class":2008},"    \u002F\u002F 这是后台传递过来的数据\n",[178,79655,79656,79658,79661,79663],{"class":180,"line":263},[178,79657,12982],{"class":699},[178,79659,79660],{"class":319}," msg ",[178,79662,330],{"class":699},[178,79664,17330],{"class":319},[178,79666,79667,79670,79672,79675],{"class":180,"line":274},[178,79668,79669],{"class":188},"      \"code\"",[178,79671,2799],{"class":699},[178,79673,79674],{"class":195}," 200",[178,79676,33202],{"class":319},[178,79678,79679,79682,79684,79687],{"class":180,"line":354},[178,79680,79681],{"class":188},"      \"msg\"",[178,79683,2799],{"class":699},[178,79685,79686],{"class":188}," \"获取新闻列表成功\"",[178,79688,33202],{"class":319},[178,79690,79691,79694,79696],{"class":180,"line":364},[178,79692,79693],{"class":188},"      \"data\"",[178,79695,2799],{"class":699},[178,79697,57168],{"class":319},[178,79699,79700],{"class":180,"line":740},[178,79701,4293],{"class":319},[178,79703,79704,79707,79709,79711],{"class":180,"line":746},[178,79705,79706],{"class":188},"          \"id\"",[178,79708,2799],{"class":699},[178,79710,26870],{"class":195},[178,79712,33202],{"class":319},[178,79714,79715,79718,79720,79723],{"class":180,"line":752},[178,79716,79717],{"class":188},"          \"title\"",[178,79719,2799],{"class":699},[178,79721,79722],{"class":188}," \"5G商用自己，三大运用商收入下降\"",[178,79724,33202],{"class":319},[178,79726,79727,79730,79732],{"class":180,"line":757},[178,79728,79729],{"class":188},"          \"count\"",[178,79731,2799],{"class":699},[178,79733,79734],{"class":195}," 58\n",[178,79736,79737],{"class":180,"line":763},[178,79738,79739],{"class":319},"        },\n",[178,79741,79742],{"class":180,"line":769},[178,79743,4293],{"class":319},[178,79745,79746,79748,79750,79752],{"class":180,"line":774},[178,79747,79706],{"class":188},[178,79749,2799],{"class":699},[178,79751,16514],{"class":195},[178,79753,33202],{"class":319},[178,79755,79756,79758,79760,79763],{"class":180,"line":780},[178,79757,79717],{"class":188},[178,79759,2799],{"class":699},[178,79761,79762],{"class":188}," \"国际媒体头条速览\"",[178,79764,33202],{"class":319},[178,79766,79767,79769,79771],{"class":180,"line":786},[178,79768,79729],{"class":188},[178,79770,2799],{"class":699},[178,79772,79773],{"class":195}," 56\n",[178,79775,79776],{"class":180,"line":792},[178,79777,79739],{"class":319},[178,79779,79780],{"class":180,"line":798},[178,79781,4293],{"class":319},[178,79783,79784,79786,79788,79791],{"class":180,"line":804},[178,79785,79706],{"class":188},[178,79787,2799],{"class":699},[178,79789,79790],{"class":195}," 3",[178,79792,33202],{"class":319},[178,79794,79795,79797,79799,79802],{"class":180,"line":810},[178,79796,79717],{"class":188},[178,79798,2799],{"class":699},[178,79800,79801],{"class":188}," \"乌克兰和俄罗斯持续冲突\"",[178,79803,33202],{"class":319},[178,79805,79806,79808,79810],{"class":180,"line":816},[178,79807,79729],{"class":188},[178,79809,2799],{"class":699},[178,79811,79812],{"class":195}," 1669\n",[178,79814,79815],{"class":180,"line":822},[178,79816,79739],{"class":319},[178,79818,79819],{"class":180,"line":827},[178,79820,79821],{"class":319},"      ]\n",[178,79823,79824],{"class":180,"line":832},[178,79825,3971],{"class":319},[19,79827,79828],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,79830,79831],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,79833,79834],{},"\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,79836,79837],{},"function({data}) {",[19,79839,79840],{},"console.log(data)",[19,79842,2885],{},[19,79844,79845],{},"render(msg)",[19,79847,79848],{},"实参传递给形参的时候解构了",[19,79850,79851],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,79853,79854],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,79856,79857],{},"function render({data:mydata}) {",[19,79859,79860],{},"  console.log(data)",[19,79862,2885],{},[387,79864,79866],{"id":79865},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,79868,79869],{},"有两种情况：一个是数组结构，一个是立即执行函数",[26,79871,79872],{},[29,79873,79874],{},"如果对一个数组进行遍历，有两种方式：",[19,79876,79877],{},"①法1",[19,79879,79880],{},"const arr=[1,2,3]",[19,79882,79883],{},"arr.map(function(item,index) {",[19,79885,79886],{},"  console.log(item)",[19,79888,54190],{},[19,79890,79891],{},[3269,79892],{"alt":160,"src":79893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,79895,79896],{},"②法2",[19,79898,79899],{},"const str='pink'",[19,79901,79902],{},"[1,2,3].map(function(item,index) {",[19,79904,79905],{},"console.log(item)",[19,79907,54190],{},[19,79909,79910],{},[3269,79911],{"alt":160,"src":79912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,79914,79915],{},"此时会报错",[19,79917,79918],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,79920,79905],{},[19,79922,54190],{},[19,79924,79925],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,79927,79929],{"id":79928},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,79931,79932],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,79934,79935],{},"可以理解为加强版的for循环",[19,79937,79938],{},[3269,79939],{"alt":160,"src":79940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,79942,79943],{},"里边不写return，不返回数组，只遍历不返回",[19,79945,79946],{},"map是返回数组",[19,79948,79949],{},"forEach主要用于遍历数组对象",[154,79951,79953],{"className":310,"code":79952,"language":312,"meta":160,"style":160},"  \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",[70,79954,79955,79963,79968,79973,79978,79983,79987,79992],{"__ignoreMap":160},[178,79956,79957,79959,79961],{"class":180,"line":181},[178,79958,341],{"class":319},[178,79960,53541],{"class":323},[178,79962,336],{"class":319},[178,79964,79965],{"class":180,"line":263},[178,79966,79967],{"class":319},"    const arr = ['red', 'green', 'pink']\n",[178,79969,79970],{"class":180,"line":274},[178,79971,79972],{"class":319},"    const result = arr.forEach(function (item, index) {\n",[178,79974,79975],{"class":180,"line":354},[178,79976,79977],{"class":319},"      console.log(item)\n",[178,79979,79980],{"class":180,"line":364},[178,79981,79982],{"class":319},"      console.log(index)\n",[178,79984,79985],{"class":180,"line":740},[178,79986,35193],{"class":319},[178,79988,79989],{"class":180,"line":746},[178,79990,79991],{"class":319},"    console.log(result)\n",[178,79993,79994,79996,79998],{"class":180,"line":752},[178,79995,357],{"class":319},[178,79997,53541],{"class":323},[178,79999,336],{"class":319},[19,80001,80002],{},[3269,80003],{"alt":160,"src":80004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,80006,80008],{"id":80007},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,80010,80011],{},[3269,80012],{"alt":160,"src":80013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,80015,80016],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[154,80018,80020],{"className":310,"code":80019,"language":312,"meta":160,"style":160},"\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",[70,80021,80022,80030,80038,80043,80048,80052,80056,80061,80065,80070,80078],{"__ignoreMap":160},[178,80023,80024,80026,80028],{"class":180,"line":181},[178,80025,320],{"class":319},[178,80027,376],{"class":323},[178,80029,336],{"class":319},[178,80031,80032,80034,80036],{"class":180,"line":263},[178,80033,341],{"class":319},[178,80035,53541],{"class":323},[178,80037,336],{"class":319},[178,80039,80040],{"class":180,"line":274},[178,80041,80042],{"class":319},"    const arr = [10, 20, 30]\n",[178,80044,80045],{"class":180,"line":354},[178,80046,80047],{"class":319},"    const newArr = arr.filter(function (item, index) {\n",[178,80049,80050],{"class":180,"line":364},[178,80051,79977],{"class":319},[178,80053,80054],{"class":180,"line":740},[178,80055,79982],{"class":319},[178,80057,80058],{"class":180,"line":746},[178,80059,80060],{"class":319},"      return item >= 20\n",[178,80062,80063],{"class":180,"line":752},[178,80064,35193],{"class":319},[178,80066,80067],{"class":180,"line":757},[178,80068,80069],{"class":319},"    console.log(newArr)\n",[178,80071,80072,80074,80076],{"class":180,"line":763},[178,80073,357],{"class":319},[178,80075,53541],{"class":323},[178,80077,336],{"class":319},[178,80079,80080,80082,80084],{"class":180,"line":769},[178,80081,367],{"class":319},[178,80083,376],{"class":323},[178,80085,336],{"class":319},[19,80087,80088],{},"这个也可以写成箭头函数：",[154,80090,80092],{"className":52365,"code":80091,"language":52367,"meta":160,"style":160},"const newArr = arr.filter(item => item >= 20)\n",[70,80093,80094],{"__ignoreMap":160},[178,80095,80096],{"class":180,"line":181},[178,80097,80091],{"class":319},[14,80099,80101],{"id":80100},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,80103,80104],{},[3269,80105],{"alt":160,"src":80106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,80108,80109],{},"步骤：",[19,80111,80112],{},"①：渲染页面模块",[2946,80114,80115,80118],{},[29,80116,80117],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[29,80119,80120],{},"用forEach+字符串的形式",[19,80122,80123],{},"②：点击不同需求，显示不同页面内容",[2946,80125,80126,80129,80132,80135,80138],{},[29,80127,80128],{},"点击采取事件委托方式 .filter",[29,80130,80131],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[29,80133,80134],{},"筛选条件是根据点击的 data-index 来判断",[29,80136,80137],{},"可以使用对象解构，把事件对象解构",[29,80139,80140],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[154,80142,80144],{"className":52365,"code":80143,"language":52367,"meta":160,"style":160},"\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",[70,80145,80146,80156,80170,80174,80182,80196,80216,80228,80236,80242,80252,80262,80272,80276,80280,80286,80299,80311,80321,80333,80337,80341,80348,80361,80373,80390,80408,80421,80425,80429,80441,80451,80455,80459,80466,80506,80533,80543,80547,80551,80559,80571,80575,80579,80587,80599,80611,80622,80626,80630,80639,80651,80662,80666,80670,80679,80691,80703,80707,80711,80718,80728,80740,80752,80767,80771,80775,80783,80799,80809,80819,80829,80841,80845,80849,80859,80870,80880,80884,80892,80900,80904,80912,80927,80953,80978,81003,81022,81030,81044,81049,81054,81059,81064,81069,81077,81085,81090,81101,81106,81116,81126,81136,81146,81150,81154,81163,81172,81181,81190,81194,81198,81207,81216,81225,81234,81238,81242,81251,81260,81269,81278,81282,81286,81295,81304,81313,81322,81326,81330,81339,81348,81357,81366,81370,81374,81383,81392,81401,81410,81414,81418,81427,81436,81444,81453,81457,81461,81465,81470,81482,81487,81499,81503,81520,81548,81557,81562,81572,81582,81591,81596,81601,81605,81610,81627,81631,81636,81644,81649,81676,81681,81701,81706,81718,81723,81728,81733,81744,81758,81795,81813,81846,81863,81887,81891,81896,81902,81906,81910,81914,81922,81930,81934],{"__ignoreMap":160},[178,80147,80148,80150,80152,80154],{"class":180,"line":181},[178,80149,53029],{"class":319},[178,80151,53032],{"class":323},[178,80153,53035],{"class":184},[178,80155,336],{"class":319},[178,80157,80158,80160,80162,80164,80166,80168],{"class":180,"line":263},[178,80159,320],{"class":319},[178,80161,52367],{"class":323},[178,80163,53046],{"class":184},[178,80165,330],{"class":319},[178,80167,53051],{"class":188},[178,80169,336],{"class":319},[178,80171,80172],{"class":180,"line":274},[178,80173,722],{"emptyLinePlaceholder":721},[178,80175,80176,80178,80180],{"class":180,"line":354},[178,80177,320],{"class":319},[178,80179,53064],{"class":323},[178,80181,336],{"class":319},[178,80183,80184,80186,80188,80190,80192,80194],{"class":180,"line":364},[178,80185,341],{"class":319},[178,80187,53074],{"class":323},[178,80189,53077],{"class":184},[178,80191,330],{"class":319},[178,80193,53082],{"class":188},[178,80195,336],{"class":319},[178,80197,80198,80200,80202,80204,80206,80208,80210,80212,80214],{"class":180,"line":740},[178,80199,341],{"class":319},[178,80201,53074],{"class":323},[178,80203,426],{"class":184},[178,80205,330],{"class":319},[178,80207,53121],{"class":188},[178,80209,53101],{"class":184},[178,80211,330],{"class":319},[178,80213,53128],{"class":188},[178,80215,336],{"class":319},[178,80217,80218,80220,80222,80224,80226],{"class":180,"line":746},[178,80219,341],{"class":319},[178,80221,53137],{"class":323},[178,80223,53140],{"class":319},[178,80225,53137],{"class":323},[178,80227,336],{"class":319},[178,80229,80230,80232,80234],{"class":180,"line":752},[178,80231,341],{"class":319},[178,80233,1853],{"class":323},[178,80235,336],{"class":319},[178,80237,80238,80240],{"class":180,"line":757},[178,80239,8172],{"class":323},[178,80241,17330],{"class":319},[178,80243,80244,80246,80248,80250],{"class":180,"line":763},[178,80245,56416],{"class":195},[178,80247,53167],{"class":319},[178,80249,2133],{"class":195},[178,80251,3100],{"class":319},[178,80253,80254,80256,80258,80260],{"class":180,"line":769},[178,80255,56427],{"class":195},[178,80257,53167],{"class":319},[178,80259,2133],{"class":195},[178,80261,3100],{"class":319},[178,80263,80264,80266,80268,80270],{"class":180,"line":774},[178,80265,74316],{"class":195},[178,80267,53167],{"class":319},[178,80269,62226],{"class":195},[178,80271,3100],{"class":319},[178,80273,80274],{"class":180,"line":780},[178,80275,3971],{"class":319},[178,80277,80278],{"class":180,"line":786},[178,80279,722],{"emptyLinePlaceholder":721},[178,80281,80282,80284],{"class":180,"line":792},[178,80283,63844],{"class":184},[178,80285,17330],{"class":319},[178,80287,80288,80290,80292,80295,80297],{"class":180,"line":798},[178,80289,56492],{"class":195},[178,80291,53167],{"class":319},[178,80293,80294],{"class":195},"990",[178,80296,53222],{"class":699},[178,80298,3100],{"class":319},[178,80300,80301,80303,80305,80307,80309],{"class":180,"line":804},[178,80302,56427],{"class":195},[178,80304,53167],{"class":319},[178,80306,2133],{"class":195},[178,80308,53286],{"class":195},[178,80310,3100],{"class":319},[178,80312,80313,80315,80317,80319],{"class":180,"line":810},[178,80314,56730],{"class":195},[178,80316,53167],{"class":319},[178,80318,53207],{"class":195},[178,80320,3100],{"class":319},[178,80322,80323,80326,80328,80331],{"class":180,"line":816},[178,80324,80325],{"class":195},"      flex-wrap",[178,80327,53167],{"class":319},[178,80329,80330],{"class":195},"wrap",[178,80332,3100],{"class":319},[178,80334,80335],{"class":180,"line":822},[178,80336,3971],{"class":319},[178,80338,80339],{"class":180,"line":827},[178,80340,722],{"emptyLinePlaceholder":721},[178,80342,80343,80346],{"class":180,"line":832},[178,80344,80345],{"class":184},"    .item",[178,80347,17330],{"class":319},[178,80349,80350,80352,80354,80357,80359],{"class":180,"line":850},[178,80351,56492],{"class":195},[178,80353,53167],{"class":319},[178,80355,80356],{"class":195},"240",[178,80358,53222],{"class":699},[178,80360,3100],{"class":319},[178,80362,80363,80365,80367,80369,80371],{"class":180,"line":866},[178,80364,63721],{"class":195},[178,80366,53167],{"class":319},[178,80368,2386],{"class":195},[178,80370,53222],{"class":699},[178,80372,3100],{"class":319},[178,80374,80375,80377,80379,80381,80383,80386,80388],{"class":180,"line":877},[178,80376,56416],{"class":195},[178,80378,53167],{"class":319},[178,80380,2640],{"class":195},[178,80382,53222],{"class":699},[178,80384,80385],{"class":195}," 30",[178,80387,53222],{"class":699},[178,80389,3100],{"class":319},[178,80391,80392,80394,80396,80398,80401,80404,80406],{"class":180,"line":882},[178,80393,63581],{"class":195},[178,80395,53167],{"class":319},[178,80397,29870],{"class":195},[178,80399,80400],{"class":195}," ease",[178,80402,80403],{"class":195}," .5",[178,80405,2635],{"class":699},[178,80407,3100],{"class":319},[178,80409,80410,80413,80415,80417,80419],{"class":180,"line":898},[178,80411,80412],{"class":195},"      margin-bottom",[178,80414,53167],{"class":319},[178,80416,2640],{"class":195},[178,80418,53222],{"class":699},[178,80420,3100],{"class":319},[178,80422,80423],{"class":180,"line":914},[178,80424,3971],{"class":319},[178,80426,80427],{"class":180,"line":919},[178,80428,722],{"emptyLinePlaceholder":721},[178,80430,80431,80434,80436,80439],{"class":180,"line":935},[178,80432,80433],{"class":184},"    .item:nth-child",[178,80435,944],{"class":319},[178,80437,80438],{"class":195},"4n",[178,80440,14203],{"class":319},[178,80442,80443,80445,80447,80449],{"class":180,"line":952},[178,80444,63721],{"class":195},[178,80446,53167],{"class":319},[178,80448,2133],{"class":195},[178,80450,3100],{"class":319},[178,80452,80453],{"class":180,"line":966},[178,80454,3971],{"class":319},[178,80456,80457],{"class":180,"line":980},[178,80458,722],{"emptyLinePlaceholder":721},[178,80460,80461,80464],{"class":180,"line":985},[178,80462,80463],{"class":184},"    .item:hover",[178,80465,17330],{"class":319},[178,80467,80468,80471,80473,80475,80477,80479,80481,80483,80485,80487,80489,80491,80493,80495,80497,80499,80501,80504],{"class":180,"line":1008},[178,80469,80470],{"class":195},"      box-shadow",[178,80472,53167],{"class":319},[178,80474,2133],{"class":195},[178,80476,53222],{"class":699},[178,80478,930],{"class":195},[178,80480,53222],{"class":699},[178,80482,3932],{"class":195},[178,80484,53222],{"class":699},[178,80486,1323],{"class":195},[178,80488,944],{"class":319},[178,80490,2133],{"class":195},[178,80492,14196],{"class":319},[178,80494,2133],{"class":195},[178,80496,14196],{"class":319},[178,80498,2133],{"class":195},[178,80500,14196],{"class":319},[178,80502,80503],{"class":195},".2",[178,80505,4495],{"class":319},[178,80507,80508,80511,80513,80516,80518,80520,80522,80525,80527,80529,80531],{"class":180,"line":1014},[178,80509,80510],{"class":195},"      transform",[178,80512,53167],{"class":319},[178,80514,80515],{"class":195},"translate3d",[178,80517,944],{"class":319},[178,80519,2133],{"class":195},[178,80521,14196],{"class":319},[178,80523,80524],{"class":195},"-4",[178,80526,53222],{"class":699},[178,80528,14196],{"class":319},[178,80530,2133],{"class":195},[178,80532,4495],{"class":319},[178,80534,80535,80537,80539,80541],{"class":180,"line":1019},[178,80536,63746],{"class":195},[178,80538,53167],{"class":319},[178,80540,63751],{"class":195},[178,80542,3100],{"class":319},[178,80544,80545],{"class":180,"line":1033},[178,80546,3971],{"class":319},[178,80548,80549],{"class":180,"line":1046},[178,80550,722],{"emptyLinePlaceholder":721},[178,80552,80553,80555,80557],{"class":180,"line":1059},[178,80554,80345],{"class":184},[178,80556,57336],{"class":323},[178,80558,17330],{"class":319},[178,80560,80561,80563,80565,80567,80569],{"class":180,"line":1072},[178,80562,56492],{"class":195},[178,80564,53167],{"class":319},[178,80566,2251],{"class":195},[178,80568,2268],{"class":699},[178,80570,3100],{"class":319},[178,80572,80573],{"class":180,"line":1077},[178,80574,3971],{"class":319},[178,80576,80577],{"class":180,"line":1082},[178,80578,722],{"emptyLinePlaceholder":721},[178,80580,80581,80583,80585],{"class":180,"line":1099},[178,80582,80345],{"class":184},[178,80584,64025],{"class":184},[178,80586,17330],{"class":319},[178,80588,80589,80591,80593,80595,80597],{"class":180,"line":9806},[178,80590,56643],{"class":195},[178,80592,53167],{"class":319},[178,80594,2590],{"class":195},[178,80596,53222],{"class":699},[178,80598,3100],{"class":319},[178,80600,80601,80603,80605,80607,80609],{"class":180,"line":9818},[178,80602,80412],{"class":195},[178,80604,53167],{"class":319},[178,80606,2386],{"class":195},[178,80608,53222],{"class":699},[178,80610,3100],{"class":319},[178,80612,80613,80615,80617,80620],{"class":180,"line":11477},[178,80614,59137],{"class":195},[178,80616,53167],{"class":319},[178,80618,80619],{"class":195},"#666",[178,80621,3100],{"class":319},[178,80623,80624],{"class":180,"line":11502},[178,80625,3971],{"class":319},[178,80627,80628],{"class":180,"line":11525},[178,80629,722],{"emptyLinePlaceholder":721},[178,80631,80632,80634,80637],{"class":180,"line":11549},[178,80633,80345],{"class":184},[178,80635,80636],{"class":184}," .price",[178,80638,17330],{"class":319},[178,80640,80641,80643,80645,80647,80649],{"class":180,"line":11554},[178,80642,56643],{"class":195},[178,80644,53167],{"class":319},[178,80646,2690],{"class":195},[178,80648,53222],{"class":699},[178,80650,3100],{"class":319},[178,80652,80653,80655,80657,80660],{"class":180,"line":11559},[178,80654,59137],{"class":195},[178,80656,53167],{"class":319},[178,80658,80659],{"class":195},"firebrick",[178,80661,3100],{"class":319},[178,80663,80664],{"class":180,"line":11564},[178,80665,3971],{"class":319},[178,80667,80668],{"class":180,"line":11573},[178,80669,722],{"emptyLinePlaceholder":721},[178,80671,80672,80674,80677],{"class":180,"line":11578},[178,80673,80345],{"class":184},[178,80675,80676],{"class":184}," .price::before",[178,80678,17330],{"class":319},[178,80680,80681,80684,80686,80689],{"class":180,"line":11584},[178,80682,80683],{"class":195},"      content",[178,80685,53167],{"class":319},[178,80687,80688],{"class":188},"'￥'",[178,80690,3100],{"class":319},[178,80692,80693,80695,80697,80699,80701],{"class":180,"line":11605},[178,80694,56643],{"class":195},[178,80696,53167],{"class":319},[178,80698,2489],{"class":195},[178,80700,53222],{"class":699},[178,80702,3100],{"class":319},[178,80704,80705],{"class":180,"line":11611},[178,80706,3971],{"class":319},[178,80708,80709],{"class":180,"line":11625},[178,80710,722],{"emptyLinePlaceholder":721},[178,80712,80713,80716],{"class":180,"line":11631},[178,80714,80715],{"class":184},"    .filter",[178,80717,17330],{"class":319},[178,80719,80720,80722,80724,80726],{"class":180,"line":11658},[178,80721,56730],{"class":195},[178,80723,53167],{"class":319},[178,80725,53207],{"class":195},[178,80727,3100],{"class":319},[178,80729,80730,80732,80734,80736,80738],{"class":180,"line":11667},[178,80731,56492],{"class":195},[178,80733,53167],{"class":319},[178,80735,80294],{"class":195},[178,80737,53222],{"class":699},[178,80739,3100],{"class":319},[178,80741,80742,80744,80746,80748,80750],{"class":180,"line":11673},[178,80743,56427],{"class":195},[178,80745,53167],{"class":319},[178,80747,2133],{"class":195},[178,80749,53286],{"class":195},[178,80751,3100],{"class":319},[178,80753,80754,80756,80758,80760,80762,80764],{"class":180,"line":11681},[178,80755,56416],{"class":195},[178,80757,53167],{"class":319},[178,80759,2596],{"class":195},[178,80761,53222],{"class":699},[178,80763,80385],{"class":195},[178,80765,80766],{"class":699},"px\n",[178,80768,80769],{"class":180,"line":11686},[178,80770,3971],{"class":319},[178,80772,80773],{"class":180,"line":18362},[178,80774,722],{"emptyLinePlaceholder":721},[178,80776,80777,80779,80781],{"class":180,"line":18368},[178,80778,80715],{"class":184},[178,80780,3205],{"class":323},[178,80782,17330],{"class":319},[178,80784,80785,80787,80789,80791,80793,80795,80797],{"class":180,"line":18391},[178,80786,56416],{"class":195},[178,80788,53167],{"class":319},[178,80790,2386],{"class":195},[178,80792,53222],{"class":699},[178,80794,10711],{"class":195},[178,80796,53222],{"class":699},[178,80798,3100],{"class":319},[178,80800,80801,80803,80805,80807],{"class":180,"line":18397},[178,80802,63442],{"class":195},[178,80804,53167],{"class":319},[178,80806,63539],{"class":195},[178,80808,3100],{"class":319},[178,80810,80811,80813,80815,80817],{"class":180,"line":18420},[178,80812,59137],{"class":195},[178,80814,53167],{"class":319},[178,80816,80619],{"class":195},[178,80818,3100],{"class":319},[178,80820,80821,80823,80825,80827],{"class":180,"line":18434},[178,80822,65690],{"class":195},[178,80824,53167],{"class":319},[178,80826,56458],{"class":195},[178,80828,3100],{"class":319},[178,80830,80831,80833,80835,80837,80839],{"class":180,"line":18454},[178,80832,63471],{"class":195},[178,80834,53167],{"class":319},[178,80836,2640],{"class":195},[178,80838,53222],{"class":699},[178,80840,3100],{"class":319},[178,80842,80843],{"class":180,"line":18460},[178,80844,3971],{"class":319},[178,80846,80847],{"class":180,"line":18471},[178,80848,722],{"emptyLinePlaceholder":721},[178,80850,80851,80853,80855,80857],{"class":180,"line":18494},[178,80852,80715],{"class":184},[178,80854,3205],{"class":323},[178,80856,63621],{"class":184},[178,80858,17330],{"class":319},[178,80860,80861,80863,80865,80868],{"class":180,"line":18516},[178,80862,56605],{"class":195},[178,80864,53167],{"class":319},[178,80866,80867],{"class":195},"#05943c",[178,80869,3100],{"class":319},[178,80871,80872,80874,80876,80878],{"class":180,"line":18521},[178,80873,59137],{"class":195},[178,80875,53167],{"class":319},[178,80877,62563],{"class":195},[178,80879,3100],{"class":319},[178,80881,80882],{"class":180,"line":18527},[178,80883,3971],{"class":319},[178,80885,80886,80888,80890],{"class":180,"line":18541},[178,80887,357],{"class":319},[178,80889,1853],{"class":323},[178,80891,336],{"class":319},[178,80893,80894,80896,80898],{"class":180,"line":18554},[178,80895,367],{"class":319},[178,80897,53064],{"class":323},[178,80899,336],{"class":319},[178,80901,80902],{"class":180,"line":18559},[178,80903,722],{"emptyLinePlaceholder":721},[178,80905,80906,80908,80910],{"class":180,"line":18573},[178,80907,320],{"class":319},[178,80909,376],{"class":323},[178,80911,336],{"class":319},[178,80913,80914,80916,80918,80920,80922,80925],{"class":180,"line":18578},[178,80915,341],{"class":319},[178,80917,53341],{"class":323},[178,80919,55210],{"class":184},[178,80921,330],{"class":319},[178,80923,80924],{"class":188},"\"filter\"",[178,80926,336],{"class":319},[178,80928,80929,80931,80933,80935,80937,80939,80942,80944,80946,80949,80951],{"class":180,"line":18584},[178,80930,53071],{"class":319},[178,80932,2178],{"class":323},[178,80934,62778],{"class":184},[178,80936,330],{"class":319},[178,80938,62783],{"class":188},[178,80940,80941],{"class":184}," data-index",[178,80943,330],{"class":319},[178,80945,5451],{"class":188},[178,80947,80948],{"class":319},">0-100元\u003C\u002F",[178,80950,2178],{"class":323},[178,80952,336],{"class":319},[178,80954,80955,80957,80959,80961,80963,80965,80967,80969,80971,80974,80976],{"class":180,"line":18589},[178,80956,53071],{"class":319},[178,80958,2178],{"class":323},[178,80960,62778],{"class":184},[178,80962,330],{"class":319},[178,80964,62783],{"class":188},[178,80966,80941],{"class":184},[178,80968,330],{"class":319},[178,80970,5474],{"class":188},[178,80972,80973],{"class":319},">100-300元\u003C\u002F",[178,80975,2178],{"class":323},[178,80977,336],{"class":319},[178,80979,80980,80982,80984,80986,80988,80990,80992,80994,80996,80999,81001],{"class":180,"line":18603},[178,80981,53071],{"class":319},[178,80983,2178],{"class":323},[178,80985,62778],{"class":184},[178,80987,330],{"class":319},[178,80989,62783],{"class":188},[178,80991,80941],{"class":184},[178,80993,330],{"class":319},[178,80995,5487],{"class":188},[178,80997,80998],{"class":319},">300元以上\u003C\u002F",[178,81000,2178],{"class":323},[178,81002,336],{"class":319},[178,81004,81005,81007,81009,81011,81013,81015,81018,81020],{"class":180,"line":18608},[178,81006,53071],{"class":319},[178,81008,2178],{"class":323},[178,81010,62778],{"class":184},[178,81012,330],{"class":319},[178,81014,62783],{"class":188},[178,81016,81017],{"class":319},">全部区间\u003C\u002F",[178,81019,2178],{"class":323},[178,81021,336],{"class":319},[178,81023,81024,81026,81028],{"class":180,"line":18613},[178,81025,357],{"class":319},[178,81027,53341],{"class":323},[178,81029,336],{"class":319},[178,81031,81032,81034,81036,81038,81040,81042],{"class":180,"line":18627},[178,81033,341],{"class":319},[178,81035,53341],{"class":323},[178,81037,55210],{"class":184},[178,81039,330],{"class":319},[178,81041,64329],{"class":188},[178,81043,336],{"class":319},[178,81045,81046],{"class":180,"line":18639},[178,81047,81048],{"class":2008},"    \u003C!-- \u003Cdiv class=\"item\">\n",[178,81050,81051],{"class":180,"line":18644},[178,81052,81053],{"class":2008},"      \u003Cimg src=\"\" alt=\"\">\n",[178,81055,81056],{"class":180,"line":18657},[178,81057,81058],{"class":2008},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[178,81060,81061],{"class":180,"line":18662},[178,81062,81063],{"class":2008},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[178,81065,81066],{"class":180,"line":18667},[178,81067,81068],{"class":2008},"    \u003C\u002Fdiv> -->\n",[178,81070,81071,81073,81075],{"class":180,"line":18672},[178,81072,357],{"class":319},[178,81074,53341],{"class":323},[178,81076,336],{"class":319},[178,81078,81079,81081,81083],{"class":180,"line":18685},[178,81080,341],{"class":319},[178,81082,53541],{"class":323},[178,81084,336],{"class":319},[178,81086,81087],{"class":180,"line":18690},[178,81088,81089],{"class":2008},"    \u002F\u002F 2. 初始化数据\n",[178,81091,81092,81094,81097,81099],{"class":180,"line":34365},[178,81093,12982],{"class":699},[178,81095,81096],{"class":195}," goodsList",[178,81098,734],{"class":699},[178,81100,57168],{"class":319},[178,81102,81103],{"class":180,"line":34371},[178,81104,81105],{"class":319},"      {\n",[178,81107,81108,81111,81114],{"class":180,"line":34377},[178,81109,81110],{"class":319},"        id: ",[178,81112,81113],{"class":188},"'4001172'",[178,81115,33202],{"class":319},[178,81117,81118,81121,81124],{"class":180,"line":34383},[178,81119,81120],{"class":319},"        name: ",[178,81122,81123],{"class":188},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[178,81125,33202],{"class":319},[178,81127,81128,81131,81134],{"class":180,"line":34389},[178,81129,81130],{"class":319},"        price: ",[178,81132,81133],{"class":188},"'289.00'",[178,81135,33202],{"class":319},[178,81137,81138,81141,81144],{"class":180,"line":34400},[178,81139,81140],{"class":319},"        picture: ",[178,81142,81143],{"class":188},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[178,81145,33202],{"class":319},[178,81147,81148],{"class":180,"line":34406},[178,81149,79612],{"class":319},[178,81151,81152],{"class":180,"line":34426},[178,81153,81105],{"class":319},[178,81155,81156,81158,81161],{"class":180,"line":34432},[178,81157,81110],{"class":319},[178,81159,81160],{"class":188},"'4001594'",[178,81162,33202],{"class":319},[178,81164,81165,81167,81170],{"class":180,"line":34443},[178,81166,81120],{"class":319},[178,81168,81169],{"class":188},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[178,81171,33202],{"class":319},[178,81173,81174,81176,81179],{"class":180,"line":34449},[178,81175,81130],{"class":319},[178,81177,81178],{"class":188},"'288.00'",[178,81180,33202],{"class":319},[178,81182,81183,81185,81188],{"class":180,"line":34455},[178,81184,81140],{"class":319},[178,81186,81187],{"class":188},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[178,81189,33202],{"class":319},[178,81191,81192],{"class":180,"line":34461},[178,81193,79612],{"class":319},[178,81195,81196],{"class":180,"line":34467},[178,81197,81105],{"class":319},[178,81199,81200,81202,81205],{"class":180,"line":34473},[178,81201,81110],{"class":319},[178,81203,81204],{"class":188},"'4001009'",[178,81206,33202],{"class":319},[178,81208,81209,81211,81214],{"class":180,"line":34479},[178,81210,81120],{"class":319},[178,81212,81213],{"class":188},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[178,81215,33202],{"class":319},[178,81217,81218,81220,81223],{"class":180,"line":34485},[178,81219,81130],{"class":319},[178,81221,81222],{"class":188},"'109.00'",[178,81224,33202],{"class":319},[178,81226,81227,81229,81232],{"class":180,"line":34505},[178,81228,81140],{"class":319},[178,81230,81231],{"class":188},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[178,81233,33202],{"class":319},[178,81235,81236],{"class":180,"line":34511},[178,81237,79612],{"class":319},[178,81239,81240],{"class":180,"line":34527},[178,81241,81105],{"class":319},[178,81243,81244,81246,81249],{"class":180,"line":34533},[178,81245,81110],{"class":319},[178,81247,81248],{"class":188},"'4001874'",[178,81250,33202],{"class":319},[178,81252,81253,81255,81258],{"class":180,"line":34547},[178,81254,81120],{"class":319},[178,81256,81257],{"class":188},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[178,81259,33202],{"class":319},[178,81261,81262,81264,81267],{"class":180,"line":34553},[178,81263,81130],{"class":319},[178,81265,81266],{"class":188},"'488.00'",[178,81268,33202],{"class":319},[178,81270,81271,81273,81276],{"class":180,"line":34568},[178,81272,81140],{"class":319},[178,81274,81275],{"class":188},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[178,81277,33202],{"class":319},[178,81279,81280],{"class":180,"line":34574},[178,81281,79612],{"class":319},[178,81283,81284],{"class":180,"line":34583},[178,81285,81105],{"class":319},[178,81287,81288,81290,81293],{"class":180,"line":34589},[178,81289,81110],{"class":319},[178,81291,81292],{"class":188},"'4001649'",[178,81294,33202],{"class":319},[178,81296,81297,81299,81302],{"class":180,"line":34598},[178,81298,81120],{"class":319},[178,81300,81301],{"class":188},"'大师监制龙泉青瓷茶叶罐'",[178,81303,33202],{"class":319},[178,81305,81306,81308,81311],{"class":180,"line":34604},[178,81307,81130],{"class":319},[178,81309,81310],{"class":188},"'139.00'",[178,81312,33202],{"class":319},[178,81314,81315,81317,81320],{"class":180,"line":34610},[178,81316,81140],{"class":319},[178,81318,81319],{"class":188},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[178,81321,33202],{"class":319},[178,81323,81324],{"class":180,"line":34619},[178,81325,79612],{"class":319},[178,81327,81328],{"class":180,"line":34625},[178,81329,81105],{"class":319},[178,81331,81332,81334,81337],{"class":180,"line":34636},[178,81333,81110],{"class":319},[178,81335,81336],{"class":188},"'3997185'",[178,81338,33202],{"class":319},[178,81340,81341,81343,81346],{"class":180,"line":34642},[178,81342,81120],{"class":319},[178,81344,81345],{"class":188},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[178,81347,33202],{"class":319},[178,81349,81350,81352,81355],{"class":180,"line":34661},[178,81351,81130],{"class":319},[178,81353,81354],{"class":188},"'108.00'",[178,81356,33202],{"class":319},[178,81358,81359,81361,81364],{"class":180,"line":34667},[178,81360,81140],{"class":319},[178,81362,81363],{"class":188},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[178,81365,33202],{"class":319},[178,81367,81368],{"class":180,"line":34678},[178,81369,79612],{"class":319},[178,81371,81372],{"class":180,"line":34684},[178,81373,81105],{"class":319},[178,81375,81376,81378,81381],{"class":180,"line":34704},[178,81377,81110],{"class":319},[178,81379,81380],{"class":188},"'3997403'",[178,81382,33202],{"class":319},[178,81384,81385,81387,81390],{"class":180,"line":34720},[178,81386,81120],{"class":319},[178,81388,81389],{"class":188},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[178,81391,33202],{"class":319},[178,81393,81394,81396,81399],{"class":180,"line":34726},[178,81395,81130],{"class":319},[178,81397,81398],{"class":188},"'100.00'",[178,81400,33202],{"class":319},[178,81402,81403,81405,81408],{"class":180,"line":34740},[178,81404,81140],{"class":319},[178,81406,81407],{"class":188},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[178,81409,33202],{"class":319},[178,81411,81412],{"class":180,"line":34746},[178,81413,79612],{"class":319},[178,81415,81416],{"class":180,"line":34752},[178,81417,81105],{"class":319},[178,81419,81420,81422,81425],{"class":180,"line":34763},[178,81421,81110],{"class":319},[178,81423,81424],{"class":188},"'3998274'",[178,81426,33202],{"class":319},[178,81428,81429,81431,81434],{"class":180,"line":34769},[178,81430,81120],{"class":319},[178,81432,81433],{"class":188},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[178,81435,33202],{"class":319},[178,81437,81438,81440,81442],{"class":180,"line":34775},[178,81439,81130],{"class":319},[178,81441,81310],{"class":188},[178,81443,33202],{"class":319},[178,81445,81446,81448,81451],{"class":180,"line":34785},[178,81447,81140],{"class":319},[178,81449,81450],{"class":188},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[178,81452,33202],{"class":319},[178,81454,81455],{"class":180,"line":34791},[178,81456,79612],{"class":319},[178,81458,81459],{"class":180,"line":34802},[178,81460,54833],{"class":319},[178,81462,81463],{"class":180,"line":34808},[178,81464,722],{"emptyLinePlaceholder":721},[178,81466,81467],{"class":180,"line":34818},[178,81468,81469],{"class":2008},"    \u002F\u002F 1.渲染函数\n",[178,81471,81472,81474,81476,81478,81480],{"class":180,"line":34823},[178,81473,71804],{"class":699},[178,81475,71807],{"class":184},[178,81477,944],{"class":319},[178,81479,5652],{"class":6985},[178,81481,14203],{"class":319},[178,81483,81484],{"class":180,"line":34829},[178,81485,81486],{"class":2008},"      \u002F\u002F 声明空字符串\n",[178,81488,81489,81492,81495,81497],{"class":180,"line":34878},[178,81490,81491],{"class":699},"      let",[178,81493,81494],{"class":319}," str ",[178,81496,330],{"class":699},[178,81498,71824],{"class":188},[178,81500,81501],{"class":180,"line":34925},[178,81502,71829],{"class":2008},[178,81504,81505,81507,81510,81512,81515,81518],{"class":180,"line":34930},[178,81506,59728],{"class":319},[178,81508,81509],{"class":184},"forEach",[178,81511,944],{"class":319},[178,81513,81514],{"class":6985},"item",[178,81516,81517],{"class":699}," =>",[178,81519,17330],{"class":319},[178,81521,81522,81524,81527,81530,81532,81535,81537,81540,81543,81545],{"class":180,"line":34936},[178,81523,62991],{"class":699},[178,81525,81526],{"class":319}," { ",[178,81528,81529],{"class":195},"name",[178,81531,14196],{"class":319},[178,81533,81534],{"class":195},"price",[178,81536,14196],{"class":319},[178,81538,81539],{"class":195},"picture",[178,81541,81542],{"class":319}," } ",[178,81544,330],{"class":699},[178,81546,81547],{"class":319}," item\n",[178,81549,81550,81553,81555],{"class":180,"line":34955},[178,81551,81552],{"class":319},"        str ",[178,81554,11238],{"class":699},[178,81556,71888],{"class":188},[178,81558,81559],{"class":180,"line":34961},[178,81560,81561],{"class":188},"          \u003Cdiv class=\"item\">\n",[178,81563,81564,81567,81569],{"class":180,"line":34981},[178,81565,81566],{"class":188},"            \u003Cimg src=\"${",[178,81568,81539],{"class":319},[178,81570,81571],{"class":188},"}\" alt=\"\">\n",[178,81573,81574,81577,81579],{"class":180,"line":34987},[178,81575,81576],{"class":188},"            \u003Cp class=\"name\">${",[178,81578,81529],{"class":319},[178,81580,81581],{"class":188},"}\u003C\u002Fp>\n",[178,81583,81584,81587,81589],{"class":180,"line":34993},[178,81585,81586],{"class":188},"            \u003Cp class=\"price\">${",[178,81588,81534],{"class":319},[178,81590,81581],{"class":188},[178,81592,81593],{"class":180,"line":35003},[178,81594,81595],{"class":188},"          \u003C\u002Fdiv>\n",[178,81597,81598],{"class":180,"line":35008},[178,81599,81600],{"class":188},"        `\n",[178,81602,81603],{"class":180,"line":35014},[178,81604,66535],{"class":319},[178,81606,81607],{"class":180,"line":35030},[178,81608,81609],{"class":2008},"      \u002F\u002F 追加给List\n",[178,81611,81612,81614,81616,81618,81621,81623,81625],{"class":180,"line":35075},[178,81613,57492],{"class":319},[178,81615,56120],{"class":184},[178,81617,944],{"class":319},[178,81619,81620],{"class":188},"'.list'",[178,81622,75969],{"class":319},[178,81624,330],{"class":699},[178,81626,75705],{"class":319},[178,81628,81629],{"class":180,"line":35081},[178,81630,3971],{"class":319},[178,81632,81633],{"class":180,"line":35087},[178,81634,81635],{"class":2008},"    \u002F\u002F 页面一打开就需要渲染\n",[178,81637,81638,81641],{"class":180,"line":35093},[178,81639,81640],{"class":184},"    render",[178,81642,81643],{"class":319},"(goodsList)\n",[178,81645,81646],{"class":180,"line":35104},[178,81647,81648],{"class":2008},"    \u002F\u002F 2.过滤筛选\n",[178,81650,81651,81653,81655,81657,81660,81662,81664,81666,81668,81670,81672,81674],{"class":180,"line":35110},[178,81652,54134],{"class":319},[178,81654,56120],{"class":184},[178,81656,944],{"class":319},[178,81658,81659],{"class":188},"'.filter'",[178,81661,32567],{"class":319},[178,81663,59534],{"class":184},[178,81665,944],{"class":319},[178,81667,59539],{"class":188},[178,81669,14196],{"class":319},[178,81671,2024],{"class":6985},[178,81673,81517],{"class":699},[178,81675,17330],{"class":319},[178,81677,81678],{"class":180,"line":35116},[178,81679,81680],{"class":2008},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[178,81682,81683,81685,81687,81690,81692,81694,81696,81698],{"class":180,"line":35122},[178,81684,59949],{"class":699},[178,81686,81526],{"class":319},[178,81688,81689],{"class":195},"tagName",[178,81691,14196],{"class":319},[178,81693,33272],{"class":195},[178,81695,81542],{"class":319},[178,81697,330],{"class":699},[178,81699,81700],{"class":319}," e.target\n",[178,81702,81703],{"class":180,"line":35140},[178,81704,81705],{"class":2008},"      \u002F\u002F 判断\n",[178,81707,81708,81710,81712,81714,81716],{"class":180,"line":35154},[178,81709,56201],{"class":699},[178,81711,68754],{"class":319},[178,81713,56207],{"class":699},[178,81715,69976],{"class":188},[178,81717,14203],{"class":319},[178,81719,81720],{"class":180,"line":35163},[178,81721,81722],{"class":2008},"        \u002F\u002F console.log(11)\n",[178,81724,81725],{"class":180,"line":35172},[178,81726,81727],{"class":2008},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[178,81729,81730],{"class":180,"line":35181},[178,81731,81732],{"class":2008},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[178,81734,81735,81737,81739,81741],{"class":180,"line":35190},[178,81736,53558],{"class":699},[178,81738,53561],{"class":319},[178,81740,330],{"class":699},[178,81742,81743],{"class":319}," goodsList\n",[178,81745,81746,81748,81751,81753,81756],{"class":180,"line":35196},[178,81747,4280],{"class":699},[178,81749,81750],{"class":319}," (dataset.index ",[178,81752,56207],{"class":699},[178,81754,81755],{"class":188}," '1'",[178,81757,14203],{"class":319},[178,81759,81760,81763,81765,81768,81771,81773,81775,81777,81780,81782,81784,81787,81789,81791,81793],{"class":180,"line":35202},[178,81761,81762],{"class":319},"          arr ",[178,81764,330],{"class":699},[178,81766,81767],{"class":319}," goodsList.",[178,81769,81770],{"class":184},"filter",[178,81772,944],{"class":319},[178,81774,81514],{"class":6985},[178,81776,81517],{"class":699},[178,81778,81779],{"class":319}," item.price ",[178,81781,3505],{"class":699},[178,81783,930],{"class":195},[178,81785,81786],{"class":699}," &&",[178,81788,81779],{"class":319},[178,81790,3394],{"class":699},[178,81792,7523],{"class":195},[178,81794,863],{"class":319},[178,81796,81797,81800,81802,81804,81806,81808,81811],{"class":180,"line":35210},[178,81798,81799],{"class":319},"        } ",[178,81801,3496],{"class":699},[178,81803,3499],{"class":699},[178,81805,81750],{"class":319},[178,81807,56207],{"class":699},[178,81809,81810],{"class":188}," '2'",[178,81812,14203],{"class":319},[178,81814,81815,81817,81819,81821,81823,81825,81827,81829,81831,81833,81835,81837,81839,81841,81844],{"class":180,"line":35215},[178,81816,81762],{"class":319},[178,81818,330],{"class":699},[178,81820,81767],{"class":319},[178,81822,81770],{"class":184},[178,81824,944],{"class":319},[178,81826,81514],{"class":6985},[178,81828,81517],{"class":699},[178,81830,81779],{"class":319},[178,81832,3505],{"class":699},[178,81834,7523],{"class":195},[178,81836,81786],{"class":699},[178,81838,81779],{"class":319},[178,81840,3394],{"class":699},[178,81842,81843],{"class":195}," 300",[178,81845,863],{"class":319},[178,81847,81848,81850,81852,81854,81856,81858,81861],{"class":180,"line":35221},[178,81849,81799],{"class":319},[178,81851,3496],{"class":699},[178,81853,3499],{"class":699},[178,81855,81750],{"class":319},[178,81857,56207],{"class":699},[178,81859,81860],{"class":188}," '3'",[178,81862,14203],{"class":319},[178,81864,81865,81867,81869,81871,81873,81875,81877,81879,81881,81883,81885],{"class":180,"line":35232},[178,81866,81762],{"class":319},[178,81868,330],{"class":699},[178,81870,81767],{"class":319},[178,81872,81770],{"class":184},[178,81874,944],{"class":319},[178,81876,81514],{"class":6985},[178,81878,81517],{"class":699},[178,81880,81779],{"class":319},[178,81882,3505],{"class":699},[178,81884,81843],{"class":195},[178,81886,863],{"class":319},[178,81888,81889],{"class":180,"line":35238},[178,81890,4312],{"class":319},[178,81892,81893],{"class":180,"line":35258},[178,81894,81895],{"class":2008},"        \u002F\u002F 渲染函数\n",[178,81897,81898,81900],{"class":180,"line":35264},[178,81899,72128],{"class":184},[178,81901,54139],{"class":319},[178,81903,81904],{"class":180,"line":35270},[178,81905,54125],{"class":319},[178,81907,81908],{"class":180,"line":35276},[178,81909,722],{"emptyLinePlaceholder":721},[178,81911,81912],{"class":180,"line":35293},[178,81913,35193],{"class":319},[178,81915,81916,81918,81920],{"class":180,"line":35299},[178,81917,357],{"class":319},[178,81919,53541],{"class":323},[178,81921,336],{"class":319},[178,81923,81924,81926,81928],{"class":180,"line":35305},[178,81925,367],{"class":319},[178,81927,376],{"class":323},[178,81929,336],{"class":319},[178,81931,81932],{"class":180,"line":35311},[178,81933,722],{"emptyLinePlaceholder":721},[178,81935,81936,81938,81940],{"class":180,"line":35317},[178,81937,367],{"class":319},[178,81939,52367],{"class":323},[178,81941,336],{"class":319},[14,81943,81945],{"id":81944},"_410-深入了解对象","4.10 深入了解对象",[387,81947,81949],{"id":81948},"_4101-创建对象","4.10.1 创建对象",[19,81951,81952],{},[3269,81953],{"alt":160,"src":81954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,81956,81957],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[387,81959,81961],{"id":81960},"_4102-构造函数","4.10.2 构造函数",[19,81963,81964,81967],{},[2093,81965,81966],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,81969,81970,81973],{},[2093,81971,81972],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[154,81975,81977],{"className":52365,"code":81976,"language":52367,"meta":160,"style":160},"\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",[70,81978,81979,81987,81992,82013,82026,82038,82050,82054,82059,82086,82091,82118],{"__ignoreMap":160},[178,81980,81981,81983,81985],{"class":180,"line":181},[178,81982,320],{"class":319},[178,81984,53541],{"class":323},[178,81986,336],{"class":319},[178,81988,81989],{"class":180,"line":263},[178,81990,81991],{"class":2008},"\u002F\u002F例：\n",[178,81993,81994,81996,81999,82001,82003,82005,82007,82009,82011],{"class":180,"line":274},[178,81995,56170],{"class":699},[178,81997,81998],{"class":184}," Pig",[178,82000,944],{"class":319},[178,82002,81529],{"class":6985},[178,82004,2318],{"class":319},[178,82006,71941],{"class":6985},[178,82008,2318],{"class":319},[178,82010,71958],{"class":6985},[178,82012,14203],{"class":319},[178,82014,82015,82018,82021,82023],{"class":180,"line":354},[178,82016,82017],{"class":195},"    this",[178,82019,82020],{"class":319},".name",[178,82022,330],{"class":699},[178,82024,82025],{"class":319},"name\n",[178,82027,82028,82030,82033,82035],{"class":180,"line":364},[178,82029,82017],{"class":195},[178,82031,82032],{"class":319},".age",[178,82034,330],{"class":699},[178,82036,82037],{"class":319},"age\n",[178,82039,82040,82042,82045,82047],{"class":180,"line":740},[178,82041,82017],{"class":195},[178,82043,82044],{"class":319},".gender",[178,82046,330],{"class":699},[178,82048,82049],{"class":319},"gender    \n",[178,82051,82052],{"class":180,"line":746},[178,82053,3371],{"class":319},[178,82055,82056],{"class":180,"line":752},[178,82057,82058],{"class":2008},"\u002F\u002F创建佩奇对象\n",[178,82060,82061,82063,82066,82068,82070,82072,82075,82077,82079,82081,82084],{"class":180,"line":757},[178,82062,8561],{"class":699},[178,82064,82065],{"class":195}," Peppa",[178,82067,13478],{"class":699},[178,82069,81998],{"class":184},[178,82071,944],{"class":319},[178,82073,82074],{"class":188},"'佩奇'",[178,82076,2318],{"class":319},[178,82078,2284],{"class":195},[178,82080,2318],{"class":319},[178,82082,82083],{"class":188},"'女'",[178,82085,863],{"class":319},[178,82087,82088],{"class":180,"line":763},[178,82089,82090],{"class":2008},"\u002F\u002F创建乔治对象\n",[178,82092,82093,82095,82098,82100,82102,82104,82107,82109,82111,82113,82116],{"class":180,"line":769},[178,82094,8561],{"class":699},[178,82096,82097],{"class":195}," George",[178,82099,13478],{"class":699},[178,82101,81998],{"class":184},[178,82103,944],{"class":319},[178,82105,82106],{"class":188},"'乔治'",[178,82108,2318],{"class":319},[178,82110,2021],{"class":195},[178,82112,2318],{"class":319},[178,82114,82115],{"class":188},"'男'",[178,82117,863],{"class":319},[178,82119,82120,82122,82124],{"class":180,"line":774},[178,82121,367],{"class":319},[178,82123,53541],{"class":323},[178,82125,336],{"class":319},[19,82127,82128],{},[3269,82129],{"alt":160,"src":82130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,82132,82133],{},[3269,82134],{"alt":160,"src":82135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,82137,82138],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,82140,82141],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,82143,82144],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,82146,82147],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,82149,82150],{},"这里用等号是因为：对象.属性=值",[19,82152,82153],{},"①利用对象字面量创建对象",[19,82155,82156],{},"const o={",[19,82158,82159],{},"name:'pink'",[19,82161,82162],{},"} ②利用new Object创建对象",[19,82164,82165],{},"const o=new Object({name:'pink'})",[19,82167,82168],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,82170,82171],{},"构造函数创建对象的执行过程：",[19,82173,82174],{},[3269,82175],{"alt":160,"src":82176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[387,82178,82180],{"id":82179},"_4103-实例成员","4.10.3 实例成员",[19,82182,82183],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[26,82185,82186,82189,82192],{},[29,82187,82188],{},"实例对象的属性和方法即为实例成员",[29,82190,82191],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[29,82193,82194],{},"构造函数创建的实例对象彼此独立互不影响",[387,82196,82198],{"id":82197},"_4104-静态成员","4.10.4 静态成员",[19,82200,82201],{},[3269,82202],{"alt":160,"src":82203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,82205,82206],{},"静态成员有Date.now() Math.PI Math.random()",[19,82208,82209],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,82211,82212],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,82214,82215],{},"function Pig(name) n {",[19,82217,82218],{},"this.name=name",[19,82220,2885],{},[19,82222,82223],{},"Pig.eyes=2",[19,82225,82226],{},"Pig.sayHai=function () { console.log(this) }",[19,82228,82229],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,82231,82232],{},"console.log(Pig.eyes) \u002F\u002F2",[19,82234,13093],{},[26,82236,82237,82240,82243,82246,82249],{},[29,82238,82239],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[29,82241,82242],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[29,82244,82245],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[29,82247,82248],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[29,82250,82251],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,82253,82254],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[387,82256,82258],{"id":82257},"_4105-内置构造函数","4.10.5 内置构造函数",[19,82260,82261],{},"内置构造函数包含：",[19,82263,82264],{},[3269,82265],{"alt":160,"src":82266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,82268,82269],{},[3269,82270],{"alt":160,"src":82271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,82273,82274],{},"这些基本数据类型，js对他们进行了包装",[53541,82276,82277],{},"\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",[23756,82279,82281],{"id":82280},"_41051-object","4.10.5.1 Object",[19,82283,82284],{},"Object 是内置的构造函数，用于创建普通对象",[19,82286,82287],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[154,82289,82291],{"className":52365,"code":82290,"language":52367,"meta":160,"style":160},"const user=new Object({name:'小明',age:15})\n",[70,82292,82293],{"__ignoreMap":160},[178,82294,82295],{"class":180,"line":181},[178,82296,82290],{"class":319},[19,82298,82299],{},"三个常用的静态方法：",[24668,82301,82303],{"id":82302},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,82305,82306],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,82308,82309],{},[3269,82310],{"alt":160,"src":82311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,82313,82314],{},[3269,82315],{"alt":160,"src":82316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[154,82318,82320],{"className":310,"code":82319,"language":312,"meta":160,"style":160},"\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",[70,82321,82322,82330,82338,82343,82348,82353,82358,82363,82368,82376],{"__ignoreMap":160},[178,82323,82324,82326,82328],{"class":180,"line":181},[178,82325,320],{"class":319},[178,82327,376],{"class":323},[178,82329,336],{"class":319},[178,82331,82332,82334,82336],{"class":180,"line":263},[178,82333,341],{"class":319},[178,82335,53541],{"class":323},[178,82337,336],{"class":319},[178,82339,82340],{"class":180,"line":274},[178,82341,82342],{"class":319},"    const o = { name: 'pink', age: 6 }\n",[178,82344,82345],{"class":180,"line":354},[178,82346,82347],{"class":319},"    \u002F\u002F 获得所有属性名\n",[178,82349,82350],{"class":180,"line":364},[178,82351,82352],{"class":319},"    const arr = Object.keys(o)\n",[178,82354,82355],{"class":180,"line":740},[178,82356,82357],{"class":319},"    console.log(arr)\n",[178,82359,82360],{"class":180,"line":746},[178,82361,82362],{"class":319},"    \u002F\u002F 获得所有属性值\n",[178,82364,82365],{"class":180,"line":752},[178,82366,82367],{"class":319},"    console.log(Object.values(o))\n",[178,82369,82370,82372,82374],{"class":180,"line":757},[178,82371,357],{"class":319},[178,82373,53541],{"class":323},[178,82375,336],{"class":319},[178,82377,82378,82380,82382],{"class":180,"line":763},[178,82379,367],{"class":319},[178,82381,376],{"class":323},[178,82383,336],{"class":319},[24668,82385,82387],{"id":82386},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,82389,82390],{},"Object.assign(oo,o)",[19,82392,82393],{},"后的东西添加给前 是追加",[19,82395,82396],{},[3269,82397],{"alt":160,"src":82398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,82400,82401],{},[3269,82402],{"alt":160,"src":82403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[154,82405,82407],{"className":310,"code":82406,"language":312,"meta":160,"style":160},"\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",[70,82408,82409,82417,82425,82429,82433,82437,82441,82445,82449,82454,82459,82464,82469,82474,82482],{"__ignoreMap":160},[178,82410,82411,82413,82415],{"class":180,"line":181},[178,82412,320],{"class":319},[178,82414,376],{"class":323},[178,82416,336],{"class":319},[178,82418,82419,82421,82423],{"class":180,"line":263},[178,82420,341],{"class":319},[178,82422,53541],{"class":323},[178,82424,336],{"class":319},[178,82426,82427],{"class":180,"line":274},[178,82428,82342],{"class":319},[178,82430,82431],{"class":180,"line":354},[178,82432,82347],{"class":319},[178,82434,82435],{"class":180,"line":364},[178,82436,82352],{"class":319},[178,82438,82439],{"class":180,"line":740},[178,82440,82357],{"class":319},[178,82442,82443],{"class":180,"line":746},[178,82444,82362],{"class":319},[178,82446,82447],{"class":180,"line":752},[178,82448,82367],{"class":319},[178,82450,82451],{"class":180,"line":757},[178,82452,82453],{"class":319},"    const oo = {}\n",[178,82455,82456],{"class":180,"line":763},[178,82457,82458],{"class":319},"    Object.assign(oo, o)\n",[178,82460,82461],{"class":180,"line":769},[178,82462,82463],{"class":319},"    console.log(oo)\n",[178,82465,82466],{"class":180,"line":774},[178,82467,82468],{"class":319},"    Object.assign(o, { gender: '女' })\n",[178,82470,82471],{"class":180,"line":780},[178,82472,82473],{"class":319},"    console.log(o)\n",[178,82475,82476,82478,82480],{"class":180,"line":786},[178,82477,357],{"class":319},[178,82479,53541],{"class":323},[178,82481,336],{"class":319},[178,82483,82484,82486,82488],{"class":180,"line":792},[178,82485,367],{"class":319},[178,82487,376],{"class":323},[178,82489,336],{"class":319},[19,82491,82492],{},[3269,82493],{"alt":160,"src":82494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[23756,82496,82498],{"id":82497},"_41052-array","4.10.5.2 Array",[19,82500,82501],{},"Array 是内置的构造函数，用于创建数组",[19,82503,82504],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[154,82506,82508],{"className":52365,"code":82507,"language":52367,"meta":160,"style":160},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[70,82509,82510,82515],{"__ignoreMap":160},[178,82511,82512],{"class":180,"line":181},[178,82513,82514],{"class":319},"const arr=new Array(3,5)\n",[178,82516,82517],{"class":180,"line":263},[178,82518,82519],{"class":319},"console.log(arr)  \u002F\u002F[3,5]\n",[19,82521,82522],{},"Array的实例方法，这个方法是实例成员",[19,82524,82525],{},[3269,82526],{"alt":160,"src":82527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24668,82529,82531],{"id":82530},"_410521-reduce","4.10.5.2.1 reduce",[19,82533,82534],{},[3269,82535],{"alt":160,"src":82536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[154,82538,82540],{"className":310,"code":82539,"language":312,"meta":160,"style":160},"\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",[70,82541,82542,82550,82558,82563,82568,82573,82578,82582,82587,82592,82597,82601,82606,82611,82615,82620,82625,82630,82638],{"__ignoreMap":160},[178,82543,82544,82546,82548],{"class":180,"line":181},[178,82545,320],{"class":319},[178,82547,376],{"class":323},[178,82549,336],{"class":319},[178,82551,82552,82554,82556],{"class":180,"line":263},[178,82553,341],{"class":319},[178,82555,53541],{"class":323},[178,82557,336],{"class":319},[178,82559,82560],{"class":180,"line":274},[178,82561,82562],{"class":319},"    const arr = [1, 5, 8]\n",[178,82564,82565],{"class":180,"line":354},[178,82566,82567],{"class":319},"    \u002F\u002F 1.没有初始值\n",[178,82569,82570],{"class":180,"line":364},[178,82571,82572],{"class":319},"    const total = arr.reduce(function (prev, current) {\n",[178,82574,82575],{"class":180,"line":740},[178,82576,82577],{"class":319},"      return prev + current\n",[178,82579,82580],{"class":180,"line":746},[178,82581,35193],{"class":319},[178,82583,82584],{"class":180,"line":752},[178,82585,82586],{"class":319},"    console.log(total)   \u002F\u002F14\n",[178,82588,82589],{"class":180,"line":757},[178,82590,82591],{"class":319},"    \u002F\u002F 2.有初始值\n",[178,82593,82594],{"class":180,"line":763},[178,82595,82596],{"class":319},"    const total1 = arr.reduce(function (prev, current) {\n",[178,82598,82599],{"class":180,"line":769},[178,82600,82577],{"class":319},[178,82602,82603],{"class":180,"line":774},[178,82604,82605],{"class":319},"    }, 10)\n",[178,82607,82608],{"class":180,"line":780},[178,82609,82610],{"class":319},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[178,82612,82613],{"class":180,"line":786},[178,82614,722],{"emptyLinePlaceholder":721},[178,82616,82617],{"class":180,"line":792},[178,82618,82619],{"class":319},"    \u002F\u002F 3.箭头函数写法\n",[178,82621,82622],{"class":180,"line":798},[178,82623,82624],{"class":319},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[178,82626,82627],{"class":180,"line":804},[178,82628,82629],{"class":319},"    console.log(total2)   \u002F\u002F24\n",[178,82631,82632,82634,82636],{"class":180,"line":810},[178,82633,357],{"class":319},[178,82635,53541],{"class":323},[178,82637,336],{"class":319},[178,82639,82640,82642,82644],{"class":180,"line":816},[178,82641,367],{"class":319},[178,82643,376],{"class":323},[178,82645,336],{"class":319},[19,82647,82648],{},"执行过程：",[26,82650,82651,82654,82657],{},[29,82652,82653],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[29,82655,82656],{},"每一次循环，把返回值给作为下一次循环的上一次值",[29,82658,82659],{},"如果有起始值，则起始值作为上一次值",[154,82661,82663],{"className":310,"code":82662,"language":312,"meta":160,"style":160},"\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",[70,82664,82665,82673,82681,82685,82689,82693,82697,82701,82705,82710,82715,82720,82725,82730,82734,82738,82742,82746,82750,82754,82759,82763,82768,82772,82777,82782,82786,82790,82794,82802],{"__ignoreMap":160},[178,82666,82667,82669,82671],{"class":180,"line":181},[178,82668,320],{"class":319},[178,82670,376],{"class":323},[178,82672,336],{"class":319},[178,82674,82675,82677,82679],{"class":180,"line":263},[178,82676,341],{"class":319},[178,82678,53541],{"class":323},[178,82680,336],{"class":319},[178,82682,82683],{"class":180,"line":274},[178,82684,82562],{"class":319},[178,82686,82687],{"class":180,"line":354},[178,82688,82567],{"class":319},[178,82690,82691],{"class":180,"line":364},[178,82692,82572],{"class":319},[178,82694,82695],{"class":180,"line":740},[178,82696,82577],{"class":319},[178,82698,82699],{"class":180,"line":746},[178,82700,35193],{"class":319},[178,82702,82703],{"class":180,"line":752},[178,82704,82586],{"class":319},[178,82706,82707],{"class":180,"line":757},[178,82708,82709],{"class":319},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[178,82711,82712],{"class":180,"line":763},[178,82713,82714],{"class":319},"    \u002F\u002F     1              5                    6\n",[178,82716,82717],{"class":180,"line":769},[178,82718,82719],{"class":319},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[178,82721,82722],{"class":180,"line":774},[178,82723,82724],{"class":319},"    \u002F\u002F     6              8                    14\n",[178,82726,82727],{"class":180,"line":780},[178,82728,82729],{"class":319},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[178,82731,82732],{"class":180,"line":786},[178,82733,82591],{"class":319},[178,82735,82736],{"class":180,"line":792},[178,82737,82596],{"class":319},[178,82739,82740],{"class":180,"line":798},[178,82741,82577],{"class":319},[178,82743,82744],{"class":180,"line":804},[178,82745,82605],{"class":319},[178,82747,82748],{"class":180,"line":810},[178,82749,82610],{"class":319},[178,82751,82752],{"class":180,"line":816},[178,82753,82709],{"class":319},[178,82755,82756],{"class":180,"line":822},[178,82757,82758],{"class":319},"    \u002F\u002F     10             1                     11\n",[178,82760,82761],{"class":180,"line":827},[178,82762,82719],{"class":319},[178,82764,82765],{"class":180,"line":832},[178,82766,82767],{"class":319},"    \u002F\u002F     11             5                    16\n",[178,82769,82770],{"class":180,"line":850},[178,82771,82719],{"class":319},[178,82773,82774],{"class":180,"line":866},[178,82775,82776],{"class":319},"    \u002F\u002F     16             8                    24\n",[178,82778,82779],{"class":180,"line":877},[178,82780,82781],{"class":319},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[178,82783,82784],{"class":180,"line":882},[178,82785,82619],{"class":319},[178,82787,82788],{"class":180,"line":898},[178,82789,82624],{"class":319},[178,82791,82792],{"class":180,"line":914},[178,82793,82629],{"class":319},[178,82795,82796,82798,82800],{"class":180,"line":919},[178,82797,357],{"class":319},[178,82799,53541],{"class":323},[178,82801,336],{"class":319},[178,82803,82804,82806,82808],{"class":180,"line":935},[178,82805,367],{"class":319},[178,82807,376],{"class":323},[178,82809,336],{"class":319},[24668,82811,82813],{"id":82812},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,82815,82816],{},[3269,82817],{"alt":160,"src":82818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[154,82820,82822],{"className":310,"code":82821,"language":312,"meta":160,"style":160},"\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",[70,82823,82824,82832,82840,82845,82850,82855,82860,82864,82869,82874,82879,82884,82889,82894,82898,82903,82907,82912,82920],{"__ignoreMap":160},[178,82825,82826,82828,82830],{"class":180,"line":181},[178,82827,320],{"class":319},[178,82829,376],{"class":323},[178,82831,336],{"class":319},[178,82833,82834,82836,82838],{"class":180,"line":263},[178,82835,341],{"class":319},[178,82837,53541],{"class":323},[178,82839,336],{"class":319},[178,82841,82842],{"class":180,"line":274},[178,82843,82844],{"class":319},"    const arr = [\n",[178,82846,82847],{"class":180,"line":354},[178,82848,82849],{"class":319},"      { name: '张三', salary: 10000 },\n",[178,82851,82852],{"class":180,"line":364},[178,82853,82854],{"class":319},"      { name: '李四', salary: 10000 },\n",[178,82856,82857],{"class":180,"line":740},[178,82858,82859],{"class":319},"      { name: '王五', salary: 10000 }\n",[178,82861,82862],{"class":180,"line":746},[178,82863,54833],{"class":319},[178,82865,82866],{"class":180,"line":752},[178,82867,82868],{"class":319},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[178,82870,82871],{"class":180,"line":757},[178,82872,82873],{"class":319},"    \u002F\u002F prev是累计值\n",[178,82875,82876],{"class":180,"line":763},[178,82877,82878],{"class":319},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[178,82880,82881],{"class":180,"line":769},[178,82882,82883],{"class":319},"    console.log(total)\n",[178,82885,82886],{"class":180,"line":774},[178,82887,82888],{"class":319},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[178,82890,82891],{"class":180,"line":780},[178,82892,82893],{"class":319},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[178,82895,82896],{"class":180,"line":786},[178,82897,82888],{"class":319},[178,82899,82900],{"class":180,"line":792},[178,82901,82902],{"class":319},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[178,82904,82905],{"class":180,"line":798},[178,82906,82888],{"class":319},[178,82908,82909],{"class":180,"line":804},[178,82910,82911],{"class":319},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[178,82913,82914,82916,82918],{"class":180,"line":810},[178,82915,357],{"class":319},[178,82917,53541],{"class":323},[178,82919,336],{"class":319},[178,82921,82922,82924,82926],{"class":180,"line":816},[178,82923,367],{"class":319},[178,82925,376],{"class":323},[178,82927,336],{"class":319},[24668,82929,82931],{"id":82930},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,82933,82934],{},[3269,82935],{"alt":160,"src":82936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,82938,82939],{},[3269,82940],{"alt":160,"src":82941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[26,82943,82944],{},[29,82945,82946],{},"find()",[19,82948,82949],{},"循环查找，找到第一个就ok",[19,82951,82952],{},[2178,82953,82956],{"href":82954,"rel":82955},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[25619],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[154,82958,82960],{"className":52365,"code":82959,"language":52367,"meta":160,"style":160},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[70,82961,82962,82967,82972],{"__ignoreMap":160},[178,82963,82964],{"class":180,"line":181},[178,82965,82966],{"class":319},"const array1 = [5, 12, 8, 130, 44]\n",[178,82968,82969],{"class":180,"line":263},[178,82970,82971],{"class":319},"const found = array1.find((element) => element > 10)\n",[178,82973,82974],{"class":180,"line":274},[178,82975,82976],{"class":319},"console.log(found)  \u002F\u002F12\n",[19,82978,82979,82981,82982,82987,82988,82991,82992,82994,82995,83000,83001,83003,83004,83006,83007,1730,83009],{},[70,82980,82946],{}," 方法是一个",[2178,82983,82986],{"href":82984,"rel":82985},"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",[25619],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[70,82989,82990],{},"callbackFn"," 函数，直到 ",[70,82993,82990],{}," 返回一个",[2178,82996,82999],{"href":82997,"rel":82998},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[25619],"真值","。然后 ",[70,83002,82946],{}," 返回该元素并停止迭代数组。如果 ",[70,83005,82990],{}," 从未返回真值，则 ",[70,83008,82946],{},[70,83010,83011],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[154,83013,83015],{"className":310,"code":83014,"language":312,"meta":160,"style":160},"\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",[70,83016,83017,83025,83033,83038,83043,83048,83052,83057,83062,83066,83071,83076,83080,83084,83089,83094,83098,83102,83107,83112,83117,83122,83127,83131,83136,83141,83146,83151,83155,83160,83168],{"__ignoreMap":160},[178,83018,83019,83021,83023],{"class":180,"line":181},[178,83020,320],{"class":319},[178,83022,376],{"class":323},[178,83024,336],{"class":319},[178,83026,83027,83029,83031],{"class":180,"line":263},[178,83028,341],{"class":319},[178,83030,53541],{"class":323},[178,83032,336],{"class":319},[178,83034,83035],{"class":180,"line":274},[178,83036,83037],{"class":319},"    const arr = ['red', 'blue', 'green']\n",[178,83039,83040],{"class":180,"line":354},[178,83041,83042],{"class":319},"    const found = arr.find(item => item === 'pink')\n",[178,83044,83045],{"class":180,"line":364},[178,83046,83047],{"class":319},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[178,83049,83050],{"class":180,"line":740},[178,83051,722],{"emptyLinePlaceholder":721},[178,83053,83054],{"class":180,"line":746},[178,83055,83056],{"class":319},"    \u002F\u002F 使用场景，用于查找数据\n",[178,83058,83059],{"class":180,"line":752},[178,83060,83061],{"class":319},"    const arr1 = [\n",[178,83063,83064],{"class":180,"line":757},[178,83065,81105],{"class":319},[178,83067,83068],{"class":180,"line":763},[178,83069,83070],{"class":319},"        name: '小米',\n",[178,83072,83073],{"class":180,"line":769},[178,83074,83075],{"class":319},"        price: 1999\n",[178,83077,83078],{"class":180,"line":774},[178,83079,79612],{"class":319},[178,83081,83082],{"class":180,"line":780},[178,83083,81105],{"class":319},[178,83085,83086],{"class":180,"line":786},[178,83087,83088],{"class":319},"        name: '华为',\n",[178,83090,83091],{"class":180,"line":792},[178,83092,83093],{"class":319},"        price: 3999\n",[178,83095,83096],{"class":180,"line":798},[178,83097,54125],{"class":319},[178,83099,83100],{"class":180,"line":804},[178,83101,54833],{"class":319},[178,83103,83104],{"class":180,"line":810},[178,83105,83106],{"class":319},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[178,83108,83109],{"class":180,"line":816},[178,83110,83111],{"class":319},"    \u002F\u002F const found1 = arr1.find(item => {\n",[178,83113,83114],{"class":180,"line":822},[178,83115,83116],{"class":319},"    \u002F\u002F   if (item.name === '小米') {\n",[178,83118,83119],{"class":180,"line":827},[178,83120,83121],{"class":319},"    \u002F\u002F     return item\n",[178,83123,83124],{"class":180,"line":832},[178,83125,83126],{"class":319},"    \u002F\u002F   }\n",[178,83128,83129],{"class":180,"line":850},[178,83130,65010],{"class":319},[178,83132,83133],{"class":180,"line":866},[178,83134,83135],{"class":319},"    \u002F\u002F 另一种写法\n",[178,83137,83138],{"class":180,"line":877},[178,83139,83140],{"class":319},"    const found1 = arr1.find(item => {\n",[178,83142,83143],{"class":180,"line":882},[178,83144,83145],{"class":319},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[178,83147,83148],{"class":180,"line":898},[178,83149,83150],{"class":319},"      return item.name = '小米'\n",[178,83152,83153],{"class":180,"line":914},[178,83154,35193],{"class":319},[178,83156,83157],{"class":180,"line":919},[178,83158,83159],{"class":319},"    console.log(found1)\n",[178,83161,83162,83164,83166],{"class":180,"line":935},[178,83163,357],{"class":319},[178,83165,53541],{"class":323},[178,83167,336],{"class":319},[178,83169,83170,83172,83174],{"class":180,"line":952},[178,83171,367],{"class":319},[178,83173,376],{"class":323},[178,83175,336],{"class":319},[19,83177,83178],{},[3269,83179],{"alt":160,"src":83180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,83182,83183],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[26,83185,83186],{"start":263},[29,83187,83188],{},"every()返回的是布尔值",[19,83190,83191],{},[2178,83192,83195],{"href":83193,"rel":83194},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[25619],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,83197,83198],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,83200,83201],{},"some是只有有一个就没问题",[19,83203,83204],{},"every是必须全是才行",[154,83206,83210],{"className":83207,"code":83208,"language":83209,"meta":160,"style":160},"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",[70,83211,83212,83228,83242,83246,83255],{"__ignoreMap":160},[178,83213,83214,83216,83219,83221,83223,83226],{"class":180,"line":181},[178,83215,56170],{"class":699},[178,83217,83218],{"class":319}," isBigEnough(element, ",[178,83220,75778],{"class":699},[178,83222,14196],{"class":319},[178,83224,83225],{"class":699},"array",[178,83227,14203],{"class":319},[178,83229,83230,83233,83236,83238,83240],{"class":180,"line":263},[178,83231,83232],{"class":699},"  return",[178,83234,83235],{"class":319}," element ",[178,83237,3505],{"class":699},[178,83239,3822],{"class":195},[178,83241,3100],{"class":319},[178,83243,83244],{"class":180,"line":274},[178,83245,3371],{"class":319},[178,83247,83248,83251,83253],{"class":180,"line":354},[178,83249,83250],{"class":319},"[12, 5, 8, 130, 44].every(isBigEnough); ",[178,83252,35061],{"class":699},[178,83254,56237],{"class":319},[178,83256,83257,83260,83262],{"class":180,"line":364},[178,83258,83259],{"class":319},"[12, 54, 18, 130, 44].every(isBigEnough); ",[178,83261,35061],{"class":699},[178,83263,59661],{"class":319},[154,83265,83267],{"className":310,"code":83266,"language":312,"meta":160,"style":160},"\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",[70,83268,83269,83277,83285,83290,83294,83299,83304,83312],{"__ignoreMap":160},[178,83270,83271,83273,83275],{"class":180,"line":181},[178,83272,320],{"class":319},[178,83274,376],{"class":323},[178,83276,336],{"class":319},[178,83278,83279,83281,83283],{"class":180,"line":263},[178,83280,341],{"class":319},[178,83282,53541],{"class":323},[178,83284,336],{"class":319},[178,83286,83287],{"class":180,"line":274},[178,83288,83289],{"class":319},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[178,83291,83292],{"class":180,"line":354},[178,83293,80042],{"class":319},[178,83295,83296],{"class":180,"line":364},[178,83297,83298],{"class":319},"    const flag = arr.every(item => item >= 10)\n",[178,83300,83301],{"class":180,"line":740},[178,83302,83303],{"class":319},"    console.log(flag)    \u002F\u002Ftrue\n",[178,83305,83306,83308,83310],{"class":180,"line":746},[178,83307,357],{"class":319},[178,83309,53541],{"class":323},[178,83311,336],{"class":319},[178,83313,83314,83316,83318],{"class":180,"line":752},[178,83315,367],{"class":319},[178,83317,376],{"class":323},[178,83319,336],{"class":319},[154,83321,83323],{"className":310,"code":83322,"language":312,"meta":160,"style":160},"\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",[70,83324,83325,83333,83341,83345,83350,83355,83360,83368],{"__ignoreMap":160},[178,83326,83327,83329,83331],{"class":180,"line":181},[178,83328,320],{"class":319},[178,83330,376],{"class":323},[178,83332,336],{"class":319},[178,83334,83335,83337,83339],{"class":180,"line":263},[178,83336,341],{"class":319},[178,83338,53541],{"class":323},[178,83340,336],{"class":319},[178,83342,83343],{"class":180,"line":274},[178,83344,83289],{"class":319},[178,83346,83347],{"class":180,"line":354},[178,83348,83349],{"class":319},"    const arr = [10, 0, 5]\n",[178,83351,83352],{"class":180,"line":364},[178,83353,83354],{"class":319},"    const flag = arr.some(item => item >= 10)\n",[178,83356,83357],{"class":180,"line":740},[178,83358,83359],{"class":319},"    console.log(flag)   \u002F\u002Ftrue\n",[178,83361,83362,83364,83366],{"class":180,"line":746},[178,83363,357],{"class":319},[178,83365,53541],{"class":323},[178,83367,336],{"class":319},[178,83369,83370,83372,83374],{"class":180,"line":752},[178,83371,367],{"class":319},[178,83373,376],{"class":323},[178,83375,336],{"class":319},[24668,83377,83379],{"id":83378},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,83381,83382],{},[3269,83383],{"alt":160,"src":83384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[154,83386,83388],{"className":52365,"code":83387,"language":52367,"meta":160,"style":160},"\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",[70,83389,83390,83400,83414,83418,83426,83440,83460,83472,83480,83487,83499,83511,83523,83535,83545,83555,83559,83567,83575,83579,83587,83599,83607,83629,83634,83639,83672,83680,83688,83692],{"__ignoreMap":160},[178,83391,83392,83394,83396,83398],{"class":180,"line":181},[178,83393,53029],{"class":319},[178,83395,53032],{"class":323},[178,83397,53035],{"class":184},[178,83399,336],{"class":319},[178,83401,83402,83404,83406,83408,83410,83412],{"class":180,"line":263},[178,83403,320],{"class":319},[178,83405,52367],{"class":323},[178,83407,53046],{"class":184},[178,83409,330],{"class":319},[178,83411,53051],{"class":188},[178,83413,336],{"class":319},[178,83415,83416],{"class":180,"line":274},[178,83417,722],{"emptyLinePlaceholder":721},[178,83419,83420,83422,83424],{"class":180,"line":354},[178,83421,320],{"class":319},[178,83423,53064],{"class":323},[178,83425,336],{"class":319},[178,83427,83428,83430,83432,83434,83436,83438],{"class":180,"line":364},[178,83429,341],{"class":319},[178,83431,53074],{"class":323},[178,83433,53077],{"class":184},[178,83435,330],{"class":319},[178,83437,53082],{"class":188},[178,83439,336],{"class":319},[178,83441,83442,83444,83446,83448,83450,83452,83454,83456,83458],{"class":180,"line":740},[178,83443,341],{"class":319},[178,83445,53074],{"class":323},[178,83447,426],{"class":184},[178,83449,330],{"class":319},[178,83451,53121],{"class":188},[178,83453,53101],{"class":184},[178,83455,330],{"class":319},[178,83457,53128],{"class":188},[178,83459,336],{"class":319},[178,83461,83462,83464,83466,83468,83470],{"class":180,"line":746},[178,83463,341],{"class":319},[178,83465,53137],{"class":323},[178,83467,53140],{"class":319},[178,83469,53137],{"class":323},[178,83471,336],{"class":319},[178,83473,83474,83476,83478],{"class":180,"line":752},[178,83475,341],{"class":319},[178,83477,1853],{"class":323},[178,83479,336],{"class":319},[178,83481,83482,83485],{"class":180,"line":757},[178,83483,83484],{"class":323},"    div",[178,83486,17330],{"class":319},[178,83488,83489,83491,83493,83495,83497],{"class":180,"line":763},[178,83490,56492],{"class":195},[178,83492,53167],{"class":319},[178,83494,1002],{"class":195},[178,83496,53222],{"class":699},[178,83498,3100],{"class":319},[178,83500,83501,83503,83505,83507,83509],{"class":180,"line":769},[178,83502,56506],{"class":195},[178,83504,53167],{"class":319},[178,83506,2341],{"class":195},[178,83508,53222],{"class":699},[178,83510,3100],{"class":319},[178,83512,83513,83515,83517,83519,83521],{"class":180,"line":774},[178,83514,59080],{"class":195},[178,83516,53167],{"class":319},[178,83518,2341],{"class":195},[178,83520,53222],{"class":699},[178,83522,3100],{"class":319},[178,83524,83525,83527,83529,83531,83533],{"class":180,"line":780},[178,83526,66853],{"class":195},[178,83528,53167],{"class":319},[178,83530,2438],{"class":195},[178,83532,53222],{"class":699},[178,83534,3100],{"class":319},[178,83536,83537,83539,83541,83543],{"class":180,"line":786},[178,83538,59007],{"class":195},[178,83540,53167],{"class":319},[178,83542,53322],{"class":195},[178,83544,3100],{"class":319},[178,83546,83547,83549,83551,83553],{"class":180,"line":792},[178,83548,56605],{"class":195},[178,83550,53167],{"class":319},[178,83552,53375],{"class":195},[178,83554,3100],{"class":319},[178,83556,83557],{"class":180,"line":798},[178,83558,3971],{"class":319},[178,83560,83561,83563,83565],{"class":180,"line":804},[178,83562,357],{"class":319},[178,83564,1853],{"class":323},[178,83566,336],{"class":319},[178,83568,83569,83571,83573],{"class":180,"line":810},[178,83570,367],{"class":319},[178,83572,53064],{"class":323},[178,83574,336],{"class":319},[178,83576,83577],{"class":180,"line":816},[178,83578,722],{"emptyLinePlaceholder":721},[178,83580,83581,83583,83585],{"class":180,"line":822},[178,83582,320],{"class":319},[178,83584,376],{"class":323},[178,83586,336],{"class":319},[178,83588,83589,83591,83593,83595,83597],{"class":180,"line":827},[178,83590,341],{"class":319},[178,83592,53341],{"class":323},[178,83594,57035],{"class":319},[178,83596,53341],{"class":323},[178,83598,336],{"class":319},[178,83600,83601,83603,83605],{"class":180,"line":832},[178,83602,341],{"class":319},[178,83604,53541],{"class":323},[178,83606,336],{"class":319},[178,83608,83609,83611,83614,83616,83619,83622,83624,83627],{"class":180,"line":850},[178,83610,12982],{"class":699},[178,83612,83613],{"class":195}," spec",[178,83615,734],{"class":699},[178,83617,83618],{"class":319}," { size: ",[178,83620,83621],{"class":188},"'40cm*40cm'",[178,83623,57185],{"class":319},[178,83625,83626],{"class":188},"'黑色'",[178,83628,57325],{"class":319},[178,83630,83631],{"class":180,"line":866},[178,83632,83633],{"class":2008},"    \u002F\u002F const arr = Object.values(spec)\n",[178,83635,83636],{"class":180,"line":877},[178,83637,83638],{"class":2008},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[178,83640,83641,83643,83645,83647,83650,83652,83654,83657,83660,83663,83665,83667,83670],{"class":180,"line":882},[178,83642,54134],{"class":319},[178,83644,56120],{"class":184},[178,83646,944],{"class":319},[178,83648,83649],{"class":188},"'div'",[178,83651,75969],{"class":319},[178,83653,330],{"class":699},[178,83655,83656],{"class":319}," Object.",[178,83658,83659],{"class":184},"values",[178,83661,83662],{"class":319},"(spec).",[178,83664,75943],{"class":184},[178,83666,944],{"class":319},[178,83668,83669],{"class":188},"'\u002F'",[178,83671,863],{"class":319},[178,83673,83674,83676,83678],{"class":180,"line":898},[178,83675,357],{"class":319},[178,83677,53541],{"class":323},[178,83679,336],{"class":319},[178,83681,83682,83684,83686],{"class":180,"line":914},[178,83683,367],{"class":319},[178,83685,376],{"class":323},[178,83687,336],{"class":319},[178,83689,83690],{"class":180,"line":919},[178,83691,722],{"emptyLinePlaceholder":721},[178,83693,83694,83696,83698],{"class":180,"line":935},[178,83695,367],{"class":319},[178,83697,52367],{"class":323},[178,83699,336],{"class":319},[19,83701,83702],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24668,83704,83706],{"id":83705},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,83708,83709],{},"静态方法，将伪数组转换为真数组",[19,83711,83712],{},[3269,83713],{"alt":160,"src":83714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[154,83716,83718],{"className":310,"code":83717,"language":312,"meta":160,"style":160},"\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",[70,83719,83720,83728,83736,83748,83760,83772,83780,83788,83793,83798,83803,83808,83816],{"__ignoreMap":160},[178,83721,83722,83724,83726],{"class":180,"line":181},[178,83723,320],{"class":319},[178,83725,376],{"class":323},[178,83727,336],{"class":319},[178,83729,83730,83732,83734],{"class":180,"line":263},[178,83731,341],{"class":319},[178,83733,2946],{"class":323},[178,83735,336],{"class":319},[178,83737,83738,83740,83742,83744,83746],{"class":180,"line":274},[178,83739,53071],{"class":319},[178,83741,29],{"class":323},[178,83743,57035],{"class":319},[178,83745,29],{"class":323},[178,83747,336],{"class":319},[178,83749,83750,83752,83754,83756,83758],{"class":180,"line":354},[178,83751,53071],{"class":319},[178,83753,29],{"class":323},[178,83755,57035],{"class":319},[178,83757,29],{"class":323},[178,83759,336],{"class":319},[178,83761,83762,83764,83766,83768,83770],{"class":180,"line":364},[178,83763,53071],{"class":319},[178,83765,29],{"class":323},[178,83767,57035],{"class":319},[178,83769,29],{"class":323},[178,83771,336],{"class":319},[178,83773,83774,83776,83778],{"class":180,"line":740},[178,83775,357],{"class":319},[178,83777,2946],{"class":323},[178,83779,336],{"class":319},[178,83781,83782,83784,83786],{"class":180,"line":746},[178,83783,341],{"class":319},[178,83785,53541],{"class":323},[178,83787,336],{"class":319},[178,83789,83790],{"class":180,"line":752},[178,83791,83792],{"class":319},"    const lis = document.querySelectorAll('li')\n",[178,83794,83795],{"class":180,"line":757},[178,83796,83797],{"class":319},"    const liss = Array.from(lis)\n",[178,83799,83800],{"class":180,"line":763},[178,83801,83802],{"class":319},"    liss.pop()\n",[178,83804,83805],{"class":180,"line":769},[178,83806,83807],{"class":319},"    console.log(liss)\n",[178,83809,83810,83812,83814],{"class":180,"line":774},[178,83811,357],{"class":319},[178,83813,53541],{"class":323},[178,83815,336],{"class":319},[178,83817,83818,83820,83822],{"class":180,"line":780},[178,83819,367],{"class":319},[178,83821,376],{"class":323},[178,83823,336],{"class":319},[19,83825,83826],{},[3269,83827],{"alt":160,"src":83828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[23756,83830,83832],{"id":83831},"_41053-string","4.10.5.3 String",[19,83834,83835],{},[3269,83836],{"alt":160,"src":83837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24668,83839,83841],{"id":83840},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[154,83843,83845],{"className":310,"code":83844,"language":312,"meta":160,"style":160},"\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",[70,83846,83847,83855,83863,83868,83873,83878,83882,83887,83892,83897,83905],{"__ignoreMap":160},[178,83848,83849,83851,83853],{"class":180,"line":181},[178,83850,320],{"class":319},[178,83852,376],{"class":323},[178,83854,336],{"class":319},[178,83856,83857,83859,83861],{"class":180,"line":263},[178,83858,341],{"class":319},[178,83860,53541],{"class":323},[178,83862,336],{"class":319},[178,83864,83865],{"class":180,"line":274},[178,83866,83867],{"class":319},"    \u002F\u002F 把字符串转化为数组\n",[178,83869,83870],{"class":180,"line":354},[178,83871,83872],{"class":319},"    const str = 'pink,red'\n",[178,83874,83875],{"class":180,"line":364},[178,83876,83877],{"class":319},"    const arr = str.split(',')\n",[178,83879,83880],{"class":180,"line":740},[178,83881,82357],{"class":319},[178,83883,83884],{"class":180,"line":746},[178,83885,83886],{"class":319},"    const str1 = '2025-8-25'\n",[178,83888,83889],{"class":180,"line":752},[178,83890,83891],{"class":319},"    const arr1 = str1.split('-')\n",[178,83893,83894],{"class":180,"line":757},[178,83895,83896],{"class":319},"    console.log(arr1)\n",[178,83898,83899,83901,83903],{"class":180,"line":763},[178,83900,357],{"class":319},[178,83902,53541],{"class":323},[178,83904,336],{"class":319},[178,83906,83907,83909,83911],{"class":180,"line":769},[178,83908,367],{"class":319},[178,83910,376],{"class":323},[178,83912,336],{"class":319},[24668,83914,83916],{"id":83915},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,83918,6952],{},[19,83920,83921],{},"substring(indexStart)",[19,83923,83924],{},"substring(indexStart, indexEnd)",[2946,83926,83927,83938,83949,83959],{},[29,83928,83929,83930,83933,83934,83937],{},"如果省略了 ",[70,83931,83932],{},"indexEnd","，则 ",[70,83935,83936],{},"substring()"," 提取字符直到字符串的末尾",[29,83939,1596,83940,83943,83944,83933,83946,83948],{},[70,83941,83942],{},"indexStart"," 等于 ",[70,83945,83932],{},[70,83947,83936],{}," 返回一个空字符串",[29,83950,1596,83951,83953,83954,83933,83956,83958],{},[70,83952,83942],{}," 大于 ",[70,83955,83932],{},[70,83957,83936],{}," 的效果就像交换了这两个参数一样",[29,83960,83961],{},"结束的索引号不包含想要截取的部分",[154,83963,83965],{"className":83207,"code":83964,"language":83209,"meta":160,"style":160},"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",[70,83966,83967,83979,83983,84017,84047,84051,84082,84086,84113,84143,84173,84177,84208],{"__ignoreMap":160},[178,83968,83969,83972,83974,83977],{"class":180,"line":181},[178,83970,83971],{"class":319},"const anyString ",[178,83973,330],{"class":699},[178,83975,83976],{"class":188}," \"Mozilla\"",[178,83978,3100],{"class":319},[178,83980,83981],{"class":180,"line":263},[178,83982,722],{"emptyLinePlaceholder":721},[178,83984,83985,83988,83990,83992,83994,83997,83999,84002,84004,84006,84008,84010,84012,84014],{"class":180,"line":274},[178,83986,83987],{"class":195},"console",[178,83989,2498],{"class":319},[178,83991,59968],{"class":195},[178,83993,944],{"class":319},[178,83995,83996],{"class":195},"anyString",[178,83998,2498],{"class":319},[178,84000,84001],{"class":195},"substring",[178,84003,944],{"class":319},[178,84005,2133],{"class":195},[178,84007,14196],{"class":319},[178,84009,1665],{"class":195},[178,84011,76973],{"class":319},[178,84013,35061],{"class":699},[178,84015,84016],{"class":188}," 'M'\n",[178,84018,84019,84021,84023,84025,84027,84029,84031,84033,84035,84037,84039,84041,84043,84045],{"class":180,"line":354},[178,84020,83987],{"class":195},[178,84022,2498],{"class":319},[178,84024,59968],{"class":195},[178,84026,944],{"class":319},[178,84028,83996],{"class":195},[178,84030,2498],{"class":319},[178,84032,84001],{"class":195},[178,84034,944],{"class":319},[178,84036,1665],{"class":195},[178,84038,14196],{"class":319},[178,84040,2133],{"class":195},[178,84042,76973],{"class":319},[178,84044,35061],{"class":699},[178,84046,84016],{"class":188},[178,84048,84049],{"class":180,"line":364},[178,84050,722],{"emptyLinePlaceholder":721},[178,84052,84053,84055,84057,84059,84061,84063,84065,84067,84069,84071,84073,84075,84077,84079],{"class":180,"line":740},[178,84054,83987],{"class":195},[178,84056,2498],{"class":319},[178,84058,59968],{"class":195},[178,84060,944],{"class":319},[178,84062,83996],{"class":195},[178,84064,2498],{"class":319},[178,84066,84001],{"class":195},[178,84068,944],{"class":319},[178,84070,2133],{"class":195},[178,84072,14196],{"class":319},[178,84074,2284],{"class":195},[178,84076,76973],{"class":319},[178,84078,35061],{"class":699},[178,84080,84081],{"class":188}," 'Mozill'\n",[178,84083,84084],{"class":180,"line":746},[178,84085,722],{"emptyLinePlaceholder":721},[178,84087,84088,84090,84092,84094,84096,84098,84100,84102,84104,84106,84108,84110],{"class":180,"line":752},[178,84089,83987],{"class":195},[178,84091,2498],{"class":319},[178,84093,59968],{"class":195},[178,84095,944],{"class":319},[178,84097,83996],{"class":195},[178,84099,2498],{"class":319},[178,84101,84001],{"class":195},[178,84103,944],{"class":319},[178,84105,2233],{"class":195},[178,84107,76973],{"class":319},[178,84109,35061],{"class":699},[178,84111,84112],{"class":188}," 'lla'\n",[178,84114,84115,84117,84119,84121,84123,84125,84127,84129,84131,84133,84135,84137,84139,84141],{"class":180,"line":757},[178,84116,83987],{"class":195},[178,84118,2498],{"class":319},[178,84120,59968],{"class":195},[178,84122,944],{"class":319},[178,84124,83996],{"class":195},[178,84126,2498],{"class":319},[178,84128,84001],{"class":195},[178,84130,944],{"class":319},[178,84132,2233],{"class":195},[178,84134,14196],{"class":319},[178,84136,2309],{"class":195},[178,84138,77029],{"class":319},[178,84140,35061],{"class":699},[178,84142,84112],{"class":188},[178,84144,84145,84147,84149,84151,84153,84155,84157,84159,84161,84163,84165,84167,84169,84171],{"class":180,"line":763},[178,84146,83987],{"class":195},[178,84148,2498],{"class":319},[178,84150,59968],{"class":195},[178,84152,944],{"class":319},[178,84154,83996],{"class":195},[178,84156,2498],{"class":319},[178,84158,84001],{"class":195},[178,84160,944],{"class":319},[178,84162,2309],{"class":195},[178,84164,14196],{"class":319},[178,84166,2233],{"class":195},[178,84168,76973],{"class":319},[178,84170,35061],{"class":699},[178,84172,84112],{"class":188},[178,84174,84175],{"class":180,"line":769},[178,84176,722],{"emptyLinePlaceholder":721},[178,84178,84179,84181,84183,84185,84187,84189,84191,84193,84195,84197,84199,84201,84203,84205],{"class":180,"line":774},[178,84180,83987],{"class":195},[178,84182,2498],{"class":319},[178,84184,59968],{"class":195},[178,84186,944],{"class":319},[178,84188,83996],{"class":195},[178,84190,2498],{"class":319},[178,84192,84001],{"class":195},[178,84194,944],{"class":319},[178,84196,2133],{"class":195},[178,84198,14196],{"class":319},[178,84200,2309],{"class":195},[178,84202,76973],{"class":319},[178,84204,35061],{"class":699},[178,84206,84207],{"class":188}," 'Mozilla'\n",[178,84209,84210,84212,84214,84216,84218,84220,84222,84224,84226,84228,84230,84232,84234,84236],{"class":180,"line":780},[178,84211,83987],{"class":195},[178,84213,2498],{"class":319},[178,84215,59968],{"class":195},[178,84217,944],{"class":319},[178,84219,83996],{"class":195},[178,84221,2498],{"class":319},[178,84223,84001],{"class":195},[178,84225,944],{"class":319},[178,84227,2133],{"class":195},[178,84229,14196],{"class":319},[178,84231,2386],{"class":195},[178,84233,76973],{"class":319},[178,84235,35061],{"class":699},[178,84237,84207],{"class":188},[24668,84239,84241],{"id":84240},"_410533-startswith","4.10.5.3.3 startsWith",[19,84243,84244,551,84247,84252,84253,1815,84255],{},[70,84245,84246],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)",[2093,84248,84249],{},[70,84250,84251],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[70,84254,3169],{},[70,84256,67740],{},[154,84258,84260],{"className":79215,"code":84259,"language":79217,"meta":160,"style":160},"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",[70,84261,84262,84274,84293,84298,84318],{"__ignoreMap":160},[178,84263,84264,84266,84269,84271],{"class":180,"line":181},[178,84265,8561],{"class":699},[178,84267,84268],{"class":319}," str1 ",[178,84270,330],{"class":699},[178,84272,84273],{"class":188}," \"Saturday night plans\"\n",[178,84275,84276,84278,84280,84283,84286,84288,84291],{"class":180,"line":263},[178,84277,79252],{"class":319},[178,84279,59968],{"class":184},[178,84281,84282],{"class":319},"(str1.",[178,84284,84285],{"class":184},"startsWith",[178,84287,944],{"class":319},[178,84289,84290],{"class":188},"\"Sat\"",[178,84292,32239],{"class":319},[178,84294,84295],{"class":180,"line":274},[178,84296,84297],{"class":2008},"\u002F\u002F Expected output: true\n",[178,84299,84300,84302,84304,84306,84308,84310,84312,84314,84316],{"class":180,"line":354},[178,84301,79252],{"class":319},[178,84303,59968],{"class":184},[178,84305,84282],{"class":319},[178,84307,84285],{"class":184},[178,84309,944],{"class":319},[178,84311,84290],{"class":188},[178,84313,14196],{"class":319},[178,84315,2021],{"class":195},[178,84317,32239],{"class":319},[178,84319,84320],{"class":180,"line":364},[178,84321,84322],{"class":2008},"\u002F\u002F Expected output: false\n",[154,84324,84326],{"className":52365,"code":84325,"language":52367,"meta":160,"style":160},"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",[70,84327,84328,84333,84338,84342,84347,84352],{"__ignoreMap":160},[178,84329,84330],{"class":180,"line":181},[178,84331,84332],{"class":319},"startsWith(searchString)\n",[178,84334,84335],{"class":180,"line":263},[178,84336,84337],{"class":319},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[178,84339,84340],{"class":180,"line":274},[178,84341,722],{"emptyLinePlaceholder":721},[178,84343,84344],{"class":180,"line":354},[178,84345,84346],{"class":319},"const str3 = 'pink老师上课中'\n",[178,84348,84349],{"class":180,"line":364},[178,84350,84351],{"class":319},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[178,84353,84354],{"class":180,"line":740},[178,84355,84356],{"class":319},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24668,84358,84360],{"id":84359},"_410534-includes","4.10.5.3.4 includes",[19,84362,84363],{},"includes(searchString) includes(searchString, position)",[26,84365,84366],{},[29,84367,84368],{},"searchString:",[19,84370,84371,84372,84374,84375,84380,84381,84386,84387,23258,84390,84393,84394,84397],{},"一个要在 ",[70,84373,3109],{}," 中查找的字符串。",[2178,84376,84379],{"href":84377,"rel":84378},"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",[25619],"不能是正则表达式","。所有非正则表达式的值都会被",[2178,84382,84385],{"href":84383,"rel":84384},"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",[25619],"强制转换为字符串","，因此如果该参数被省略或传入 ",[70,84388,84389],{},"undefined",[70,84391,84392],{},"includes()"," 方法会在字符串中搜索 ",[70,84395,84396],{},"\"undefined\"","，这通常不是你想要的",[26,84399,84400],{"start":263},[29,84401,84402,2799],{},[70,84403,84404],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,84406,84407,84408,84411,84412],{},"在字符串中开始搜索 ",[70,84409,84410],{},"searchString"," 的位置。默认值为 ",[70,84413,2133],{},[26,84415,84416],{"start":274},[29,84417,84418],{},"返回值：",[19,84420,84421,84422,84424,84425,84429,84430],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[70,84423,84410],{}," 为空字符串的情况），则返回 ",[2093,84426,84427],{},[70,84428,3169],{}," ，否则返回 ",[2093,84431,84432],{},[70,84433,67740],{},[26,84435,84436],{"start":354},[29,84437,84438],{},"异常：",[19,84440,1596,84441,15555,84443,84447],{},[70,84442,84410],{},[2178,84444,84446],{"href":84377,"rel":84445},[25619],"是一个正则表达式","，则会抛出",[19,84449,84450],{},"只要是有就是true，不需要非得以谁开头结尾",[154,84452,84454],{"className":79215,"code":84453,"language":79217,"meta":160,"style":160},"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",[70,84455,84456,84467,84490,84509,84529,84551,84570],{"__ignoreMap":160},[178,84457,84458,84460,84462,84464],{"class":180,"line":181},[178,84459,8561],{"class":699},[178,84461,81494],{"class":319},[178,84463,330],{"class":699},[178,84465,84466],{"class":188}," \"To be, or not to be, that is the question.\"\n",[178,84468,84469,84471,84473,84476,84479,84481,84484,84487],{"class":180,"line":263},[178,84470,79252],{"class":319},[178,84472,59968],{"class":184},[178,84474,84475],{"class":319},"(str.",[178,84477,84478],{"class":184},"includes",[178,84480,944],{"class":319},[178,84482,84483],{"class":188},"\"To be\"",[178,84485,84486],{"class":319},"))",[178,84488,84489],{"class":2008},"  \u002F\u002F true\n",[178,84491,84492,84494,84496,84498,84500,84502,84505,84507],{"class":180,"line":274},[178,84493,79252],{"class":319},[178,84495,59968],{"class":184},[178,84497,84475],{"class":319},[178,84499,84478],{"class":184},[178,84501,944],{"class":319},[178,84503,84504],{"class":188},"\"question\"",[178,84506,84486],{"class":319},[178,84508,84489],{"class":2008},[178,84510,84511,84513,84515,84517,84519,84521,84524,84526],{"class":180,"line":354},[178,84512,79252],{"class":319},[178,84514,59968],{"class":184},[178,84516,84475],{"class":319},[178,84518,84478],{"class":184},[178,84520,944],{"class":319},[178,84522,84523],{"class":188},"\"nonexistent\"",[178,84525,84486],{"class":319},[178,84527,84528],{"class":2008},"  \u002F\u002F false\n",[178,84530,84531,84533,84535,84537,84539,84541,84543,84545,84547,84549],{"class":180,"line":364},[178,84532,79252],{"class":319},[178,84534,59968],{"class":184},[178,84536,84475],{"class":319},[178,84538,84478],{"class":184},[178,84540,944],{"class":319},[178,84542,84483],{"class":188},[178,84544,14196],{"class":319},[178,84546,1665],{"class":195},[178,84548,84486],{"class":319},[178,84550,84528],{"class":2008},[178,84552,84553,84555,84557,84559,84561,84563,84566,84568],{"class":180,"line":740},[178,84554,79252],{"class":319},[178,84556,59968],{"class":184},[178,84558,84475],{"class":319},[178,84560,84478],{"class":184},[178,84562,944],{"class":319},[178,84564,84565],{"class":188},"\"TO BE\"",[178,84567,84486],{"class":319},[178,84569,84528],{"class":2008},[178,84571,84572,84574,84576,84578,84580,84582,84584,84586],{"class":180,"line":746},[178,84573,79252],{"class":319},[178,84575,59968],{"class":184},[178,84577,84475],{"class":319},[178,84579,84478],{"class":184},[178,84581,944],{"class":319},[178,84583,9421],{"class":188},[178,84585,84486],{"class":319},[178,84587,84489],{"class":2008},[24668,84589,84591],{"id":84590},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[154,84593,84595],{"className":310,"code":84594,"language":312,"meta":160,"style":160},"\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",[70,84596,84597,84605,84613,84618,84623,84628,84633,84638,84646],{"__ignoreMap":160},[178,84598,84599,84601,84603],{"class":180,"line":181},[178,84600,320],{"class":319},[178,84602,376],{"class":323},[178,84604,336],{"class":319},[178,84606,84607,84609,84611],{"class":180,"line":263},[178,84608,341],{"class":319},[178,84610,53541],{"class":323},[178,84612,336],{"class":319},[178,84614,84615],{"class":180,"line":274},[178,84616,84617],{"class":319},"    const num = 10\n",[178,84619,84620],{"class":180,"line":354},[178,84621,84622],{"class":319},"    \u002F\u002F 强制转换\n",[178,84624,84625],{"class":180,"line":364},[178,84626,84627],{"class":319},"    console.log(String(num))\n",[178,84629,84630],{"class":180,"line":740},[178,84631,84632],{"class":319},"    \u002F\u002F toString()方法转换\n",[178,84634,84635],{"class":180,"line":746},[178,84636,84637],{"class":319},"    console.log(num.toString())\n",[178,84639,84640,84642,84644],{"class":180,"line":752},[178,84641,357],{"class":319},[178,84643,53541],{"class":323},[178,84645,336],{"class":319},[178,84647,84648,84650,84652],{"class":180,"line":757},[178,84649,367],{"class":319},[178,84651,376],{"class":323},[178,84653,336],{"class":319},[24668,84655,84657],{"id":84656},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,84659,84660],{},[3269,84661],{"alt":160,"src":84662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[154,84664,84666],{"className":52365,"code":84665,"language":52367,"meta":160,"style":160},"\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",[70,84667,84668,84678,84692,84696,84704,84718,84738,84750,84758,84762,84770,84782,84790,84802,84807,84812,84817,84864,84880,84888,84896,84900],{"__ignoreMap":160},[178,84669,84670,84672,84674,84676],{"class":180,"line":181},[178,84671,53029],{"class":319},[178,84673,53032],{"class":323},[178,84675,53035],{"class":184},[178,84677,336],{"class":319},[178,84679,84680,84682,84684,84686,84688,84690],{"class":180,"line":263},[178,84681,320],{"class":319},[178,84683,52367],{"class":323},[178,84685,53046],{"class":184},[178,84687,330],{"class":319},[178,84689,53051],{"class":188},[178,84691,336],{"class":319},[178,84693,84694],{"class":180,"line":274},[178,84695,722],{"emptyLinePlaceholder":721},[178,84697,84698,84700,84702],{"class":180,"line":354},[178,84699,320],{"class":319},[178,84701,53064],{"class":323},[178,84703,336],{"class":319},[178,84705,84706,84708,84710,84712,84714,84716],{"class":180,"line":364},[178,84707,341],{"class":319},[178,84709,53074],{"class":323},[178,84711,53077],{"class":184},[178,84713,330],{"class":319},[178,84715,53082],{"class":188},[178,84717,336],{"class":319},[178,84719,84720,84722,84724,84726,84728,84730,84732,84734,84736],{"class":180,"line":740},[178,84721,341],{"class":319},[178,84723,53074],{"class":323},[178,84725,426],{"class":184},[178,84727,330],{"class":319},[178,84729,53121],{"class":188},[178,84731,53101],{"class":184},[178,84733,330],{"class":319},[178,84735,53128],{"class":188},[178,84737,336],{"class":319},[178,84739,84740,84742,84744,84746,84748],{"class":180,"line":746},[178,84741,341],{"class":319},[178,84743,53137],{"class":323},[178,84745,53140],{"class":319},[178,84747,53137],{"class":323},[178,84749,336],{"class":319},[178,84751,84752,84754,84756],{"class":180,"line":752},[178,84753,367],{"class":319},[178,84755,53064],{"class":323},[178,84757,336],{"class":319},[178,84759,84760],{"class":180,"line":757},[178,84761,722],{"emptyLinePlaceholder":721},[178,84763,84764,84766,84768],{"class":180,"line":763},[178,84765,320],{"class":319},[178,84767,376],{"class":323},[178,84769,336],{"class":319},[178,84771,84772,84774,84776,84778,84780],{"class":180,"line":769},[178,84773,341],{"class":319},[178,84775,53341],{"class":323},[178,84777,57035],{"class":319},[178,84779,53341],{"class":323},[178,84781,336],{"class":319},[178,84783,84784,84786,84788],{"class":180,"line":774},[178,84785,341],{"class":319},[178,84787,53541],{"class":323},[178,84789,336],{"class":319},[178,84791,84792,84794,84797,84799],{"class":180,"line":780},[178,84793,12982],{"class":699},[178,84795,84796],{"class":195}," gift",[178,84798,734],{"class":699},[178,84800,84801],{"class":188}," '50g的茶叶，清洗球'\n",[178,84803,84804],{"class":180,"line":786},[178,84805,84806],{"class":2008},"    \u002F\u002F 1.把字符串拆分为数组\n",[178,84808,84809],{"class":180,"line":792},[178,84810,84811],{"class":2008},"    \u002F\u002F console.log(gift.split(','))\n",[178,84813,84814],{"class":180,"line":798},[178,84815,84816],{"class":2008},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[178,84818,84819,84821,84823,84825,84828,84831,84833,84836,84838,84840,84842,84844,84846,84849,84851,84854,84856,84858,84860,84862],{"class":180,"line":804},[178,84820,12982],{"class":699},[178,84822,75639],{"class":195},[178,84824,734],{"class":699},[178,84826,84827],{"class":319}," gift.",[178,84829,84830],{"class":184},"split",[178,84832,944],{"class":319},[178,84834,84835],{"class":188},"'，'",[178,84837,32567],{"class":319},[178,84839,75764],{"class":184},[178,84841,944],{"class":319},[178,84843,81514],{"class":6985},[178,84845,81517],{"class":699},[178,84847,84848],{"class":188}," `\u003Cspan>【赠品】${",[178,84850,81514],{"class":319},[178,84852,84853],{"class":188},"}\u003C\u002Fspan>\u003Cbr>`",[178,84855,32567],{"class":319},[178,84857,75943],{"class":184},[178,84859,944],{"class":319},[178,84861,75948],{"class":188},[178,84863,863],{"class":319},[178,84865,84866,84868,84870,84872,84874,84876,84878],{"class":180,"line":810},[178,84867,54134],{"class":319},[178,84869,56120],{"class":184},[178,84871,944],{"class":319},[178,84873,83649],{"class":188},[178,84875,75969],{"class":319},[178,84877,330],{"class":699},[178,84879,75705],{"class":319},[178,84881,84882,84884,84886],{"class":180,"line":816},[178,84883,357],{"class":319},[178,84885,53541],{"class":323},[178,84887,336],{"class":319},[178,84889,84890,84892,84894],{"class":180,"line":822},[178,84891,367],{"class":319},[178,84893,376],{"class":323},[178,84895,336],{"class":319},[178,84897,84898],{"class":180,"line":827},[178,84899,722],{"emptyLinePlaceholder":721},[178,84901,84902,84904,84906],{"class":180,"line":832},[178,84903,367],{"class":319},[178,84905,52367],{"class":323},[178,84907,336],{"class":319},[23756,84909,84911],{"id":84910},"_41054-number","4.10.5.4 Number",[19,84913,84914],{},[3269,84915],{"alt":160,"src":84916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,84918,84919],{},"整数也可以进行toFixed来保留小数",[19,84921,84922],{},"比如：",[19,84924,84925],{},"const price=10",[19,84927,84928],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[23756,84930,84932],{"id":84931},"_41055-购物车展示","4.10.5.5 购物车展示",[19,84934,84935],{},[3269,84936],{"alt":160,"src":84937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[154,84939,84941],{"className":52365,"code":84940,"language":52367,"meta":160,"style":160},"\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",[70,84942,84943,84953,84967,84971,84979,84993,85013,85025,85033,85039,85049,85059,85069,85073,85077,85083,85095,85109,85113,85117,85123,85135,85151,85161,85177,85181,85185,85191,85201,85211,85215,85219,85227,85239,85251,85263,85267,85271,85279,85291,85295,85299,85310,85320,85332,85344,85354,85358,85362,85370,85379,85391,85401,85411,85415,85419,85427,85436,85443,85453,85465,85469,85473,85482,85492,85503,85515,85527,85531,85535,85544,85554,85565,85569,85573,85579,85591,85603,85613,85623,85641,85653,85657,85661,85670,85682,85692,85702,85714,85718,85726,85734,85738,85746,85760,85768,85782,85810,85818,85826,85836,85840,85848,85856,85865,85873,85882,85892,85896,85900,85908,85916,85925,85933,85941,85954,85958,85962,85970,85978,85987,85995,86003,86018,86022,86026,86034,86042,86051,86059,86067,86081,86089,86093,86097,86102,86128,86133,86170,86175,86198,86203,86257,86262,86298,86302,86308,86313,86322,86336,86345,86364,86373,86383,86388,86393,86406,86411,86465,86491,86499,86507,86511],{"__ignoreMap":160},[178,84944,84945,84947,84949,84951],{"class":180,"line":181},[178,84946,53029],{"class":319},[178,84948,53032],{"class":323},[178,84950,53035],{"class":184},[178,84952,336],{"class":319},[178,84954,84955,84957,84959,84961,84963,84965],{"class":180,"line":263},[178,84956,320],{"class":319},[178,84958,52367],{"class":323},[178,84960,53046],{"class":184},[178,84962,330],{"class":319},[178,84964,53051],{"class":188},[178,84966,336],{"class":319},[178,84968,84969],{"class":180,"line":274},[178,84970,722],{"emptyLinePlaceholder":721},[178,84972,84973,84975,84977],{"class":180,"line":354},[178,84974,320],{"class":319},[178,84976,53064],{"class":323},[178,84978,336],{"class":319},[178,84980,84981,84983,84985,84987,84989,84991],{"class":180,"line":364},[178,84982,341],{"class":319},[178,84984,53074],{"class":323},[178,84986,53077],{"class":184},[178,84988,330],{"class":319},[178,84990,53082],{"class":188},[178,84992,336],{"class":319},[178,84994,84995,84997,84999,85001,85003,85005,85007,85009,85011],{"class":180,"line":740},[178,84996,341],{"class":319},[178,84998,53074],{"class":323},[178,85000,426],{"class":184},[178,85002,330],{"class":319},[178,85004,53121],{"class":188},[178,85006,53101],{"class":184},[178,85008,330],{"class":319},[178,85010,53128],{"class":188},[178,85012,336],{"class":319},[178,85014,85015,85017,85019,85021,85023],{"class":180,"line":746},[178,85016,341],{"class":319},[178,85018,53137],{"class":323},[178,85020,53140],{"class":319},[178,85022,53137],{"class":323},[178,85024,336],{"class":319},[178,85026,85027,85029,85031],{"class":180,"line":752},[178,85028,341],{"class":319},[178,85030,1853],{"class":323},[178,85032,336],{"class":319},[178,85034,85035,85037],{"class":180,"line":757},[178,85036,8172],{"class":323},[178,85038,17330],{"class":319},[178,85040,85041,85043,85045,85047],{"class":180,"line":763},[178,85042,56416],{"class":195},[178,85044,53167],{"class":319},[178,85046,2133],{"class":195},[178,85048,3100],{"class":319},[178,85050,85051,85053,85055,85057],{"class":180,"line":769},[178,85052,56427],{"class":195},[178,85054,53167],{"class":319},[178,85056,2133],{"class":195},[178,85058,3100],{"class":319},[178,85060,85061,85063,85065,85067],{"class":180,"line":774},[178,85062,74316],{"class":195},[178,85064,53167],{"class":319},[178,85066,62226],{"class":195},[178,85068,3100],{"class":319},[178,85070,85071],{"class":180,"line":780},[178,85072,3971],{"class":319},[178,85074,85075],{"class":180,"line":786},[178,85076,722],{"emptyLinePlaceholder":721},[178,85078,85079,85081],{"class":180,"line":792},[178,85080,63844],{"class":184},[178,85082,17330],{"class":319},[178,85084,85085,85087,85089,85091,85093],{"class":180,"line":798},[178,85086,56492],{"class":195},[178,85088,53167],{"class":319},[178,85090,80294],{"class":195},[178,85092,53222],{"class":699},[178,85094,3100],{"class":319},[178,85096,85097,85099,85101,85103,85105,85107],{"class":180,"line":804},[178,85098,56427],{"class":195},[178,85100,53167],{"class":319},[178,85102,2251],{"class":195},[178,85104,53222],{"class":699},[178,85106,53286],{"class":195},[178,85108,3100],{"class":319},[178,85110,85111],{"class":180,"line":810},[178,85112,3971],{"class":319},[178,85114,85115],{"class":180,"line":816},[178,85116,722],{"emptyLinePlaceholder":721},[178,85118,85119,85121],{"class":180,"line":822},[178,85120,80345],{"class":184},[178,85122,17330],{"class":319},[178,85124,85125,85127,85129,85131,85133],{"class":180,"line":827},[178,85126,56416],{"class":195},[178,85128,53167],{"class":319},[178,85130,2515],{"class":195},[178,85132,53222],{"class":699},[178,85134,3100],{"class":319},[178,85136,85137,85139,85141,85143,85145,85147,85149],{"class":180,"line":832},[178,85138,63581],{"class":195},[178,85140,53167],{"class":319},[178,85142,29870],{"class":195},[178,85144,80400],{"class":195},[178,85146,80403],{"class":195},[178,85148,2635],{"class":699},[178,85150,3100],{"class":319},[178,85152,85153,85155,85157,85159],{"class":180,"line":850},[178,85154,56730],{"class":195},[178,85156,53167],{"class":319},[178,85158,53207],{"class":195},[178,85160,3100],{"class":319},[178,85162,85163,85165,85167,85169,85171,85173,85175],{"class":180,"line":866},[178,85164,63698],{"class":195},[178,85166,53167],{"class":319},[178,85168,1665],{"class":195},[178,85170,53222],{"class":699},[178,85172,53251],{"class":195},[178,85174,63965],{"class":195},[178,85176,3100],{"class":319},[178,85178,85179],{"class":180,"line":877},[178,85180,3971],{"class":319},[178,85182,85183],{"class":180,"line":882},[178,85184,722],{"emptyLinePlaceholder":721},[178,85186,85187,85189],{"class":180,"line":898},[178,85188,80463],{"class":184},[178,85190,17330],{"class":319},[178,85192,85193,85195,85197,85199],{"class":180,"line":914},[178,85194,63746],{"class":195},[178,85196,53167],{"class":319},[178,85198,63751],{"class":195},[178,85200,3100],{"class":319},[178,85202,85203,85205,85207,85209],{"class":180,"line":919},[178,85204,56605],{"class":195},[178,85206,53167],{"class":319},[178,85208,63539],{"class":195},[178,85210,3100],{"class":319},[178,85212,85213],{"class":180,"line":935},[178,85214,3971],{"class":319},[178,85216,85217],{"class":180,"line":952},[178,85218,722],{"emptyLinePlaceholder":721},[178,85220,85221,85223,85225],{"class":180,"line":966},[178,85222,80345],{"class":184},[178,85224,57336],{"class":323},[178,85226,17330],{"class":319},[178,85228,85229,85231,85233,85235,85237],{"class":180,"line":980},[178,85230,56492],{"class":195},[178,85232,53167],{"class":319},[178,85234,2552],{"class":195},[178,85236,53222],{"class":699},[178,85238,3100],{"class":319},[178,85240,85241,85243,85245,85247,85249],{"class":180,"line":985},[178,85242,56506],{"class":195},[178,85244,53167],{"class":319},[178,85246,2552],{"class":195},[178,85248,53222],{"class":699},[178,85250,3100],{"class":319},[178,85252,85253,85255,85257,85259,85261],{"class":180,"line":1008},[178,85254,63471],{"class":195},[178,85256,53167],{"class":319},[178,85258,2259],{"class":195},[178,85260,53222],{"class":699},[178,85262,3100],{"class":319},[178,85264,85265],{"class":180,"line":1014},[178,85266,3971],{"class":319},[178,85268,85269],{"class":180,"line":1019},[178,85270,722],{"emptyLinePlaceholder":721},[178,85272,85273,85275,85277],{"class":180,"line":1033},[178,85274,80345],{"class":184},[178,85276,64025],{"class":184},[178,85278,17330],{"class":319},[178,85280,85281,85283,85285,85287,85289],{"class":180,"line":1046},[178,85282,56492],{"class":195},[178,85284,53167],{"class":319},[178,85286,1002],{"class":195},[178,85288,53222],{"class":699},[178,85290,3100],{"class":319},[178,85292,85293],{"class":180,"line":1059},[178,85294,3971],{"class":319},[178,85296,85297],{"class":180,"line":1072},[178,85298,722],{"emptyLinePlaceholder":721},[178,85300,85301,85303,85305,85308],{"class":180,"line":1077},[178,85302,80345],{"class":184},[178,85304,64025],{"class":184},[178,85306,85307],{"class":184}," .tag",[178,85309,17330],{"class":319},[178,85311,85312,85314,85316,85318],{"class":180,"line":1082},[178,85313,56730],{"class":195},[178,85315,53167],{"class":319},[178,85317,62590],{"class":195},[178,85319,3100],{"class":319},[178,85321,85322,85324,85326,85328,85330],{"class":180,"line":1099},[178,85323,56416],{"class":195},[178,85325,53167],{"class":319},[178,85327,1669],{"class":195},[178,85329,53222],{"class":699},[178,85331,3100],{"class":319},[178,85333,85334,85336,85338,85340,85342],{"class":180,"line":9806},[178,85335,56643],{"class":195},[178,85337,53167],{"class":319},[178,85339,2438],{"class":195},[178,85341,53222],{"class":699},[178,85343,3100],{"class":319},[178,85345,85346,85348,85350,85352],{"class":180,"line":9818},[178,85347,59137],{"class":195},[178,85349,53167],{"class":319},[178,85351,63791],{"class":195},[178,85353,3100],{"class":319},[178,85355,85356],{"class":180,"line":11477},[178,85357,3971],{"class":319},[178,85359,85360],{"class":180,"line":11502},[178,85361,722],{"emptyLinePlaceholder":721},[178,85363,85364,85366,85368],{"class":180,"line":11525},[178,85365,80345],{"class":184},[178,85367,80636],{"class":184},[178,85369,33202],{"class":319},[178,85371,85372,85374,85377],{"class":180,"line":11549},[178,85373,80345],{"class":184},[178,85375,85376],{"class":184}," .sub-total",[178,85378,17330],{"class":319},[178,85380,85381,85383,85385,85387,85389],{"class":180,"line":11554},[178,85382,56643],{"class":195},[178,85384,53167],{"class":319},[178,85386,2590],{"class":195},[178,85388,53222],{"class":699},[178,85390,3100],{"class":319},[178,85392,85393,85395,85397,85399],{"class":180,"line":11559},[178,85394,59137],{"class":195},[178,85396,53167],{"class":319},[178,85398,80659],{"class":195},[178,85400,3100],{"class":319},[178,85402,85403,85405,85407,85409],{"class":180,"line":11564},[178,85404,63558],{"class":195},[178,85406,53167],{"class":319},[178,85408,1665],{"class":195},[178,85410,3100],{"class":319},[178,85412,85413],{"class":180,"line":11573},[178,85414,3971],{"class":319},[178,85416,85417],{"class":180,"line":11578},[178,85418,722],{"emptyLinePlaceholder":721},[178,85420,85421,85423,85425],{"class":180,"line":11584},[178,85422,80345],{"class":184},[178,85424,80676],{"class":184},[178,85426,33202],{"class":319},[178,85428,85429,85431,85434],{"class":180,"line":11605},[178,85430,80345],{"class":184},[178,85432,85433],{"class":184}," .sub-total::before",[178,85435,33202],{"class":319},[178,85437,85438,85441],{"class":180,"line":11611},[178,85439,85440],{"class":184},"    .amount::before",[178,85442,17330],{"class":319},[178,85444,85445,85447,85449,85451],{"class":180,"line":11625},[178,85446,80683],{"class":195},[178,85448,53167],{"class":319},[178,85450,80688],{"class":188},[178,85452,3100],{"class":319},[178,85454,85455,85457,85459,85461,85463],{"class":180,"line":11631},[178,85456,56643],{"class":195},[178,85458,53167],{"class":319},[178,85460,2438],{"class":195},[178,85462,53222],{"class":699},[178,85464,3100],{"class":319},[178,85466,85467],{"class":180,"line":11658},[178,85468,3971],{"class":319},[178,85470,85471],{"class":180,"line":11667},[178,85472,722],{"emptyLinePlaceholder":721},[178,85474,85475,85477,85480],{"class":180,"line":11673},[178,85476,80345],{"class":184},[178,85478,85479],{"class":184}," .spec",[178,85481,17330],{"class":319},[178,85483,85484,85486,85488,85490],{"class":180,"line":11681},[178,85485,63558],{"class":195},[178,85487,53167],{"class":319},[178,85489,1669],{"class":195},[178,85491,3100],{"class":319},[178,85493,85494,85496,85498,85501],{"class":180,"line":11686},[178,85495,59137],{"class":195},[178,85497,53167],{"class":319},[178,85499,85500],{"class":195},"#888",[178,85502,3100],{"class":319},[178,85504,85505,85507,85509,85511,85513],{"class":180,"line":18362},[178,85506,56643],{"class":195},[178,85508,53167],{"class":319},[178,85510,2489],{"class":195},[178,85512,53222],{"class":699},[178,85514,3100],{"class":319},[178,85516,85517,85519,85521,85523,85525],{"class":180,"line":18368},[178,85518,63721],{"class":195},[178,85520,53167],{"class":319},[178,85522,2640],{"class":195},[178,85524,53222],{"class":699},[178,85526,3100],{"class":319},[178,85528,85529],{"class":180,"line":18391},[178,85530,3971],{"class":319},[178,85532,85533],{"class":180,"line":18397},[178,85534,722],{"emptyLinePlaceholder":721},[178,85536,85537,85539,85542],{"class":180,"line":18420},[178,85538,80345],{"class":184},[178,85540,85541],{"class":184}," .count",[178,85543,17330],{"class":319},[178,85545,85546,85548,85550,85552],{"class":180,"line":18434},[178,85547,63558],{"class":195},[178,85549,53167],{"class":319},[178,85551,1665],{"class":195},[178,85553,3100],{"class":319},[178,85555,85556,85558,85560,85563],{"class":180,"line":18454},[178,85557,59137],{"class":195},[178,85559,53167],{"class":319},[178,85561,85562],{"class":195},"#aaa",[178,85564,3100],{"class":319},[178,85566,85567],{"class":180,"line":18460},[178,85568,3971],{"class":319},[178,85570,85571],{"class":180,"line":18471},[178,85572,722],{"emptyLinePlaceholder":721},[178,85574,85575,85577],{"class":180,"line":18494},[178,85576,74195],{"class":184},[178,85578,17330],{"class":319},[178,85580,85581,85583,85585,85587,85589],{"class":180,"line":18516},[178,85582,56492],{"class":195},[178,85584,53167],{"class":319},[178,85586,80294],{"class":195},[178,85588,53222],{"class":699},[178,85590,3100],{"class":319},[178,85592,85593,85595,85597,85599,85601],{"class":180,"line":18521},[178,85594,56427],{"class":195},[178,85596,53167],{"class":319},[178,85598,2133],{"class":195},[178,85600,53286],{"class":195},[178,85602,3100],{"class":319},[178,85604,85605,85607,85609,85611],{"class":180,"line":18527},[178,85606,56730],{"class":195},[178,85608,53167],{"class":319},[178,85610,53207],{"class":195},[178,85612,3100],{"class":319},[178,85614,85615,85617,85619,85621],{"class":180,"line":18541},[178,85616,56741],{"class":195},[178,85618,53167],{"class":319},[178,85620,53310],{"class":195},[178,85622,3100],{"class":319},[178,85624,85625,85628,85630,85632,85634,85636,85639],{"class":180,"line":18554},[178,85626,85627],{"class":195},"      border-top",[178,85629,53167],{"class":319},[178,85631,1665],{"class":195},[178,85633,53222],{"class":699},[178,85635,53251],{"class":195},[178,85637,85638],{"class":195}," #4e4e4e",[178,85640,3100],{"class":319},[178,85642,85643,85645,85647,85649,85651],{"class":180,"line":18559},[178,85644,56416],{"class":195},[178,85646,53167],{"class":319},[178,85648,2640],{"class":195},[178,85650,53222],{"class":699},[178,85652,3100],{"class":319},[178,85654,85655],{"class":180,"line":18573},[178,85656,3971],{"class":319},[178,85658,85659],{"class":180,"line":18578},[178,85660,722],{"emptyLinePlaceholder":721},[178,85662,85663,85665,85668],{"class":180,"line":18584},[178,85664,74195],{"class":184},[178,85666,85667],{"class":184}," .amount",[178,85669,17330],{"class":319},[178,85671,85672,85674,85676,85678,85680],{"class":180,"line":18589},[178,85673,56643],{"class":195},[178,85675,53167],{"class":319},[178,85677,2590],{"class":195},[178,85679,53222],{"class":699},[178,85681,3100],{"class":319},[178,85683,85684,85686,85688,85690],{"class":180,"line":18603},[178,85685,59137],{"class":195},[178,85687,53167],{"class":319},[178,85689,80659],{"class":195},[178,85691,3100],{"class":319},[178,85693,85694,85696,85698,85700],{"class":180,"line":18608},[178,85695,64055],{"class":195},[178,85697,53167],{"class":319},[178,85699,53219],{"class":195},[178,85701,3100],{"class":319},[178,85703,85704,85706,85708,85710,85712],{"class":180,"line":18613},[178,85705,63471],{"class":195},[178,85707,53167],{"class":319},[178,85709,2596],{"class":195},[178,85711,53222],{"class":699},[178,85713,3100],{"class":319},[178,85715,85716],{"class":180,"line":18627},[178,85717,3971],{"class":319},[178,85719,85720,85722,85724],{"class":180,"line":18639},[178,85721,357],{"class":319},[178,85723,1853],{"class":323},[178,85725,336],{"class":319},[178,85727,85728,85730,85732],{"class":180,"line":18644},[178,85729,367],{"class":319},[178,85731,53064],{"class":323},[178,85733,336],{"class":319},[178,85735,85736],{"class":180,"line":18657},[178,85737,722],{"emptyLinePlaceholder":721},[178,85739,85740,85742,85744],{"class":180,"line":18662},[178,85741,320],{"class":319},[178,85743,376],{"class":323},[178,85745,336],{"class":319},[178,85747,85748,85750,85752,85754,85756,85758],{"class":180,"line":18667},[178,85749,341],{"class":319},[178,85751,53341],{"class":323},[178,85753,55210],{"class":184},[178,85755,330],{"class":319},[178,85757,64329],{"class":188},[178,85759,336],{"class":319},[178,85761,85762,85764,85766],{"class":180,"line":18672},[178,85763,357],{"class":319},[178,85765,53341],{"class":323},[178,85767,336],{"class":319},[178,85769,85770,85772,85774,85776,85778,85780],{"class":180,"line":18685},[178,85771,341],{"class":319},[178,85773,53341],{"class":323},[178,85775,55210],{"class":184},[178,85777,330],{"class":319},[178,85779,64301],{"class":188},[178,85781,336],{"class":319},[178,85783,85784,85786,85788,85791,85793,85795,85797,85800,85802,85804,85806,85808],{"class":180,"line":18690},[178,85785,53071],{"class":319},[178,85787,53341],{"class":323},[178,85789,85790],{"class":319},">合计：\u003C",[178,85792,178],{"class":323},[178,85794,55210],{"class":184},[178,85796,330],{"class":319},[178,85798,85799],{"class":188},"\"amount\"",[178,85801,57035],{"class":319},[178,85803,178],{"class":323},[178,85805,57035],{"class":319},[178,85807,53341],{"class":323},[178,85809,336],{"class":319},[178,85811,85812,85814,85816],{"class":180,"line":34365},[178,85813,357],{"class":319},[178,85815,53341],{"class":323},[178,85817,336],{"class":319},[178,85819,85820,85822,85824],{"class":180,"line":34371},[178,85821,341],{"class":319},[178,85823,53541],{"class":323},[178,85825,336],{"class":319},[178,85827,85828,85830,85832,85834],{"class":180,"line":34377},[178,85829,12982],{"class":699},[178,85831,81096],{"class":195},[178,85833,734],{"class":699},[178,85835,57168],{"class":319},[178,85837,85838],{"class":180,"line":34383},[178,85839,81105],{"class":319},[178,85841,85842,85844,85846],{"class":180,"line":34389},[178,85843,81110],{"class":319},[178,85845,81113],{"class":188},[178,85847,33202],{"class":319},[178,85849,85850,85852,85854],{"class":180,"line":34400},[178,85851,81120],{"class":319},[178,85853,81123],{"class":188},[178,85855,33202],{"class":319},[178,85857,85858,85860,85863],{"class":180,"line":34406},[178,85859,81130],{"class":319},[178,85861,85862],{"class":195},"289.9",[178,85864,33202],{"class":319},[178,85866,85867,85869,85871],{"class":180,"line":34426},[178,85868,81140],{"class":319},[178,85870,81143],{"class":188},[178,85872,33202],{"class":319},[178,85874,85875,85878,85880],{"class":180,"line":34432},[178,85876,85877],{"class":319},"        count: ",[178,85879,1669],{"class":195},[178,85881,33202],{"class":319},[178,85883,85884,85887,85890],{"class":180,"line":34443},[178,85885,85886],{"class":319},"        spec: { color: ",[178,85888,85889],{"class":188},"'白色'",[178,85891,57325],{"class":319},[178,85893,85894],{"class":180,"line":34449},[178,85895,79612],{"class":319},[178,85897,85898],{"class":180,"line":34455},[178,85899,81105],{"class":319},[178,85901,85902,85904,85906],{"class":180,"line":34461},[178,85903,81110],{"class":319},[178,85905,81204],{"class":188},[178,85907,33202],{"class":319},[178,85909,85910,85912,85914],{"class":180,"line":34467},[178,85911,81120],{"class":319},[178,85913,81213],{"class":188},[178,85915,33202],{"class":319},[178,85917,85918,85920,85923],{"class":180,"line":34473},[178,85919,81130],{"class":319},[178,85921,85922],{"class":195},"109.8",[178,85924,33202],{"class":319},[178,85926,85927,85929,85931],{"class":180,"line":34479},[178,85928,81140],{"class":319},[178,85930,81231],{"class":188},[178,85932,33202],{"class":319},[178,85934,85935,85937,85939],{"class":180,"line":34485},[178,85936,85877],{"class":319},[178,85938,2021],{"class":195},[178,85940,33202],{"class":319},[178,85942,85943,85946,85948,85950,85952],{"class":180,"line":34505},[178,85944,85945],{"class":319},"        spec: { size: ",[178,85947,83621],{"class":188},[178,85949,57185],{"class":319},[178,85951,83626],{"class":188},[178,85953,57325],{"class":319},[178,85955,85956],{"class":180,"line":34511},[178,85957,79612],{"class":319},[178,85959,85960],{"class":180,"line":34527},[178,85961,81105],{"class":319},[178,85963,85964,85966,85968],{"class":180,"line":34533},[178,85965,81110],{"class":319},[178,85967,81248],{"class":188},[178,85969,33202],{"class":319},[178,85971,85972,85974,85976],{"class":180,"line":34547},[178,85973,81120],{"class":319},[178,85975,81257],{"class":188},[178,85977,33202],{"class":319},[178,85979,85980,85982,85985],{"class":180,"line":34553},[178,85981,81130],{"class":319},[178,85983,85984],{"class":195},"488",[178,85986,33202],{"class":319},[178,85988,85989,85991,85993],{"class":180,"line":34568},[178,85990,81140],{"class":319},[178,85992,81275],{"class":188},[178,85994,33202],{"class":319},[178,85996,85997,85999,86001],{"class":180,"line":34574},[178,85998,85877],{"class":319},[178,86000,1665],{"class":195},[178,86002,33202],{"class":319},[178,86004,86005,86007,86010,86013,86016],{"class":180,"line":34583},[178,86006,85886],{"class":319},[178,86008,86009],{"class":188},"'青色'",[178,86011,86012],{"class":319},", sum: ",[178,86014,86015],{"class":188},"'一大四小'",[178,86017,57325],{"class":319},[178,86019,86020],{"class":180,"line":34589},[178,86021,79612],{"class":319},[178,86023,86024],{"class":180,"line":34598},[178,86025,81105],{"class":319},[178,86027,86028,86030,86032],{"class":180,"line":34604},[178,86029,81110],{"class":319},[178,86031,81292],{"class":188},[178,86033,33202],{"class":319},[178,86035,86036,86038,86040],{"class":180,"line":34610},[178,86037,81120],{"class":319},[178,86039,81301],{"class":188},[178,86041,33202],{"class":319},[178,86043,86044,86046,86049],{"class":180,"line":34619},[178,86045,81130],{"class":319},[178,86047,86048],{"class":195},"139",[178,86050,33202],{"class":319},[178,86052,86053,86055,86057],{"class":180,"line":34625},[178,86054,81140],{"class":319},[178,86056,81319],{"class":188},[178,86058,33202],{"class":319},[178,86060,86061,86063,86065],{"class":180,"line":34636},[178,86062,85877],{"class":319},[178,86064,1665],{"class":195},[178,86066,33202],{"class":319},[178,86068,86069,86071,86074,86076,86079],{"class":180,"line":34642},[178,86070,85945],{"class":319},[178,86072,86073],{"class":188},"'小号'",[178,86075,57185],{"class":319},[178,86077,86078],{"class":188},"'紫色'",[178,86080,57191],{"class":319},[178,86082,86083,86086],{"class":180,"line":34661},[178,86084,86085],{"class":319},"        gift: ",[178,86087,86088],{"class":188},"'50g茶叶,清洗球'\n",[178,86090,86091],{"class":180,"line":34667},[178,86092,54125],{"class":319},[178,86094,86095],{"class":180,"line":34678},[178,86096,54833],{"class":319},[178,86098,86099],{"class":180,"line":34684},[178,86100,86101],{"class":2008},"    \u002F\u002F  1.根据数据渲染页面\n",[178,86103,86104,86106,86108,86110,86112,86114,86116,86118,86120,86122,86124,86126],{"class":180,"line":34704},[178,86105,54134],{"class":319},[178,86107,56120],{"class":184},[178,86109,944],{"class":319},[178,86111,81620],{"class":188},[178,86113,75969],{"class":319},[178,86115,330],{"class":699},[178,86117,81767],{"class":319},[178,86119,75764],{"class":184},[178,86121,944],{"class":319},[178,86123,81514],{"class":6985},[178,86125,81517],{"class":699},[178,86127,17330],{"class":319},[178,86129,86130],{"class":180,"line":34720},[178,86131,86132],{"class":2008},"      \u002F\u002F 对象解构\n",[178,86134,86135,86137,86139,86141,86143,86145,86147,86150,86152,86154,86156,86159,86161,86164,86166,86168],{"class":180,"line":34726},[178,86136,59949],{"class":699},[178,86138,81526],{"class":319},[178,86140,81539],{"class":195},[178,86142,14196],{"class":319},[178,86144,81529],{"class":195},[178,86146,14196],{"class":319},[178,86148,86149],{"class":195},"count",[178,86151,14196],{"class":319},[178,86153,81534],{"class":195},[178,86155,14196],{"class":319},[178,86157,86158],{"class":195},"spec",[178,86160,14196],{"class":319},[178,86162,86163],{"class":195},"gift",[178,86165,81542],{"class":319},[178,86167,330],{"class":699},[178,86169,81547],{"class":319},[178,86171,86172],{"class":180,"line":34740},[178,86173,86174],{"class":2008},"      \u002F\u002F 规格文字模块处理\n",[178,86176,86177,86179,86182,86184,86186,86188,86190,86192,86194,86196],{"class":180,"line":34746},[178,86178,59949],{"class":699},[178,86180,86181],{"class":195}," text",[178,86183,734],{"class":699},[178,86185,83656],{"class":319},[178,86187,83659],{"class":184},[178,86189,83662],{"class":319},[178,86191,75943],{"class":184},[178,86193,944],{"class":319},[178,86195,83669],{"class":188},[178,86197,863],{"class":319},[178,86199,86200],{"class":180,"line":34752},[178,86201,86202],{"class":2008},"      \u002F\u002F 处理赠品模块\n",[178,86204,86205,86207,86209,86211,86214,86216,86218,86220,86222,86225,86227,86229,86231,86233,86235,86238,86240,86243,86245,86247,86249,86251,86253,86255],{"class":180,"line":34763},[178,86206,59949],{"class":699},[178,86208,75639],{"class":195},[178,86210,734],{"class":699},[178,86212,86213],{"class":319}," gift ",[178,86215,2925],{"class":699},[178,86217,84827],{"class":319},[178,86219,84830],{"class":184},[178,86221,944],{"class":319},[178,86223,86224],{"class":188},"','",[178,86226,32567],{"class":319},[178,86228,75764],{"class":184},[178,86230,944],{"class":319},[178,86232,81514],{"class":6985},[178,86234,81517],{"class":699},[178,86236,86237],{"class":188}," `\u003Cspan class=\"tag\">【赠品】${",[178,86239,81514],{"class":319},[178,86241,86242],{"class":188},"}\u003C\u002Fspan>`",[178,86244,32567],{"class":319},[178,86246,75943],{"class":184},[178,86248,944],{"class":319},[178,86250,75948],{"class":188},[178,86252,15474],{"class":319},[178,86254,2799],{"class":699},[178,86256,71824],{"class":188},[178,86258,86259],{"class":180,"line":34769},[178,86260,86261],{"class":2008},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[178,86263,86264,86266,86269,86271,86274,86276,86278,86280,86283,86285,86287,86289,86292,86294,86296],{"class":180,"line":34775},[178,86265,59949],{"class":699},[178,86267,86268],{"class":195}," subtotal",[178,86270,734],{"class":699},[178,86272,86273],{"class":319}," ((price ",[178,86275,2395],{"class":699},[178,86277,7523],{"class":195},[178,86279,8287],{"class":699},[178,86281,86282],{"class":319}," count) ",[178,86284,2524],{"class":699},[178,86286,7523],{"class":195},[178,86288,32567],{"class":319},[178,86290,86291],{"class":184},"toFixed",[178,86293,944],{"class":319},[178,86295,1669],{"class":195},[178,86297,863],{"class":319},[178,86299,86300],{"class":180,"line":34785},[178,86301,722],{"emptyLinePlaceholder":721},[178,86303,86304,86306],{"class":180,"line":34791},[178,86305,75702],{"class":699},[178,86307,71888],{"class":188},[178,86309,86310],{"class":180,"line":34802},[178,86311,86312],{"class":188},"        \u003Cdiv class=\"item\">\n",[178,86314,86315,86318,86320],{"class":180,"line":34808},[178,86316,86317],{"class":188},"          \u003Cimg src=\"${",[178,86319,81539],{"class":319},[178,86321,81571],{"class":188},[178,86323,86324,86327,86329,86332,86334],{"class":180,"line":34818},[178,86325,86326],{"class":188},"          \u003Cp class=\"name\">${",[178,86328,81529],{"class":319},[178,86330,86331],{"class":188},"}${",[178,86333,3109],{"class":319},[178,86335,81581],{"class":188},[178,86337,86338,86341,86343],{"class":180,"line":34823},[178,86339,86340],{"class":188},"          \u003Cp class=\"spec\">${",[178,86342,159],{"class":319},[178,86344,81581],{"class":188},[178,86346,86347,86350,86352,86354,86356,86358,86360,86362],{"class":180,"line":34829},[178,86348,86349],{"class":188},"          \u003Cp class=\"price\">${",[178,86351,81534],{"class":319},[178,86353,2498],{"class":188},[178,86355,86291],{"class":184},[178,86357,944],{"class":188},[178,86359,1669],{"class":195},[178,86361,2369],{"class":188},[178,86363,81581],{"class":188},[178,86365,86366,86369,86371],{"class":180,"line":34878},[178,86367,86368],{"class":188},"          \u003Cp class=\"count\">x${",[178,86370,86149],{"class":319},[178,86372,81581],{"class":188},[178,86374,86375,86378,86381],{"class":180,"line":34925},[178,86376,86377],{"class":188},"          \u003Cp class=\"sub-total\">${",[178,86379,86380],{"class":319},"subtotal",[178,86382,81581],{"class":188},[178,86384,86385],{"class":180,"line":34930},[178,86386,86387],{"class":188},"        \u003C\u002Fdiv> \n",[178,86389,86390],{"class":180,"line":34936},[178,86391,86392],{"class":188},"             `\n",[178,86394,86395,86398,86400,86402,86404],{"class":180,"line":34955},[178,86396,86397],{"class":319},"    }).",[178,86399,75943],{"class":184},[178,86401,944],{"class":319},[178,86403,75948],{"class":188},[178,86405,863],{"class":319},[178,86407,86408],{"class":180,"line":34961},[178,86409,86410],{"class":2008},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[178,86412,86413,86415,86417,86419,86421,86424,86426,86429,86431,86433,86435,86438,86441,86443,86446,86448,86450,86452,86455,86457,86459,86461,86463],{"class":180,"line":34981},[178,86414,12982],{"class":699},[178,86416,64505],{"class":195},[178,86418,734],{"class":699},[178,86420,81767],{"class":319},[178,86422,86423],{"class":184},"reduce",[178,86425,4160],{"class":319},[178,86427,86428],{"class":6985},"prev",[178,86430,14196],{"class":319},[178,86432,81514],{"class":6985},[178,86434,15474],{"class":319},[178,86436,86437],{"class":699},"=>",[178,86439,86440],{"class":319}," prev ",[178,86442,2421],{"class":699},[178,86444,86445],{"class":319}," (item.price ",[178,86447,2395],{"class":699},[178,86449,7523],{"class":195},[178,86451,8287],{"class":699},[178,86453,86454],{"class":319}," item.count) ",[178,86456,2524],{"class":699},[178,86458,7523],{"class":195},[178,86460,14196],{"class":319},[178,86462,2133],{"class":195},[178,86464,863],{"class":319},[178,86466,86467,86469,86471,86473,86476,86478,86480,86483,86485,86487,86489],{"class":180,"line":34987},[178,86468,54134],{"class":319},[178,86470,56120],{"class":184},[178,86472,944],{"class":319},[178,86474,86475],{"class":188},"'.amount'",[178,86477,75969],{"class":319},[178,86479,330],{"class":699},[178,86481,86482],{"class":319}," total.",[178,86484,86291],{"class":184},[178,86486,944],{"class":319},[178,86488,1669],{"class":195},[178,86490,863],{"class":319},[178,86492,86493,86495,86497],{"class":180,"line":34993},[178,86494,357],{"class":319},[178,86496,53541],{"class":323},[178,86498,336],{"class":319},[178,86500,86501,86503,86505],{"class":180,"line":35003},[178,86502,367],{"class":319},[178,86504,376],{"class":323},[178,86506,336],{"class":319},[178,86508,86509],{"class":180,"line":35008},[178,86510,722],{"emptyLinePlaceholder":721},[178,86512,86513,86515,86517],{"class":180,"line":35014},[178,86514,367],{"class":319},[178,86516,52367],{"class":323},[178,86518,336],{"class":319},[14,86520,86522],{"id":86521},"_411-编程思想","4.11 编程思想",[387,86524,86526],{"id":86525},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,86528,86529,86532],{},[2093,86530,86531],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,86534,86535],{},"调用就可以了",[19,86537,86538],{},[3269,86539],{"alt":160,"src":86540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[387,86542,86544],{"id":86543},"_4112-面向对象","4.11.2 面向对象",[19,86546,86547],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,86549,86550],{},[3269,86551],{"alt":160,"src":86552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,86554,86555],{},"面向对象的特性：",[2946,86557,86558,86561,86564],{},[29,86559,86560],{},"封装性",[29,86562,86563],{},"继承性",[29,86565,86566],{},"多态性",[387,86568,86570],{"id":86569},"_4113-两者比较","4.11.3 两者比较",[19,86572,86573],{},[3269,86574],{"alt":160,"src":86575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86577,86579],{"id":86578},"_412-构造函数回顾","4.12 构造函数回顾",[19,86581,86582],{},[3269,86583],{"alt":160,"src":86584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,86586,86587],{},[3269,86588],{"alt":160,"src":86589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,86591,86592],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,86594,86595],{},[3269,86596],{"alt":160,"src":86597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86599,86601],{"id":86600},"_413-原型","4.13 原型",[387,86603,86605],{"id":86604},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,86607,86608],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,86610,86611],{},[3269,86612],{"alt":160,"src":86613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,86615,86616],{},[3269,86617],{"alt":160,"src":86618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,86620,86621],{},"原型是构造函数的属性，它也是一个对象",[19,86623,86624],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,86626,86627],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[154,86629,86631],{"className":310,"code":86630,"language":312,"meta":160,"style":160},"\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",[70,86632,86633,86641,86646,86654,86659,86664,86669,86674,86679,86683,86687,86691,86696,86701,86705,86710,86715,86720,86725,86730,86734,86742],{"__ignoreMap":160},[178,86634,86635,86637,86639],{"class":180,"line":181},[178,86636,320],{"class":319},[178,86638,376],{"class":323},[178,86640,336],{"class":319},[178,86642,86643],{"class":180,"line":263},[178,86644,86645],{"class":2008},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[178,86647,86648,86650,86652],{"class":180,"line":274},[178,86649,341],{"class":319},[178,86651,53541],{"class":323},[178,86653,336],{"class":319},[178,86655,86656],{"class":180,"line":354},[178,86657,86658],{"class":319},"    function Star(uname, age) {\n",[178,86660,86661],{"class":180,"line":364},[178,86662,86663],{"class":319},"      this.uname = uname,\n",[178,86665,86666],{"class":180,"line":740},[178,86667,86668],{"class":319},"        this.age = age\n",[178,86670,86671],{"class":180,"line":746},[178,86672,86673],{"class":319},"      \u002F\u002F this.sing = function () {\n",[178,86675,86676],{"class":180,"line":752},[178,86677,86678],{"class":319},"      \u002F\u002F   console.log('唱歌')\n",[178,86680,86681],{"class":180,"line":757},[178,86682,722],{"emptyLinePlaceholder":721},[178,86684,86685],{"class":180,"line":763},[178,86686,61758],{"class":319},[178,86688,86689],{"class":180,"line":769},[178,86690,3971],{"class":319},[178,86692,86693],{"class":180,"line":774},[178,86694,86695],{"class":319},"    Star.prototype.sing = function () {\n",[178,86697,86698],{"class":180,"line":780},[178,86699,86700],{"class":319},"      console.log('唱歌')\n",[178,86702,86703],{"class":180,"line":786},[178,86704,3971],{"class":319},[178,86706,86707],{"class":180,"line":792},[178,86708,86709],{"class":319},"    \u002F\u002F console.dir(Star.prototype)\n",[178,86711,86712],{"class":180,"line":798},[178,86713,86714],{"class":319},"    const pink = new Star('pink', 18)\n",[178,86716,86717],{"class":180,"line":804},[178,86718,86719],{"class":319},"    const red = new Star('red', 20)\n",[178,86721,86722],{"class":180,"line":810},[178,86723,86724],{"class":319},"    pink.sing()\n",[178,86726,86727],{"class":180,"line":816},[178,86728,86729],{"class":319},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[178,86731,86732],{"class":180,"line":822},[178,86733,722],{"emptyLinePlaceholder":721},[178,86735,86736,86738,86740],{"class":180,"line":827},[178,86737,357],{"class":319},[178,86739,53541],{"class":323},[178,86741,336],{"class":319},[178,86743,86744,86746,86748],{"class":180,"line":832},[178,86745,367],{"class":319},[178,86747,376],{"class":323},[178,86749,336],{"class":319},[19,86751,86752],{},[3269,86753],{"alt":160,"src":86754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[154,86756,86758],{"className":310,"code":86757,"language":312,"meta":160,"style":160},"\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",[70,86759,86760,86768,86776,86781,86786,86791,86796,86800,86805,86810,86815,86819,86824,86828,86832,86837,86841,86849],{"__ignoreMap":160},[178,86761,86762,86764,86766],{"class":180,"line":181},[178,86763,320],{"class":319},[178,86765,376],{"class":323},[178,86767,336],{"class":319},[178,86769,86770,86772,86774],{"class":180,"line":263},[178,86771,341],{"class":319},[178,86773,53541],{"class":323},[178,86775,336],{"class":319},[178,86777,86778],{"class":180,"line":274},[178,86779,86780],{"class":319},"    let that\n",[178,86782,86783],{"class":180,"line":354},[178,86784,86785],{"class":319},"    function Star(uname) {\n",[178,86787,86788],{"class":180,"line":364},[178,86789,86790],{"class":319},"      this.uname = uname\n",[178,86792,86793],{"class":180,"line":740},[178,86794,86795],{"class":319},"      that = this\n",[178,86797,86798],{"class":180,"line":746},[178,86799,3971],{"class":319},[178,86801,86802],{"class":180,"line":752},[178,86803,86804],{"class":319},"    \u002F\u002F 实例对象是 ldh\n",[178,86806,86807],{"class":180,"line":757},[178,86808,86809],{"class":319},"    const ldh = new Star('刘德华')\n",[178,86811,86812],{"class":180,"line":763},[178,86813,86814],{"class":319},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[178,86816,86817],{"class":180,"line":769},[178,86818,722],{"emptyLinePlaceholder":721},[178,86820,86821],{"class":180,"line":774},[178,86822,86823],{"class":319},"    Star.sing = function () {\n",[178,86825,86826],{"class":180,"line":780},[178,86827,86700],{"class":319},[178,86829,86830],{"class":180,"line":786},[178,86831,3971],{"class":319},[178,86833,86834],{"class":180,"line":792},[178,86835,86836],{"class":319},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[178,86838,86839],{"class":180,"line":798},[178,86840,722],{"emptyLinePlaceholder":721},[178,86842,86843,86845,86847],{"class":180,"line":804},[178,86844,357],{"class":319},[178,86846,53541],{"class":323},[178,86848,336],{"class":319},[178,86850,86851,86853,86855],{"class":180,"line":810},[178,86852,367],{"class":319},[178,86854,376],{"class":323},[178,86856,336],{"class":319},[19,86858,86859],{},"构造函数的this指向的是实例对象；",[19,86861,86862],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[387,86864,86866],{"id":86865},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,86868,86869],{},[3269,86870],{"alt":160,"src":86871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[154,86873,86875],{"className":310,"code":86874,"language":312,"meta":160,"style":160},"\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",[70,86876,86877,86885,86893,86898,86903,86908,86913,86918,86923,86928,86933,86938,86943,86947,86952,86957,86962,86967,86971,86976,86981,86986,86991,86995,87000,87005,87010,87015,87019,87024,87028,87036],{"__ignoreMap":160},[178,86878,86879,86881,86883],{"class":180,"line":181},[178,86880,320],{"class":319},[178,86882,376],{"class":323},[178,86884,336],{"class":319},[178,86886,86887,86889,86891],{"class":180,"line":263},[178,86888,341],{"class":319},[178,86890,53541],{"class":323},[178,86892,336],{"class":319},[178,86894,86895],{"class":180,"line":274},[178,86896,86897],{"class":319},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[178,86899,86900],{"class":180,"line":354},[178,86901,86902],{"class":319},"    const arr = [1, 2, 3]\n",[178,86904,86905],{"class":180,"line":364},[178,86906,86907],{"class":319},"    \u002F\u002F 自己定义数组的扩展方法\n",[178,86909,86910],{"class":180,"line":740},[178,86911,86912],{"class":319},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[178,86914,86915],{"class":180,"line":746},[178,86916,86917],{"class":319},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[178,86919,86920],{"class":180,"line":752},[178,86921,86922],{"class":319},"    \u002F\u002F ①.最大值\n",[178,86924,86925],{"class":180,"line":757},[178,86926,86927],{"class":319},"    Array.prototype.max = function () {\n",[178,86929,86930],{"class":180,"line":763},[178,86931,86932],{"class":319},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[178,86934,86935],{"class":180,"line":769},[178,86936,86937],{"class":319},"      return Math.max(...this)\n",[178,86939,86940],{"class":180,"line":774},[178,86941,86942],{"class":319},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[178,86944,86945],{"class":180,"line":780},[178,86946,3971],{"class":319},[178,86948,86949],{"class":180,"line":786},[178,86950,86951],{"class":319},"    console.log(arr.max())\n",[178,86953,86954],{"class":180,"line":792},[178,86955,86956],{"class":319},"    \u002F\u002F ②最小值\n",[178,86958,86959],{"class":180,"line":798},[178,86960,86961],{"class":319},"    Array.prototype.min = function () {\n",[178,86963,86964],{"class":180,"line":804},[178,86965,86966],{"class":319},"      return Math.min(...this)\n",[178,86968,86969],{"class":180,"line":810},[178,86970,3971],{"class":319},[178,86972,86973],{"class":180,"line":816},[178,86974,86975],{"class":319},"    console.log(arr.min())\n",[178,86977,86978],{"class":180,"line":822},[178,86979,86980],{"class":319},"    \u002F\u002F③求和\n",[178,86982,86983],{"class":180,"line":827},[178,86984,86985],{"class":319},"    Array.prototype.sum = function () {\n",[178,86987,86988],{"class":180,"line":832},[178,86989,86990],{"class":319},"      return this.reduce((prev, current) => prev + current, 0)\n",[178,86992,86993],{"class":180,"line":850},[178,86994,3971],{"class":319},[178,86996,86997],{"class":180,"line":866},[178,86998,86999],{"class":319},"    console.log(arr.sum())\n",[178,87001,87002],{"class":180,"line":877},[178,87003,87004],{"class":319},"    \u002F\u002F ③排序\n",[178,87006,87007],{"class":180,"line":882},[178,87008,87009],{"class":319},"    Array.prototype.rever = function () {\n",[178,87011,87012],{"class":180,"line":898},[178,87013,87014],{"class":319},"      return this.reverse()\n",[178,87016,87017],{"class":180,"line":914},[178,87018,3971],{"class":319},[178,87020,87021],{"class":180,"line":919},[178,87022,87023],{"class":319},"    console.log(arr.rever())\n",[178,87025,87026],{"class":180,"line":935},[178,87027,722],{"emptyLinePlaceholder":721},[178,87029,87030,87032,87034],{"class":180,"line":952},[178,87031,357],{"class":319},[178,87033,53541],{"class":323},[178,87035,336],{"class":319},[178,87037,87038,87040,87042],{"class":180,"line":966},[178,87039,367],{"class":319},[178,87041,376],{"class":323},[178,87043,336],{"class":319},[19,87045,87046],{},[3269,87047],{"alt":160,"src":87048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[387,87050,87052],{"id":87051},"_4133-constructor-属性","4.13.3 constructor 属性",[19,87054,87055],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,87057,87058],{},[3269,87059],{"alt":160,"src":87060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[154,87062,87064],{"className":310,"code":87063,"language":312,"meta":160,"style":160},"\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",[70,87065,87066,87074,87082,87087,87092,87096,87101,87106,87111,87119],{"__ignoreMap":160},[178,87067,87068,87070,87072],{"class":180,"line":181},[178,87069,320],{"class":319},[178,87071,376],{"class":323},[178,87073,336],{"class":319},[178,87075,87076,87078,87080],{"class":180,"line":263},[178,87077,341],{"class":319},[178,87079,53541],{"class":323},[178,87081,336],{"class":319},[178,87083,87084],{"class":180,"line":274},[178,87085,87086],{"class":319},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[178,87088,87089],{"class":180,"line":354},[178,87090,87091],{"class":319},"    function Star() {\n",[178,87093,87094],{"class":180,"line":364},[178,87095,3971],{"class":319},[178,87097,87098],{"class":180,"line":740},[178,87099,87100],{"class":319},"    const ldh = new Star()\n",[178,87102,87103],{"class":180,"line":746},[178,87104,87105],{"class":319},"    console.log(Star.prototype)\n",[178,87107,87108],{"class":180,"line":752},[178,87109,87110],{"class":319},"    console.log(Star.prototype.constructor === Star)\n",[178,87112,87113,87115,87117],{"class":180,"line":757},[178,87114,357],{"class":319},[178,87116,53541],{"class":323},[178,87118,336],{"class":319},[178,87120,87121,87123,87125],{"class":180,"line":763},[178,87122,367],{"class":319},[178,87124,376],{"class":323},[178,87126,336],{"class":319},[19,87128,87129],{},[3269,87130],{"alt":160,"src":87131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,87133,87134],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[154,87136,87138],{"className":310,"code":87137,"language":312,"meta":160,"style":160},"  \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",[70,87139,87140,87148,87152,87156,87160,87165,87170,87175,87179,87184,87189,87194,87199,87204,87209,87213,87217,87222,87227,87232,87236,87241,87246,87250,87254,87258],{"__ignoreMap":160},[178,87141,87142,87144,87146],{"class":180,"line":181},[178,87143,341],{"class":319},[178,87145,53541],{"class":323},[178,87147,336],{"class":319},[178,87149,87150],{"class":180,"line":263},[178,87151,87086],{"class":319},[178,87153,87154],{"class":180,"line":274},[178,87155,87091],{"class":319},[178,87157,87158],{"class":180,"line":354},[178,87159,3971],{"class":319},[178,87161,87162],{"class":180,"line":364},[178,87163,87164],{"class":319},"    \u002F\u002F const ldh = new Star()\n",[178,87166,87167],{"class":180,"line":740},[178,87168,87169],{"class":319},"    \u002F\u002F console.log(Star.prototype)\n",[178,87171,87172],{"class":180,"line":746},[178,87173,87174],{"class":319},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[178,87176,87177],{"class":180,"line":752},[178,87178,722],{"emptyLinePlaceholder":721},[178,87180,87181],{"class":180,"line":757},[178,87182,87183],{"class":319},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[178,87185,87186],{"class":180,"line":763},[178,87187,87188],{"class":319},"    \u002F\u002F Star.prototype.sing = function () {\n",[178,87190,87191],{"class":180,"line":769},[178,87192,87193],{"class":319},"    \u002F\u002F   console.log('唱歌')\n",[178,87195,87196],{"class":180,"line":774},[178,87197,87198],{"class":319},"    \u002F\u002F }\n",[178,87200,87201],{"class":180,"line":780},[178,87202,87203],{"class":319},"    \u002F\u002F Star.prototype.dance = function () {\n",[178,87205,87206],{"class":180,"line":786},[178,87207,87208],{"class":319},"    \u002F\u002F   console.log('跳舞')\n",[178,87210,87211],{"class":180,"line":792},[178,87212,87198],{"class":319},[178,87214,87215],{"class":180,"line":798},[178,87216,87105],{"class":319},[178,87218,87219],{"class":180,"line":804},[178,87220,87221],{"class":319},"    Star.prototype = {\n",[178,87223,87224],{"class":180,"line":810},[178,87225,87226],{"class":319},"      sing: function () {\n",[178,87228,87229],{"class":180,"line":816},[178,87230,87231],{"class":319},"        console.log('唱歌')\n",[178,87233,87234],{"class":180,"line":822},[178,87235,79612],{"class":319},[178,87237,87238],{"class":180,"line":827},[178,87239,87240],{"class":319},"      dance: function () {\n",[178,87242,87243],{"class":180,"line":832},[178,87244,87245],{"class":319},"        console.log('跳舞')\n",[178,87247,87248],{"class":180,"line":850},[178,87249,54125],{"class":319},[178,87251,87252],{"class":180,"line":866},[178,87253,3971],{"class":319},[178,87255,87256],{"class":180,"line":877},[178,87257,87105],{"class":319},[178,87259,87260,87262,87264],{"class":180,"line":882},[178,87261,357],{"class":319},[178,87263,53541],{"class":323},[178,87265,336],{"class":319},[19,87267,87268],{},"进行输出结果后会发现：",[19,87270,87271],{},[3269,87272],{"alt":160,"src":87273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,87275,87276],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,87278,87279],{},"所以，要重新指回创造这个原型对象的构造函数",[154,87281,87283],{"className":72933,"code":87282,"language":72935,"meta":160,"style":160},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[70,87284,87285,87299,87304,87309,87320,87333,87338,87349,87363,87367],{"__ignoreMap":160},[178,87286,87287,87290,87292,87295,87297],{"class":180,"line":181},[178,87288,87289],{"class":195},"Star",[178,87291,2498],{"class":319},[178,87293,87294],{"class":195},"prototype",[178,87296,734],{"class":699},[178,87298,17330],{"class":319},[178,87300,87301],{"class":180,"line":263},[178,87302,87303],{"class":2008},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[178,87305,87306],{"class":180,"line":274},[178,87307,87308],{"class":319},"  constructor: Star,\n",[178,87310,87311,87314,87316,87318],{"class":180,"line":354},[178,87312,87313],{"class":184},"  sing",[178,87315,53167],{"class":319},[178,87317,56170],{"class":699},[178,87319,56173],{"class":319},[178,87321,87322,87324,87326,87328,87331],{"class":180,"line":364},[178,87323,75473],{"class":319},[178,87325,59968],{"class":184},[178,87327,944],{"class":319},[178,87329,87330],{"class":188},"'唱歌'",[178,87332,863],{"class":319},[178,87334,87335],{"class":180,"line":740},[178,87336,87337],{"class":319},"   },\n",[178,87339,87340,87343,87345,87347],{"class":180,"line":746},[178,87341,87342],{"class":184},"   dance",[178,87344,53167],{"class":319},[178,87346,56170],{"class":699},[178,87348,56173],{"class":319},[178,87350,87351,87354,87356,87358,87361],{"class":180,"line":752},[178,87352,87353],{"class":319},"     console.",[178,87355,59968],{"class":184},[178,87357,944],{"class":319},[178,87359,87360],{"class":188},"'跳舞'",[178,87362,863],{"class":319},[178,87364,87365],{"class":180,"line":757},[178,87366,6080],{"class":319},[178,87368,87369],{"class":180,"line":763},[178,87370,3371],{"class":319},[19,87372,87373],{},[3269,87374],{"alt":160,"src":87375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,87377,87378],{},"总结1：",[19,87380,87381],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,87383,87384],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,87386,87387],{},"constructor指的是他的来源",[19,87389,87390],{},[3269,87391],{"alt":160,"src":87392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,87394,87395],{},[3269,87396],{"alt":160,"src":87397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,87399,87400],{},"总结2：",[19,87402,87403],{},[3269,87404],{"alt":160,"src":87405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,87407,87408],{},[3269,87409],{"alt":160,"src":87410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,87412,87413],{},[3269,87414],{"alt":160,"src":87415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[387,87417,87419],{"id":87418},"_4134-对象原型","4.13.4 对象原型",[19,87421,87422],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,87424,87425],{},"对象原型就是__proto__这个属性",[19,87427,87428],{},[3269,87429],{"alt":160,"src":87430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,87432,87433],{},[3269,87434],{"alt":160,"src":87435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,87437,87438],{},[3269,87439],{"alt":160,"src":87440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,87442,87443],{},[3269,87444],{"alt":160,"src":87445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[154,87447,87449],{"className":310,"code":87448,"language":312,"meta":160,"style":160},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[70,87450,87451,87459,87467,87471,87475,87479,87484,87492],{"__ignoreMap":160},[178,87452,87453,87455,87457],{"class":180,"line":181},[178,87454,320],{"class":319},[178,87456,376],{"class":323},[178,87458,336],{"class":319},[178,87460,87461,87463,87465],{"class":180,"line":263},[178,87462,341],{"class":319},[178,87464,53541],{"class":323},[178,87466,336],{"class":319},[178,87468,87469],{"class":180,"line":274},[178,87470,87091],{"class":319},[178,87472,87473],{"class":180,"line":354},[178,87474,3971],{"class":319},[178,87476,87477],{"class":180,"line":364},[178,87478,87100],{"class":319},[178,87480,87481],{"class":180,"line":740},[178,87482,87483],{"class":319},"    console.log(ldh)\n",[178,87485,87486,87488,87490],{"class":180,"line":746},[178,87487,357],{"class":319},[178,87489,53541],{"class":323},[178,87491,336],{"class":319},[178,87493,87494,87496,87498],{"class":180,"line":752},[178,87495,367],{"class":319},[178,87497,376],{"class":323},[178,87499,336],{"class":319},[19,87501,87502],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,87504,87505],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,87507,87508],{},[3269,87509],{"alt":160,"src":87510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,87512,87513],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,87515,87516],{},"对象原型指向原型对象",[19,87518,87519],{},[3269,87520],{"alt":160,"src":87521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,87523,87524],{},[3269,87525],{"alt":160,"src":87526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,87528,87529],{},[3269,87530],{"alt":160,"src":87531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[387,87533,87535],{"id":87534},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,87537,87538],{},[3269,87539],{"alt":160,"src":87540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[26,87542,87543,87546,87549,87552],{},[29,87544,87545],{},"构造函数通过new的形式实例化得到实例对象",[29,87547,87548],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[29,87550,87551],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[29,87553,87554],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,87556,87557],{},[3269,87558],{"alt":160,"src":87559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,87561,87562],{},"题目梳理：",[19,87564,87565],{},[3269,87566],{"alt":160,"src":87567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[387,87569,87571],{"id":87570},"_4136-原型继承","4.13.6 原型继承",[19,87573,87574],{},[3269,87575],{"alt":160,"src":87576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,87578,87579],{},[3269,87580],{"alt":160,"src":87581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,87583,87584],{},[3269,87585],{"alt":160,"src":87586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,87588,87589],{},[3269,87590],{"alt":160,"src":87591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,87593,87594],{},[3269,87595],{"alt":160,"src":87596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,87598,87599],{},[3269,87600],{"alt":160,"src":87601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,87603,87604],{},[3269,87605],{"alt":160,"src":87606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,87608,87609],{},[3269,87610],{"alt":160,"src":87611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,87613,87614],{},"回顾：构造函数每次new得到对象都是不同的",[387,87616,87618],{"id":87617},"_4137-原型链","4.13.7 原型链",[19,87620,87621],{},[3269,87622],{"alt":160,"src":87623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,87625,87626],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,87628,87629],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,87631,87632],{},"大哥是Object",[19,87634,87635],{},[3269,87636],{"alt":160,"src":87637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,87639,87640],{},[3269,87641],{"alt":160,"src":87642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,87644,87645],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,87647,87648],{},"万物皆对象",[387,87650,87652],{"id":87651},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,87654,87655],{},"模态框",[19,87657,87658],{},"以后遇见这个效果直接使用这个就行",[19,87660,87661],{},[3269,87662],{"alt":160,"src":87663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,87665,87666],{},[3269,87667],{"alt":160,"src":87668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,87670,87671],{},[3269,87672],{"alt":160,"src":87673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,87675,87676],{},[3269,87677],{"alt":160,"src":87678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,87680,87681],{},"补充知识点：",[26,87683,87684],{},[29,87685,87686],{},"append()",[19,87688,87689],{},[3269,87690],{"alt":160,"src":87691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[154,87693,87695],{"className":52365,"code":87694,"language":52367,"meta":160,"style":160},"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",[70,87696,87697,87702,87707,87712,87716,87720,87724,87729,87734,87739,87743],{"__ignoreMap":160},[178,87698,87699],{"class":180,"line":181},[178,87700,87701],{"class":319},"append(param1)\n",[178,87703,87704],{"class":180,"line":263},[178,87705,87706],{"class":319},"append(param1, param2)\n",[178,87708,87709],{"class":180,"line":274},[178,87710,87711],{"class":319},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[178,87713,87714],{"class":180,"line":354},[178,87715,722],{"emptyLinePlaceholder":721},[178,87717,87718],{"class":180,"line":364},[178,87719,722],{"emptyLinePlaceholder":721},[178,87721,87722],{"class":180,"line":740},[178,87723,722],{"emptyLinePlaceholder":721},[178,87725,87726],{"class":180,"line":746},[178,87727,87728],{"class":319},"let div = document.createElement(\"div\");\n",[178,87730,87731],{"class":180,"line":752},[178,87732,87733],{"class":319},"let p = document.createElement(\"p\");\n",[178,87735,87736],{"class":180,"line":757},[178,87737,87738],{"class":319},"div.append(p);\n",[178,87740,87741],{"class":180,"line":763},[178,87742,722],{"emptyLinePlaceholder":721},[178,87744,87745,87748,87750],{"class":180,"line":769},[178,87746,87747],{"class":319},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[178,87749,19],{"class":323},[178,87751,87752],{"class":319},"> ]\n",[26,87754,87755],{"start":263},[29,87756,87757],{},"remove()",[19,87759,87760],{},"自己删自己",[19,87762,87763],{},[3269,87764],{"alt":160,"src":87765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[154,87767,87769],{"className":52365,"code":87768,"language":52367,"meta":160,"style":160},"\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",[70,87770,87771,87781,87795,87799,87807,87821,87841,87853,87861,87868,87880,87893,87928,87940,87951,87963,87975,87987,88014,88024,88028,88032,88041,88053,88067,88077,88089,88093,88097,88107,88118,88128,88138,88151,88164,88174,88178,88182,88191,88201,88213,88217,88221,88230,88240,88250,88262,88266,88270,88280,88296,88307,88317,88327,88339,88351,88363,88367,88371,88384,88395,88399,88407,88415,88419,88427,88447,88467,88475,88480,88506,88511,88516,88535,88540,88552,88557,88568,88578,88588,88593,88598,88602,88607,88612,88617,88637,88642,88662,88667,88681,88686,88691,88696,88712,88716,88721,88750,88755,88760,88765,88776,88780,88784,88788,88793,88818,88823,88848,88853,88862,88866,88871,88896,88900,88925,88929,88938,88942,88947,88965,88975,88979,88987,88995,88999],{"__ignoreMap":160},[178,87772,87773,87775,87777,87779],{"class":180,"line":181},[178,87774,53029],{"class":319},[178,87776,53032],{"class":323},[178,87778,53035],{"class":184},[178,87780,336],{"class":319},[178,87782,87783,87785,87787,87789,87791,87793],{"class":180,"line":263},[178,87784,320],{"class":319},[178,87786,52367],{"class":323},[178,87788,53046],{"class":184},[178,87790,330],{"class":319},[178,87792,53051],{"class":188},[178,87794,336],{"class":319},[178,87796,87797],{"class":180,"line":274},[178,87798,722],{"emptyLinePlaceholder":721},[178,87800,87801,87803,87805],{"class":180,"line":354},[178,87802,320],{"class":319},[178,87804,53064],{"class":323},[178,87806,336],{"class":319},[178,87808,87809,87811,87813,87815,87817,87819],{"class":180,"line":364},[178,87810,341],{"class":319},[178,87812,53074],{"class":323},[178,87814,53077],{"class":184},[178,87816,330],{"class":319},[178,87818,53082],{"class":188},[178,87820,336],{"class":319},[178,87822,87823,87825,87827,87829,87831,87833,87835,87837,87839],{"class":180,"line":740},[178,87824,341],{"class":319},[178,87826,53074],{"class":323},[178,87828,426],{"class":184},[178,87830,330],{"class":319},[178,87832,53121],{"class":188},[178,87834,53101],{"class":184},[178,87836,330],{"class":319},[178,87838,53128],{"class":188},[178,87840,336],{"class":319},[178,87842,87843,87845,87847,87849,87851],{"class":180,"line":746},[178,87844,341],{"class":319},[178,87846,53137],{"class":323},[178,87848,53140],{"class":319},[178,87850,53137],{"class":323},[178,87852,336],{"class":319},[178,87854,87855,87857,87859],{"class":180,"line":752},[178,87856,341],{"class":319},[178,87858,1853],{"class":323},[178,87860,336],{"class":319},[178,87862,87863,87866],{"class":180,"line":757},[178,87864,87865],{"class":184},"    .modal",[178,87867,17330],{"class":319},[178,87869,87870,87872,87874,87876,87878],{"class":180,"line":763},[178,87871,56492],{"class":195},[178,87873,53167],{"class":319},[178,87875,5745],{"class":195},[178,87877,53222],{"class":699},[178,87879,3100],{"class":319},[178,87881,87882,87885,87887,87889,87891],{"class":180,"line":769},[178,87883,87884],{"class":195},"      min-height",[178,87886,53167],{"class":319},[178,87888,2251],{"class":195},[178,87890,53222],{"class":699},[178,87892,3100],{"class":319},[178,87894,87895,87897,87899,87901,87903,87905,87907,87909,87911,87913,87915,87917,87919,87921,87923,87926],{"class":180,"line":774},[178,87896,80470],{"class":195},[178,87898,53167],{"class":319},[178,87900,2133],{"class":195},[178,87902,930],{"class":195},[178,87904,3822],{"class":195},[178,87906,53222],{"class":699},[178,87908,1323],{"class":195},[178,87910,944],{"class":319},[178,87912,2133],{"class":195},[178,87914,14196],{"class":319},[178,87916,2133],{"class":195},[178,87918,14196],{"class":319},[178,87920,2133],{"class":195},[178,87922,14196],{"class":319},[178,87924,87925],{"class":195},"0.1",[178,87927,4495],{"class":319},[178,87929,87930,87932,87934,87936,87938],{"class":180,"line":780},[178,87931,56855],{"class":195},[178,87933,53167],{"class":319},[178,87935,2233],{"class":195},[178,87937,53222],{"class":699},[178,87939,3100],{"class":319},[178,87941,87942,87944,87946,87949],{"class":180,"line":786},[178,87943,56480],{"class":195},[178,87945,53167],{"class":319},[178,87947,87948],{"class":195},"fixed",[178,87950,3100],{"class":319},[178,87952,87953,87956,87958,87961],{"class":180,"line":792},[178,87954,87955],{"class":195},"      z-index",[178,87957,53167],{"class":319},[178,87959,87960],{"class":195},"999",[178,87962,3100],{"class":319},[178,87964,87965,87967,87969,87971,87973],{"class":180,"line":798},[178,87966,56559],{"class":195},[178,87968,53167],{"class":319},[178,87970,2596],{"class":195},[178,87972,2268],{"class":699},[178,87974,3100],{"class":319},[178,87976,87977,87979,87981,87983,87985],{"class":180,"line":804},[178,87978,56668],{"class":195},[178,87980,53167],{"class":319},[178,87982,2596],{"class":195},[178,87984,2268],{"class":699},[178,87986,3100],{"class":319},[178,87988,87989,87991,87993,87995,87997,88000,88002,88004,88006,88008,88010,88012],{"class":180,"line":810},[178,87990,80510],{"class":195},[178,87992,53167],{"class":319},[178,87994,80515],{"class":195},[178,87996,944],{"class":319},[178,87998,87999],{"class":195},"-50",[178,88001,2268],{"class":699},[178,88003,14196],{"class":319},[178,88005,87999],{"class":195},[178,88007,2268],{"class":699},[178,88009,14196],{"class":319},[178,88011,2133],{"class":195},[178,88013,4495],{"class":319},[178,88015,88016,88018,88020,88022],{"class":180,"line":816},[178,88017,56605],{"class":195},[178,88019,53167],{"class":319},[178,88021,62563],{"class":195},[178,88023,3100],{"class":319},[178,88025,88026],{"class":180,"line":822},[178,88027,3971],{"class":319},[178,88029,88030],{"class":180,"line":827},[178,88031,722],{"emptyLinePlaceholder":721},[178,88033,88034,88036,88039],{"class":180,"line":832},[178,88035,87865],{"class":184},[178,88037,88038],{"class":184}," .header",[178,88040,17330],{"class":319},[178,88042,88043,88045,88047,88049,88051],{"class":180,"line":850},[178,88044,59080],{"class":195},[178,88046,53167],{"class":319},[178,88048,2341],{"class":195},[178,88050,53222],{"class":699},[178,88052,3100],{"class":319},[178,88054,88055,88057,88059,88061,88063,88065],{"class":180,"line":866},[178,88056,56416],{"class":195},[178,88058,53167],{"class":319},[178,88060,2133],{"class":195},[178,88062,3822],{"class":195},[178,88064,53222],{"class":699},[178,88066,3100],{"class":319},[178,88068,88069,88071,88073,88075],{"class":180,"line":877},[178,88070,56480],{"class":195},[178,88072,53167],{"class":319},[178,88074,56485],{"class":195},[178,88076,3100],{"class":319},[178,88078,88079,88081,88083,88085,88087],{"class":180,"line":882},[178,88080,56643],{"class":195},[178,88082,53167],{"class":319},[178,88084,2640],{"class":195},[178,88086,53222],{"class":699},[178,88088,3100],{"class":319},[178,88090,88091],{"class":180,"line":898},[178,88092,3971],{"class":319},[178,88094,88095],{"class":180,"line":914},[178,88096,722],{"emptyLinePlaceholder":721},[178,88098,88099,88101,88103,88105],{"class":180,"line":919},[178,88100,87865],{"class":184},[178,88102,88038],{"class":184},[178,88104,4807],{"class":323},[178,88106,17330],{"class":319},[178,88108,88109,88112,88114,88116],{"class":180,"line":935},[178,88110,88111],{"class":195},"      font-style",[178,88113,53167],{"class":319},[178,88115,65561],{"class":195},[178,88117,3100],{"class":319},[178,88119,88120,88122,88124,88126],{"class":180,"line":952},[178,88121,59137],{"class":195},[178,88123,53167],{"class":319},[178,88125,63791],{"class":195},[178,88127,3100],{"class":319},[178,88129,88130,88132,88134,88136],{"class":180,"line":966},[178,88131,56480],{"class":195},[178,88133,53167],{"class":319},[178,88135,56552],{"class":195},[178,88137,3100],{"class":319},[178,88139,88140,88143,88145,88147,88149],{"class":180,"line":980},[178,88141,88142],{"class":195},"      right",[178,88144,53167],{"class":319},[178,88146,2515],{"class":195},[178,88148,53222],{"class":699},[178,88150,3100],{"class":319},[178,88152,88153,88155,88157,88160,88162],{"class":180,"line":985},[178,88154,56668],{"class":195},[178,88156,53167],{"class":319},[178,88158,88159],{"class":195},"-2",[178,88161,53222],{"class":699},[178,88163,3100],{"class":319},[178,88165,88166,88168,88170,88172],{"class":180,"line":1008},[178,88167,63746],{"class":195},[178,88169,53167],{"class":319},[178,88171,63751],{"class":195},[178,88173,3100],{"class":319},[178,88175,88176],{"class":180,"line":1014},[178,88177,3971],{"class":319},[178,88179,88180],{"class":180,"line":1019},[178,88181,722],{"emptyLinePlaceholder":721},[178,88183,88184,88186,88189],{"class":180,"line":1033},[178,88185,87865],{"class":184},[178,88187,88188],{"class":184}," .body",[178,88190,17330],{"class":319},[178,88192,88193,88195,88197,88199],{"class":180,"line":1046},[178,88194,59007],{"class":195},[178,88196,53167],{"class":319},[178,88198,53322],{"class":195},[178,88200,3100],{"class":319},[178,88202,88203,88205,88207,88209,88211],{"class":180,"line":1059},[178,88204,56416],{"class":195},[178,88206,53167],{"class":319},[178,88208,2386],{"class":195},[178,88210,53222],{"class":699},[178,88212,3100],{"class":319},[178,88214,88215],{"class":180,"line":1072},[178,88216,3971],{"class":319},[178,88218,88219],{"class":180,"line":1077},[178,88220,722],{"emptyLinePlaceholder":721},[178,88222,88223,88225,88228],{"class":180,"line":1082},[178,88224,87865],{"class":184},[178,88226,88227],{"class":184}," .footer",[178,88229,17330],{"class":319},[178,88231,88232,88234,88236,88238],{"class":180,"line":1099},[178,88233,56730],{"class":195},[178,88235,53167],{"class":319},[178,88237,53207],{"class":195},[178,88239,3100],{"class":319},[178,88241,88242,88244,88246,88248],{"class":180,"line":9806},[178,88243,56741],{"class":195},[178,88245,53167],{"class":319},[178,88247,53310],{"class":195},[178,88249,3100],{"class":319},[178,88251,88252,88254,88256,88258,88260],{"class":180,"line":9818},[178,88253,56416],{"class":195},[178,88255,53167],{"class":319},[178,88257,2386],{"class":195},[178,88259,53222],{"class":699},[178,88261,3100],{"class":319},[178,88263,88264],{"class":180,"line":11477},[178,88265,3971],{"class":319},[178,88267,88268],{"class":180,"line":11502},[178,88269,722],{"emptyLinePlaceholder":721},[178,88271,88272,88274,88276,88278],{"class":180,"line":11525},[178,88273,87865],{"class":184},[178,88275,88227],{"class":184},[178,88277,3205],{"class":323},[178,88279,17330],{"class":319},[178,88281,88282,88284,88286,88288,88290,88292,88294],{"class":180,"line":11549},[178,88283,56416],{"class":195},[178,88285,53167],{"class":319},[178,88287,2021],{"class":195},[178,88289,53222],{"class":699},[178,88291,3867],{"class":195},[178,88293,53222],{"class":699},[178,88295,3100],{"class":319},[178,88297,88298,88300,88302,88305],{"class":180,"line":11554},[178,88299,63442],{"class":195},[178,88301,53167],{"class":319},[178,88303,88304],{"class":195},"#ccc",[178,88306,3100],{"class":319},[178,88308,88309,88311,88313,88315],{"class":180,"line":11559},[178,88310,65690],{"class":195},[178,88312,53167],{"class":319},[178,88314,56458],{"class":195},[178,88316,3100],{"class":319},[178,88318,88319,88321,88323,88325],{"class":180,"line":11564},[178,88320,59137],{"class":195},[178,88322,53167],{"class":319},[178,88324,62563],{"class":195},[178,88326,3100],{"class":319},[178,88328,88329,88331,88333,88335,88337],{"class":180,"line":11573},[178,88330,56855],{"class":195},[178,88332,53167],{"class":319},[178,88334,1669],{"class":195},[178,88336,53222],{"class":699},[178,88338,3100],{"class":319},[178,88340,88341,88343,88345,88347,88349],{"class":180,"line":11578},[178,88342,63471],{"class":195},[178,88344,53167],{"class":319},[178,88346,2386],{"class":195},[178,88348,53222],{"class":699},[178,88350,3100],{"class":319},[178,88352,88353,88355,88357,88359,88361],{"class":180,"line":11584},[178,88354,56643],{"class":195},[178,88356,53167],{"class":319},[178,88358,2489],{"class":195},[178,88360,53222],{"class":699},[178,88362,3100],{"class":319},[178,88364,88365],{"class":180,"line":11605},[178,88366,3971],{"class":319},[178,88368,88369],{"class":180,"line":11611},[178,88370,722],{"emptyLinePlaceholder":721},[178,88372,88373,88375,88377,88379,88382],{"class":180,"line":11625},[178,88374,87865],{"class":184},[178,88376,88227],{"class":184},[178,88378,3205],{"class":323},[178,88380,88381],{"class":184},".submit",[178,88383,17330],{"class":319},[178,88385,88386,88388,88390,88393],{"class":180,"line":11631},[178,88387,56605],{"class":195},[178,88389,53167],{"class":319},[178,88391,88392],{"class":195},"#369",[178,88394,3100],{"class":319},[178,88396,88397],{"class":180,"line":11658},[178,88398,3971],{"class":319},[178,88400,88401,88403,88405],{"class":180,"line":11667},[178,88402,357],{"class":319},[178,88404,1853],{"class":323},[178,88406,336],{"class":319},[178,88408,88409,88411,88413],{"class":180,"line":11673},[178,88410,367],{"class":319},[178,88412,53064],{"class":323},[178,88414,336],{"class":319},[178,88416,88417],{"class":180,"line":11681},[178,88418,722],{"emptyLinePlaceholder":721},[178,88420,88421,88423,88425],{"class":180,"line":11686},[178,88422,320],{"class":319},[178,88424,376],{"class":323},[178,88426,336],{"class":319},[178,88428,88429,88431,88433,88435,88437,88440,88443,88445],{"class":180,"line":18362},[178,88430,341],{"class":319},[178,88432,55608],{"class":323},[178,88434,16717],{"class":184},[178,88436,330],{"class":319},[178,88438,88439],{"class":188},"\"delete\"",[178,88441,88442],{"class":319},">删除\u003C\u002F",[178,88444,55608],{"class":323},[178,88446,336],{"class":319},[178,88448,88449,88451,88453,88455,88457,88460,88463,88465],{"class":180,"line":18368},[178,88450,341],{"class":319},[178,88452,55608],{"class":323},[178,88454,16717],{"class":184},[178,88456,330],{"class":319},[178,88458,88459],{"class":188},"\"login\"",[178,88461,88462],{"class":319},">登录\u003C\u002F",[178,88464,55608],{"class":323},[178,88466,336],{"class":319},[178,88468,88469,88471,88473],{"class":180,"line":18391},[178,88470,341],{"class":319},[178,88472,53541],{"class":323},[178,88474,336],{"class":319},[178,88476,88477],{"class":180,"line":18397},[178,88478,88479],{"class":2008},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[178,88481,88482,88484,88487,88489,88491,88493,88495,88497,88500,88502,88504],{"class":180,"line":18420},[178,88483,71804],{"class":699},[178,88485,88486],{"class":184}," Modal",[178,88488,944],{"class":319},[178,88490,53137],{"class":6985},[178,88492,734],{"class":699},[178,88494,71650],{"class":188},[178,88496,14196],{"class":319},[178,88498,88499],{"class":6985},"message",[178,88501,734],{"class":699},[178,88503,71650],{"class":188},[178,88505,14203],{"class":319},[178,88507,88508],{"class":180,"line":18434},[178,88509,88510],{"class":2008},"      \u002F\u002F 创建Model 模态框盒子\n",[178,88512,88513],{"class":180,"line":18454},[178,88514,88515],{"class":2008},"      \u002F\u002F 1.1 创建div标签\n",[178,88517,88518,88520,88523,88525,88527,88529,88531,88533],{"class":180,"line":18460},[178,88519,71771],{"class":195},[178,88521,88522],{"class":319},".modalBox ",[178,88524,330],{"class":699},[178,88526,56117],{"class":319},[178,88528,71871],{"class":184},[178,88530,944],{"class":319},[178,88532,83649],{"class":188},[178,88534,863],{"class":319},[178,88536,88537],{"class":180,"line":18471},[178,88538,88539],{"class":2008},"      \u002F\u002F 1.2 给div 添加类名为model\n",[178,88541,88542,88544,88547,88549],{"class":180,"line":18494},[178,88543,71771],{"class":195},[178,88545,88546],{"class":319},".modalBox.className ",[178,88548,330],{"class":699},[178,88550,88551],{"class":188}," 'modal'\n",[178,88553,88554],{"class":180,"line":18516},[178,88555,88556],{"class":2008},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[178,88558,88559,88561,88564,88566],{"class":180,"line":18521},[178,88560,71771],{"class":195},[178,88562,88563],{"class":319},".modalBox.innerHTML ",[178,88565,330],{"class":699},[178,88567,71888],{"class":188},[178,88569,88570,88573,88575],{"class":180,"line":18527},[178,88571,88572],{"class":188},"        \u003Cdiv class=\"header\">${",[178,88574,53137],{"class":319},[178,88576,88577],{"class":188},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[178,88579,88580,88583,88585],{"class":180,"line":18541},[178,88581,88582],{"class":188},"        \u003Cdiv class=\"body\">${",[178,88584,88499],{"class":319},[178,88586,88587],{"class":188},"}\u003C\u002Fdiv>\n",[178,88589,88590],{"class":180,"line":18554},[178,88591,88592],{"class":188},"      `\n",[178,88594,88595],{"class":180,"line":18559},[178,88596,88597],{"class":2008},"      \u002F\u002F console.log(this.modalBox)\n",[178,88599,88600],{"class":180,"line":18573},[178,88601,3971],{"class":319},[178,88603,88604],{"class":180,"line":18578},[178,88605,88606],{"class":2008},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[178,88608,88609],{"class":180,"line":18584},[178,88610,88611],{"class":2008},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[178,88613,88614],{"class":180,"line":18589},[178,88615,88616],{"class":2008},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[178,88618,88619,88622,88624,88626,88628,88631,88633,88635],{"class":180,"line":18603},[178,88620,88621],{"class":195},"    Modal",[178,88623,2498],{"class":319},[178,88625,87294],{"class":195},[178,88627,2498],{"class":319},[178,88629,88630],{"class":184},"open",[178,88632,734],{"class":699},[178,88634,60639],{"class":699},[178,88636,56173],{"class":319},[178,88638,88639],{"class":180,"line":18608},[178,88640,88641],{"class":2008},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[178,88643,88644,88646,88649,88651,88653,88655,88657,88660],{"class":180,"line":18613},[178,88645,59949],{"class":699},[178,88647,88648],{"class":195}," box",[178,88650,734],{"class":699},[178,88652,56117],{"class":319},[178,88654,56120],{"class":184},[178,88656,944],{"class":319},[178,88658,88659],{"class":188},"'.modal'",[178,88661,863],{"class":319},[178,88663,88664],{"class":180,"line":18627},[178,88665,88666],{"class":2008},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[178,88668,88669,88672,88674,88677,88679],{"class":180,"line":18639},[178,88670,88671],{"class":319},"      box ",[178,88673,3510],{"class":699},[178,88675,88676],{"class":319}," box.",[178,88678,58727],{"class":184},[178,88680,3760],{"class":319},[178,88682,88683],{"class":180,"line":18644},[178,88684,88685],{"class":2008},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[178,88687,88688],{"class":180,"line":18657},[178,88689,88690],{"class":2008},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[178,88692,88693],{"class":180,"line":18662},[178,88694,88695],{"class":2008},"      \u002F\u002F append可以增加对象\n",[178,88697,88698,88701,88704,88706,88709],{"class":180,"line":18667},[178,88699,88700],{"class":319},"      document.body.",[178,88702,88703],{"class":184},"append",[178,88705,944],{"class":319},[178,88707,88708],{"class":195},"this",[178,88710,88711],{"class":319},".modalBox)\n",[178,88713,88714],{"class":180,"line":18672},[178,88715,722],{"emptyLinePlaceholder":721},[178,88717,88718],{"class":180,"line":18685},[178,88719,88720],{"class":2008},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[178,88722,88723,88725,88728,88730,88732,88735,88737,88739,88741,88743,88746,88748],{"class":180,"line":18690},[178,88724,71771],{"class":195},[178,88726,88727],{"class":319},".modalBox.",[178,88729,56120],{"class":184},[178,88731,944],{"class":319},[178,88733,88734],{"class":188},"'i'",[178,88736,32567],{"class":319},[178,88738,59534],{"class":184},[178,88740,944],{"class":319},[178,88742,59539],{"class":188},[178,88744,88745],{"class":319},", () ",[178,88747,86437],{"class":699},[178,88749,17330],{"class":319},[178,88751,88752],{"class":180,"line":34365},[178,88753,88754],{"class":2008},"        \u002F\u002F 这个地方需要用到箭头函数\n",[178,88756,88757],{"class":180,"line":34371},[178,88758,88759],{"class":2008},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[178,88761,88762],{"class":180,"line":34377},[178,88763,88764],{"class":2008},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[178,88766,88767,88769,88771,88774],{"class":180,"line":34383},[178,88768,66446],{"class":195},[178,88770,2498],{"class":319},[178,88772,88773],{"class":184},"close",[178,88775,3760],{"class":319},[178,88777,88778],{"class":180,"line":34389},[178,88779,66535],{"class":319},[178,88781,88782],{"class":180,"line":34400},[178,88783,3971],{"class":319},[178,88785,88786],{"class":180,"line":34406},[178,88787,722],{"emptyLinePlaceholder":721},[178,88789,88790],{"class":180,"line":34426},[178,88791,88792],{"class":2008},"    \u002F\u002F 测试一下 点击 删除按钮\n",[178,88794,88795,88797,88799,88801,88804,88806,88808,88810,88812,88814,88816],{"class":180,"line":34432},[178,88796,54134],{"class":319},[178,88798,56120],{"class":184},[178,88800,944],{"class":319},[178,88802,88803],{"class":188},"'#delete'",[178,88805,32567],{"class":319},[178,88807,59534],{"class":184},[178,88809,944],{"class":319},[178,88811,59539],{"class":188},[178,88813,88745],{"class":319},[178,88815,86437],{"class":699},[178,88817,17330],{"class":319},[178,88819,88820],{"class":180,"line":34443},[178,88821,88822],{"class":2008},"      \u002F\u002F 先调用Model构造函数\n",[178,88824,88825,88827,88830,88832,88834,88836,88838,88841,88843,88846],{"class":180,"line":34449},[178,88826,59949],{"class":699},[178,88828,88829],{"class":195}," del",[178,88831,734],{"class":699},[178,88833,13339],{"class":699},[178,88835,88486],{"class":184},[178,88837,944],{"class":319},[178,88839,88840],{"class":188},"'温馨的提示'",[178,88842,14196],{"class":319},[178,88844,88845],{"class":188},"'您没有删除权限操作'",[178,88847,863],{"class":319},[178,88849,88850],{"class":180,"line":34455},[178,88851,88852],{"class":2008},"      \u002F\u002F 实例对象调用open方法\n",[178,88854,88855,88858,88860],{"class":180,"line":34461},[178,88856,88857],{"class":319},"      del.",[178,88859,88630],{"class":184},[178,88861,3760],{"class":319},[178,88863,88864],{"class":180,"line":34467},[178,88865,35193],{"class":319},[178,88867,88868],{"class":180,"line":34473},[178,88869,88870],{"class":2008},"    \u002F\u002F 测试一下 点击 登录按钮\n",[178,88872,88873,88875,88877,88879,88882,88884,88886,88888,88890,88892,88894],{"class":180,"line":34479},[178,88874,54134],{"class":319},[178,88876,56120],{"class":184},[178,88878,944],{"class":319},[178,88880,88881],{"class":188},"'#login'",[178,88883,32567],{"class":319},[178,88885,59534],{"class":184},[178,88887,944],{"class":319},[178,88889,59539],{"class":188},[178,88891,88745],{"class":319},[178,88893,86437],{"class":699},[178,88895,17330],{"class":319},[178,88897,88898],{"class":180,"line":34485},[178,88899,88822],{"class":2008},[178,88901,88902,88904,88907,88909,88911,88913,88915,88918,88920,88923],{"class":180,"line":34505},[178,88903,59949],{"class":699},[178,88905,88906],{"class":195}," log",[178,88908,734],{"class":699},[178,88910,13339],{"class":699},[178,88912,88486],{"class":184},[178,88914,944],{"class":319},[178,88916,88917],{"class":188},"'友情提示'",[178,88919,14196],{"class":319},[178,88921,88922],{"class":188},"'您还没有登录呢'",[178,88924,863],{"class":319},[178,88926,88927],{"class":180,"line":34511},[178,88928,88852],{"class":2008},[178,88930,88931,88934,88936],{"class":180,"line":34527},[178,88932,88933],{"class":319},"      log.",[178,88935,88630],{"class":184},[178,88937,3760],{"class":319},[178,88939,88940],{"class":180,"line":34533},[178,88941,35193],{"class":319},[178,88943,88944],{"class":180,"line":34547},[178,88945,88946],{"class":2008},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[178,88948,88949,88951,88953,88955,88957,88959,88961,88963],{"class":180,"line":34553},[178,88950,88621],{"class":195},[178,88952,2498],{"class":319},[178,88954,87294],{"class":195},[178,88956,2498],{"class":319},[178,88958,88773],{"class":184},[178,88960,734],{"class":699},[178,88962,60639],{"class":699},[178,88964,56173],{"class":319},[178,88966,88967,88969,88971,88973],{"class":180,"line":34568},[178,88968,71771],{"class":195},[178,88970,88727],{"class":319},[178,88972,58727],{"class":184},[178,88974,3760],{"class":319},[178,88976,88977],{"class":180,"line":34574},[178,88978,3971],{"class":319},[178,88980,88981,88983,88985],{"class":180,"line":34583},[178,88982,357],{"class":319},[178,88984,53541],{"class":323},[178,88986,336],{"class":319},[178,88988,88989,88991,88993],{"class":180,"line":34589},[178,88990,367],{"class":319},[178,88992,376],{"class":323},[178,88994,336],{"class":319},[178,88996,88997],{"class":180,"line":34598},[178,88998,722],{"emptyLinePlaceholder":721},[178,89000,89001,89003,89005],{"class":180,"line":34604},[178,89002,367],{"class":319},[178,89004,52367],{"class":323},[178,89006,336],{"class":319},[19,89008,89009],{},[3269,89010],{"alt":160,"src":89011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,89013,89015],{"id":89014},"_414-深浅拷贝","4.14 深浅拷贝",[387,89017,89019],{"id":89018},"_4141-浅拷贝","4.14.1 浅拷贝",[19,89021,89022],{},[3269,89023],{"alt":160,"src":89024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,89026,89027],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,89029,89030],{},[3269,89031],{"alt":160,"src":89032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,89034,89035],{},[3269,89036],{"alt":160,"src":89037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,89039,89040],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,89042,89043],{},[3269,89044],{"alt":160,"src":89045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,89047,13093],{},[19,89049,89050],{},[3269,89051],{"alt":160,"src":89052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[387,89054,89056],{"id":89055},"_4142-深拷贝","4.14.2 深拷贝",[19,89058,89059],{},"深拷贝：拷贝的是对象，不是地址",[19,89061,89062],{},"常用的三种方法：",[26,89064,89065,89068,89071],{},[29,89066,89067],{},"通过递归实现深拷贝",[29,89069,89070],{},"lodash\u002FcloneDeep",[29,89072,89073],{},"通过JSON.stringify()实现",[23756,89075,89077],{"id":89076},"_41421-递归函数","4.14.2.1 递归函数",[19,89079,89080],{},[3269,89081],{"alt":160,"src":89082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[26,89084,89085],{},[29,89086,89087],{},"死递归占溢出：",[154,89089,89091],{"className":310,"code":89090,"language":312,"meta":160,"style":160},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[70,89092,89093,89101,89109,89113,89118,89122,89127,89135],{"__ignoreMap":160},[178,89094,89095,89097,89099],{"class":180,"line":181},[178,89096,320],{"class":319},[178,89098,376],{"class":323},[178,89100,336],{"class":319},[178,89102,89103,89105,89107],{"class":180,"line":263},[178,89104,341],{"class":319},[178,89106,53541],{"class":323},[178,89108,336],{"class":319},[178,89110,89111],{"class":180,"line":274},[178,89112,78863],{"class":319},[178,89114,89115],{"class":180,"line":354},[178,89116,89117],{"class":319},"      fn()\n",[178,89119,89120],{"class":180,"line":364},[178,89121,3971],{"class":319},[178,89123,89124],{"class":180,"line":740},[178,89125,89126],{"class":319},"    fn()\n",[178,89128,89129,89131,89133],{"class":180,"line":746},[178,89130,357],{"class":319},[178,89132,53541],{"class":323},[178,89134,336],{"class":319},[178,89136,89137,89139,89141],{"class":180,"line":752},[178,89138,367],{"class":319},[178,89140,376],{"class":323},[178,89142,336],{"class":319},[26,89144,89145],{"start":263},[29,89146,89147],{},"递归函数要加判断条件：",[19,89149,89150],{},[3269,89151],{"alt":160,"src":89152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[26,89154,89155],{"start":274},[29,89156,89157],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[154,89159,89161],{"className":52365,"code":89160,"language":52367,"meta":160,"style":160},"\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",[70,89162,89163,89173,89187,89191,89199,89213,89233,89245,89253,89257,89265,89277,89285,89293,89318,89330,89334,89341,89349,89357,89361],{"__ignoreMap":160},[178,89164,89165,89167,89169,89171],{"class":180,"line":181},[178,89166,53029],{"class":319},[178,89168,53032],{"class":323},[178,89170,53035],{"class":184},[178,89172,336],{"class":319},[178,89174,89175,89177,89179,89181,89183,89185],{"class":180,"line":263},[178,89176,320],{"class":319},[178,89178,52367],{"class":323},[178,89180,53046],{"class":184},[178,89182,330],{"class":319},[178,89184,53051],{"class":188},[178,89186,336],{"class":319},[178,89188,89189],{"class":180,"line":274},[178,89190,722],{"emptyLinePlaceholder":721},[178,89192,89193,89195,89197],{"class":180,"line":354},[178,89194,320],{"class":319},[178,89196,53064],{"class":323},[178,89198,336],{"class":319},[178,89200,89201,89203,89205,89207,89209,89211],{"class":180,"line":364},[178,89202,341],{"class":319},[178,89204,53074],{"class":323},[178,89206,53077],{"class":184},[178,89208,330],{"class":319},[178,89210,53082],{"class":188},[178,89212,336],{"class":319},[178,89214,89215,89217,89219,89221,89223,89225,89227,89229,89231],{"class":180,"line":740},[178,89216,341],{"class":319},[178,89218,53074],{"class":323},[178,89220,426],{"class":184},[178,89222,330],{"class":319},[178,89224,53121],{"class":188},[178,89226,53101],{"class":184},[178,89228,330],{"class":319},[178,89230,53128],{"class":188},[178,89232,336],{"class":319},[178,89234,89235,89237,89239,89241,89243],{"class":180,"line":746},[178,89236,341],{"class":319},[178,89238,53137],{"class":323},[178,89240,53140],{"class":319},[178,89242,53137],{"class":323},[178,89244,336],{"class":319},[178,89246,89247,89249,89251],{"class":180,"line":752},[178,89248,367],{"class":319},[178,89250,53064],{"class":323},[178,89252,336],{"class":319},[178,89254,89255],{"class":180,"line":757},[178,89256,722],{"emptyLinePlaceholder":721},[178,89258,89259,89261,89263],{"class":180,"line":763},[178,89260,320],{"class":319},[178,89262,376],{"class":323},[178,89264,336],{"class":319},[178,89266,89267,89269,89271,89273,89275],{"class":180,"line":769},[178,89268,341],{"class":319},[178,89270,53341],{"class":323},[178,89272,57035],{"class":319},[178,89274,53341],{"class":323},[178,89276,336],{"class":319},[178,89278,89279,89281,89283],{"class":180,"line":774},[178,89280,341],{"class":319},[178,89282,53541],{"class":323},[178,89284,336],{"class":319},[178,89286,89287,89289,89291],{"class":180,"line":780},[178,89288,71804],{"class":699},[178,89290,75493],{"class":184},[178,89292,12614],{"class":319},[178,89294,89295,89297,89299,89301,89303,89305,89307,89309,89311,89313,89316],{"class":180,"line":786},[178,89296,57492],{"class":319},[178,89298,56120],{"class":184},[178,89300,944],{"class":319},[178,89302,83649],{"class":188},[178,89304,75969],{"class":319},[178,89306,330],{"class":699},[178,89308,13339],{"class":699},[178,89310,75509],{"class":184},[178,89312,19019],{"class":319},[178,89314,89315],{"class":184},"toLocaleString",[178,89317,3760],{"class":319},[178,89319,89320,89323,89326,89328],{"class":180,"line":792},[178,89321,89322],{"class":184},"      setTimeout",[178,89324,89325],{"class":319},"(getTime, ",[178,89327,8179],{"class":195},[178,89329,863],{"class":319},[178,89331,89332],{"class":180,"line":798},[178,89333,3971],{"class":319},[178,89335,89336,89339],{"class":180,"line":804},[178,89337,89338],{"class":184},"    getTime",[178,89340,3760],{"class":319},[178,89342,89343,89345,89347],{"class":180,"line":810},[178,89344,357],{"class":319},[178,89346,53541],{"class":323},[178,89348,336],{"class":319},[178,89350,89351,89353,89355],{"class":180,"line":816},[178,89352,367],{"class":319},[178,89354,376],{"class":323},[178,89356,336],{"class":319},[178,89358,89359],{"class":180,"line":822},[178,89360,722],{"emptyLinePlaceholder":721},[178,89362,89363,89365,89367],{"class":180,"line":827},[178,89364,367],{"class":319},[178,89366,52367],{"class":323},[178,89368,336],{"class":319},[19,89370,89371],{},[3269,89372],{"alt":160,"src":89373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[26,89375,89376],{"start":354},[29,89377,89067],{},[19,89379,89380],{},[3269,89381],{"alt":160,"src":89382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,89384,89385],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,89387,40921],{},[19,89389,89390],{},"这个是简易版的递归函数深拷贝",[19,89392,89393],{},"一定要注意先数组再对象，因为万物皆可对象",[154,89395,89397],{"className":52365,"code":89396,"language":52367,"meta":160,"style":160},"\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",[70,89398,89399,89409,89423,89427,89435,89449,89469,89481,89489,89493,89501,89509,89519,89528,89536,89552,89556,89564,89568,89572,89584,89589,89608,89624,89629,89634,89639,89654,89659,89664,89673,89681,89698,89706,89712,89720,89725,89730,89739,89743,89747,89751,89762,89771,89781,89795,89805,89813,89821,89829,89833],{"__ignoreMap":160},[178,89400,89401,89403,89405,89407],{"class":180,"line":181},[178,89402,53029],{"class":319},[178,89404,53032],{"class":323},[178,89406,53035],{"class":184},[178,89408,336],{"class":319},[178,89410,89411,89413,89415,89417,89419,89421],{"class":180,"line":263},[178,89412,320],{"class":319},[178,89414,52367],{"class":323},[178,89416,53046],{"class":184},[178,89418,330],{"class":319},[178,89420,53051],{"class":188},[178,89422,336],{"class":319},[178,89424,89425],{"class":180,"line":274},[178,89426,722],{"emptyLinePlaceholder":721},[178,89428,89429,89431,89433],{"class":180,"line":354},[178,89430,320],{"class":319},[178,89432,53064],{"class":323},[178,89434,336],{"class":319},[178,89436,89437,89439,89441,89443,89445,89447],{"class":180,"line":364},[178,89438,341],{"class":319},[178,89440,53074],{"class":323},[178,89442,53077],{"class":184},[178,89444,330],{"class":319},[178,89446,53082],{"class":188},[178,89448,336],{"class":319},[178,89450,89451,89453,89455,89457,89459,89461,89463,89465,89467],{"class":180,"line":740},[178,89452,341],{"class":319},[178,89454,53074],{"class":323},[178,89456,426],{"class":184},[178,89458,330],{"class":319},[178,89460,53121],{"class":188},[178,89462,53101],{"class":184},[178,89464,330],{"class":319},[178,89466,53128],{"class":188},[178,89468,336],{"class":319},[178,89470,89471,89473,89475,89477,89479],{"class":180,"line":746},[178,89472,341],{"class":319},[178,89474,53137],{"class":323},[178,89476,53140],{"class":319},[178,89478,53137],{"class":323},[178,89480,336],{"class":319},[178,89482,89483,89485,89487],{"class":180,"line":752},[178,89484,367],{"class":319},[178,89486,53064],{"class":323},[178,89488,336],{"class":319},[178,89490,89491],{"class":180,"line":757},[178,89492,722],{"emptyLinePlaceholder":721},[178,89494,89495,89497,89499],{"class":180,"line":763},[178,89496,320],{"class":319},[178,89498,376],{"class":323},[178,89500,336],{"class":319},[178,89502,89503,89505,89507],{"class":180,"line":769},[178,89504,341],{"class":319},[178,89506,53541],{"class":323},[178,89508,336],{"class":319},[178,89510,89511,89513,89515,89517],{"class":180,"line":774},[178,89512,12982],{"class":699},[178,89514,71691],{"class":195},[178,89516,734],{"class":699},[178,89518,17330],{"class":319},[178,89520,89521,89523,89526],{"class":180,"line":780},[178,89522,73336],{"class":319},[178,89524,89525],{"class":188},"'pink'",[178,89527,33202],{"class":319},[178,89529,89530,89532,89534],{"class":180,"line":786},[178,89531,73346],{"class":319},[178,89533,2590],{"class":195},[178,89535,33202],{"class":319},[178,89537,89538,89541,89544,89546,89549],{"class":180,"line":792},[178,89539,89540],{"class":319},"      hobby: [",[178,89542,89543],{"class":188},"'乒乓球'",[178,89545,14196],{"class":319},[178,89547,89548],{"class":188},"'足球'",[178,89550,89551],{"class":319},"],\n",[178,89553,89554],{"class":180,"line":798},[178,89555,79592],{"class":319},[178,89557,89558,89561],{"class":180,"line":804},[178,89559,89560],{"class":319},"        baby: ",[178,89562,89563],{"class":188},"'小pink'\n",[178,89565,89566],{"class":180,"line":810},[178,89567,54125],{"class":319},[178,89569,89570],{"class":180,"line":816},[178,89571,3971],{"class":319},[178,89573,89574,89576,89579,89581],{"class":180,"line":822},[178,89575,12982],{"class":699},[178,89577,89578],{"class":195}," o",[178,89580,734],{"class":699},[178,89582,89583],{"class":319}," {}\n",[178,89585,89586],{"class":180,"line":827},[178,89587,89588],{"class":2008},"    \u002F\u002F 拷贝函数\n",[178,89590,89591,89593,89596,89598,89601,89603,89606],{"class":180,"line":832},[178,89592,71804],{"class":699},[178,89594,89595],{"class":184}," deepCopy",[178,89597,944],{"class":319},[178,89599,89600],{"class":6985},"newObj",[178,89602,14196],{"class":319},[178,89604,89605],{"class":6985},"oldObj",[178,89607,14203],{"class":319},[178,89609,89610,89612,89614,89616,89619,89621],{"class":180,"line":850},[178,89611,54011],{"class":699},[178,89613,3457],{"class":319},[178,89615,53575],{"class":699},[178,89617,89618],{"class":319}," k ",[178,89620,994],{"class":699},[178,89622,89623],{"class":319}," oldObj) {\n",[178,89625,89626],{"class":180,"line":866},[178,89627,89628],{"class":2008},"        \u002F\u002F 处理数组的问题\n",[178,89630,89631],{"class":180,"line":877},[178,89632,89633],{"class":2008},"        \u002F\u002F 判断是否属于数组\n",[178,89635,89636],{"class":180,"line":882},[178,89637,89638],{"class":2008},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[178,89640,89641,89643,89646,89649,89652],{"class":180,"line":898},[178,89642,4280],{"class":699},[178,89644,89645],{"class":319}," (oldObj[k] ",[178,89647,89648],{"class":699},"instanceof",[178,89650,89651],{"class":184}," Array",[178,89653,14203],{"class":319},[178,89655,89656],{"class":180,"line":914},[178,89657,89658],{"class":2008},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[178,89660,89661],{"class":180,"line":919},[178,89662,89663],{"class":2008},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[178,89665,89666,89669,89671],{"class":180,"line":935},[178,89667,89668],{"class":319},"          newObj[k] ",[178,89670,330],{"class":699},[178,89672,53566],{"class":319},[178,89674,89675,89678],{"class":180,"line":952},[178,89676,89677],{"class":184},"          deepCopy",[178,89679,89680],{"class":319},"(newObj[k], oldObj[k])\n",[178,89682,89683,89685,89687,89689,89691,89693,89696],{"class":180,"line":966},[178,89684,81799],{"class":319},[178,89686,3496],{"class":699},[178,89688,3499],{"class":699},[178,89690,89645],{"class":319},[178,89692,89648],{"class":699},[178,89694,89695],{"class":184}," Object",[178,89697,14203],{"class":319},[178,89699,89700,89702,89704],{"class":180,"line":980},[178,89701,89668],{"class":319},[178,89703,330],{"class":699},[178,89705,89583],{"class":319},[178,89707,89708,89710],{"class":180,"line":985},[178,89709,89677],{"class":184},[178,89711,89680],{"class":319},[178,89713,89714,89716,89718],{"class":180,"line":1008},[178,89715,81799],{"class":319},[178,89717,3496],{"class":699},[178,89719,17330],{"class":319},[178,89721,89722],{"class":180,"line":1014},[178,89723,89724],{"class":2008},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[178,89726,89727],{"class":180,"line":1019},[178,89728,89729],{"class":2008},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[178,89731,89732,89734,89736],{"class":180,"line":1033},[178,89733,89668],{"class":319},[178,89735,330],{"class":699},[178,89737,89738],{"class":319}," oldObj[k]\n",[178,89740,89741],{"class":180,"line":1046},[178,89742,4312],{"class":319},[178,89744,89745],{"class":180,"line":1059},[178,89746,54125],{"class":319},[178,89748,89749],{"class":180,"line":1072},[178,89750,3971],{"class":319},[178,89752,89753,89756,89759],{"class":180,"line":1077},[178,89754,89755],{"class":184},"    deepCopy",[178,89757,89758],{"class":319},"(o, obj) ",[178,89760,89761],{"class":2008},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[178,89763,89764,89766,89768],{"class":180,"line":1082},[178,89765,75473],{"class":319},[178,89767,59968],{"class":184},[178,89769,89770],{"class":319},"(o)\n",[178,89772,89773,89776,89778],{"class":180,"line":1099},[178,89774,89775],{"class":319},"    o.age ",[178,89777,330],{"class":699},[178,89779,89780],{"class":195}," 20\n",[178,89782,89783,89786,89788,89790,89792],{"class":180,"line":9806},[178,89784,89785],{"class":319},"    o.hobby[",[178,89787,2133],{"class":195},[178,89789,6214],{"class":319},[178,89791,330],{"class":699},[178,89793,89794],{"class":188}," '篮球'\n",[178,89796,89797,89800,89802],{"class":180,"line":9818},[178,89798,89799],{"class":319},"    o.family ",[178,89801,330],{"class":699},[178,89803,89804],{"class":188}," '老pink'\n",[178,89806,89807,89809,89811],{"class":180,"line":11477},[178,89808,75473],{"class":319},[178,89810,59968],{"class":184},[178,89812,71756],{"class":319},[178,89814,89815,89817,89819],{"class":180,"line":11502},[178,89816,357],{"class":319},[178,89818,53541],{"class":323},[178,89820,336],{"class":319},[178,89822,89823,89825,89827],{"class":180,"line":11525},[178,89824,367],{"class":319},[178,89826,376],{"class":323},[178,89828,336],{"class":319},[178,89830,89831],{"class":180,"line":11549},[178,89832,722],{"emptyLinePlaceholder":721},[178,89834,89835,89837,89839],{"class":180,"line":11554},[178,89836,367],{"class":319},[178,89838,52367],{"class":323},[178,89840,336],{"class":319},[19,89842,89843],{},[3269,89844],{"alt":160,"src":89845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[23756,89847,89849,89850],{"id":89848},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[2093,89851,89852],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,89854,89855],{},[2178,89856,89857],{"href":89857,"rel":89858},"https:\u002F\u002Fwww.lodashjs.com\u002F",[25619],[19,89860,89861],{},"lodash里边的方法都要加上一个下划线_",[19,89863,89864],{},"_.cloneDeep()",[154,89866,89868],{"className":52365,"code":89867,"language":52367,"meta":160,"style":160},"\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",[70,89869,89870,89880,89894,89898,89906,89920,89940,89952,89960,89964,89972,89977,89996,90004,90014,90022,90030,90042,90046,90052,90056,90060,90076,90084,90093,90101,90109,90117,90121],{"__ignoreMap":160},[178,89871,89872,89874,89876,89878],{"class":180,"line":181},[178,89873,53029],{"class":319},[178,89875,53032],{"class":323},[178,89877,53035],{"class":184},[178,89879,336],{"class":319},[178,89881,89882,89884,89886,89888,89890,89892],{"class":180,"line":263},[178,89883,320],{"class":319},[178,89885,52367],{"class":323},[178,89887,53046],{"class":184},[178,89889,330],{"class":319},[178,89891,53051],{"class":188},[178,89893,336],{"class":319},[178,89895,89896],{"class":180,"line":274},[178,89897,722],{"emptyLinePlaceholder":721},[178,89899,89900,89902,89904],{"class":180,"line":354},[178,89901,320],{"class":319},[178,89903,53064],{"class":323},[178,89905,336],{"class":319},[178,89907,89908,89910,89912,89914,89916,89918],{"class":180,"line":364},[178,89909,341],{"class":319},[178,89911,53074],{"class":323},[178,89913,53077],{"class":184},[178,89915,330],{"class":319},[178,89917,53082],{"class":188},[178,89919,336],{"class":319},[178,89921,89922,89924,89926,89928,89930,89932,89934,89936,89938],{"class":180,"line":740},[178,89923,341],{"class":319},[178,89925,53074],{"class":323},[178,89927,426],{"class":184},[178,89929,330],{"class":319},[178,89931,53121],{"class":188},[178,89933,53101],{"class":184},[178,89935,330],{"class":319},[178,89937,53128],{"class":188},[178,89939,336],{"class":319},[178,89941,89942,89944,89946,89948,89950],{"class":180,"line":746},[178,89943,341],{"class":319},[178,89945,53137],{"class":323},[178,89947,53140],{"class":319},[178,89949,53137],{"class":323},[178,89951,336],{"class":319},[178,89953,89954,89956,89958],{"class":180,"line":752},[178,89955,367],{"class":319},[178,89957,53064],{"class":323},[178,89959,336],{"class":319},[178,89961,89962],{"class":180,"line":757},[178,89963,722],{"emptyLinePlaceholder":721},[178,89965,89966,89968,89970],{"class":180,"line":763},[178,89967,320],{"class":319},[178,89969,376],{"class":323},[178,89971,336],{"class":319},[178,89973,89974],{"class":180,"line":769},[178,89975,89976],{"class":2008},"  \u003C!-- 先引用这个库 -->\n",[178,89978,89979,89981,89983,89985,89987,89990,89992,89994],{"class":180,"line":774},[178,89980,341],{"class":319},[178,89982,53541],{"class":323},[178,89984,56960],{"class":184},[178,89986,330],{"class":319},[178,89988,89989],{"class":188},"\"lodash.min.js\"",[178,89991,57035],{"class":319},[178,89993,53541],{"class":323},[178,89995,336],{"class":319},[178,89997,89998,90000,90002],{"class":180,"line":780},[178,89999,341],{"class":319},[178,90001,53541],{"class":323},[178,90003,336],{"class":319},[178,90005,90006,90008,90010,90012],{"class":180,"line":786},[178,90007,12982],{"class":699},[178,90009,71691],{"class":195},[178,90011,734],{"class":699},[178,90013,17330],{"class":319},[178,90015,90016,90018,90020],{"class":180,"line":792},[178,90017,73336],{"class":319},[178,90019,89525],{"class":188},[178,90021,33202],{"class":319},[178,90023,90024,90026,90028],{"class":180,"line":798},[178,90025,73346],{"class":319},[178,90027,2590],{"class":195},[178,90029,33202],{"class":319},[178,90031,90032,90034,90036,90038,90040],{"class":180,"line":804},[178,90033,89540],{"class":319},[178,90035,89543],{"class":188},[178,90037,14196],{"class":319},[178,90039,89548],{"class":188},[178,90041,89551],{"class":319},[178,90043,90044],{"class":180,"line":810},[178,90045,79592],{"class":319},[178,90047,90048,90050],{"class":180,"line":816},[178,90049,89560],{"class":319},[178,90051,89563],{"class":188},[178,90053,90054],{"class":180,"line":822},[178,90055,54125],{"class":319},[178,90057,90058],{"class":180,"line":827},[178,90059,3971],{"class":319},[178,90061,90062,90064,90066,90068,90071,90074],{"class":180,"line":832},[178,90063,12982],{"class":699},[178,90065,89578],{"class":195},[178,90067,734],{"class":699},[178,90069,90070],{"class":319}," _.",[178,90072,90073],{"class":184},"cloneDeep",[178,90075,71756],{"class":319},[178,90077,90078,90080,90082],{"class":180,"line":850},[178,90079,75473],{"class":319},[178,90081,59968],{"class":184},[178,90083,89770],{"class":319},[178,90085,90086,90089,90091],{"class":180,"line":866},[178,90087,90088],{"class":319},"    o.family.baby ",[178,90090,330],{"class":699},[178,90092,89804],{"class":188},[178,90094,90095,90097,90099],{"class":180,"line":877},[178,90096,75473],{"class":319},[178,90098,59968],{"class":184},[178,90100,71756],{"class":319},[178,90102,90103,90105,90107],{"class":180,"line":882},[178,90104,357],{"class":319},[178,90106,53541],{"class":323},[178,90108,336],{"class":319},[178,90110,90111,90113,90115],{"class":180,"line":898},[178,90112,367],{"class":319},[178,90114,376],{"class":323},[178,90116,336],{"class":319},[178,90118,90119],{"class":180,"line":914},[178,90120,722],{"emptyLinePlaceholder":721},[178,90122,90123,90125,90127],{"class":180,"line":919},[178,90124,367],{"class":319},[178,90126,52367],{"class":323},[178,90128,336],{"class":319},[19,90130,90131],{},[3269,90132],{"alt":160,"src":90133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[23756,90135,90137],{"id":90136},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[154,90139,90141],{"className":52365,"code":90140,"language":52367,"meta":160,"style":160},"\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",[70,90142,90143,90153,90167,90171,90179,90193,90213,90225,90233,90237,90245,90253,90263,90271,90279,90291,90295,90301,90305,90309,90314,90319,90324,90350,90358,90367,90375,90383,90391,90395],{"__ignoreMap":160},[178,90144,90145,90147,90149,90151],{"class":180,"line":181},[178,90146,53029],{"class":319},[178,90148,53032],{"class":323},[178,90150,53035],{"class":184},[178,90152,336],{"class":319},[178,90154,90155,90157,90159,90161,90163,90165],{"class":180,"line":263},[178,90156,320],{"class":319},[178,90158,52367],{"class":323},[178,90160,53046],{"class":184},[178,90162,330],{"class":319},[178,90164,53051],{"class":188},[178,90166,336],{"class":319},[178,90168,90169],{"class":180,"line":274},[178,90170,722],{"emptyLinePlaceholder":721},[178,90172,90173,90175,90177],{"class":180,"line":354},[178,90174,320],{"class":319},[178,90176,53064],{"class":323},[178,90178,336],{"class":319},[178,90180,90181,90183,90185,90187,90189,90191],{"class":180,"line":364},[178,90182,341],{"class":319},[178,90184,53074],{"class":323},[178,90186,53077],{"class":184},[178,90188,330],{"class":319},[178,90190,53082],{"class":188},[178,90192,336],{"class":319},[178,90194,90195,90197,90199,90201,90203,90205,90207,90209,90211],{"class":180,"line":740},[178,90196,341],{"class":319},[178,90198,53074],{"class":323},[178,90200,426],{"class":184},[178,90202,330],{"class":319},[178,90204,53121],{"class":188},[178,90206,53101],{"class":184},[178,90208,330],{"class":319},[178,90210,53128],{"class":188},[178,90212,336],{"class":319},[178,90214,90215,90217,90219,90221,90223],{"class":180,"line":746},[178,90216,341],{"class":319},[178,90218,53137],{"class":323},[178,90220,53140],{"class":319},[178,90222,53137],{"class":323},[178,90224,336],{"class":319},[178,90226,90227,90229,90231],{"class":180,"line":752},[178,90228,367],{"class":319},[178,90230,53064],{"class":323},[178,90232,336],{"class":319},[178,90234,90235],{"class":180,"line":757},[178,90236,722],{"emptyLinePlaceholder":721},[178,90238,90239,90241,90243],{"class":180,"line":763},[178,90240,320],{"class":319},[178,90242,376],{"class":323},[178,90244,336],{"class":319},[178,90246,90247,90249,90251],{"class":180,"line":769},[178,90248,341],{"class":319},[178,90250,53541],{"class":323},[178,90252,336],{"class":319},[178,90254,90255,90257,90259,90261],{"class":180,"line":774},[178,90256,12982],{"class":699},[178,90258,71691],{"class":195},[178,90260,734],{"class":699},[178,90262,17330],{"class":319},[178,90264,90265,90267,90269],{"class":180,"line":780},[178,90266,73336],{"class":319},[178,90268,89525],{"class":188},[178,90270,33202],{"class":319},[178,90272,90273,90275,90277],{"class":180,"line":786},[178,90274,73346],{"class":319},[178,90276,2590],{"class":195},[178,90278,33202],{"class":319},[178,90280,90281,90283,90285,90287,90289],{"class":180,"line":792},[178,90282,89540],{"class":319},[178,90284,89543],{"class":188},[178,90286,14196],{"class":319},[178,90288,89548],{"class":188},[178,90290,89551],{"class":319},[178,90292,90293],{"class":180,"line":798},[178,90294,79592],{"class":319},[178,90296,90297,90299],{"class":180,"line":804},[178,90298,89560],{"class":319},[178,90300,89563],{"class":188},[178,90302,90303],{"class":180,"line":810},[178,90304,54125],{"class":319},[178,90306,90307],{"class":180,"line":816},[178,90308,3971],{"class":319},[178,90310,90311],{"class":180,"line":822},[178,90312,90313],{"class":2008},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[178,90315,90316],{"class":180,"line":827},[178,90317,90318],{"class":2008},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[178,90320,90321],{"class":180,"line":832},[178,90322,90323],{"class":2008},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[178,90325,90326,90328,90330,90332,90335,90337,90340,90342,90344,90346,90348],{"class":180,"line":850},[178,90327,12982],{"class":699},[178,90329,89578],{"class":195},[178,90331,734],{"class":699},[178,90333,90334],{"class":195}," JSON",[178,90336,2498],{"class":319},[178,90338,90339],{"class":184},"parse",[178,90341,944],{"class":319},[178,90343,73384],{"class":195},[178,90345,2498],{"class":319},[178,90347,73389],{"class":184},[178,90349,73392],{"class":319},[178,90351,90352,90354,90356],{"class":180,"line":866},[178,90353,75473],{"class":319},[178,90355,59968],{"class":184},[178,90357,89770],{"class":319},[178,90359,90360,90362,90364],{"class":180,"line":877},[178,90361,90088],{"class":319},[178,90363,330],{"class":699},[178,90365,90366],{"class":188}," '123'\n",[178,90368,90369,90371,90373],{"class":180,"line":882},[178,90370,75473],{"class":319},[178,90372,59968],{"class":184},[178,90374,71756],{"class":319},[178,90376,90377,90379,90381],{"class":180,"line":898},[178,90378,357],{"class":319},[178,90380,53541],{"class":323},[178,90382,336],{"class":319},[178,90384,90385,90387,90389],{"class":180,"line":914},[178,90386,367],{"class":319},[178,90388,376],{"class":323},[178,90390,336],{"class":319},[178,90392,90393],{"class":180,"line":919},[178,90394,722],{"emptyLinePlaceholder":721},[178,90396,90397,90399,90401],{"class":180,"line":935},[178,90398,367],{"class":319},[178,90400,52367],{"class":323},[178,90402,336],{"class":319},[19,90404,90405],{},[3269,90406],{"alt":160,"src":90407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90409,90411],{"id":90410},"_415-异常处理","4.15 异常处理",[26,90413,90414],{},[29,90415,90416],{},"throw抛异常",[19,90418,90419],{},[3269,90420],{"alt":160,"src":90421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[26,90423,90424],{"start":263},[29,90425,90426],{},"try\u002Fcatch 捕获错误信息",[19,90428,90429],{},[3269,90430],{"alt":160,"src":90431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[154,90433,90435],{"className":52365,"code":90434,"language":52367,"meta":160,"style":160},"\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",[70,90436,90437,90447,90461,90465,90473,90487,90507,90519,90527,90531,90539,90551,90559,90568,90575,90580,90599,90608,90619,90624,90634,90639,90644,90649,90666,90670,90675,90682,90694,90698,90710,90714,90718,90723,90728,90735,90743,90751,90755],{"__ignoreMap":160},[178,90438,90439,90441,90443,90445],{"class":180,"line":181},[178,90440,53029],{"class":319},[178,90442,53032],{"class":323},[178,90444,53035],{"class":184},[178,90446,336],{"class":319},[178,90448,90449,90451,90453,90455,90457,90459],{"class":180,"line":263},[178,90450,320],{"class":319},[178,90452,52367],{"class":323},[178,90454,53046],{"class":184},[178,90456,330],{"class":319},[178,90458,53051],{"class":188},[178,90460,336],{"class":319},[178,90462,90463],{"class":180,"line":274},[178,90464,722],{"emptyLinePlaceholder":721},[178,90466,90467,90469,90471],{"class":180,"line":354},[178,90468,320],{"class":319},[178,90470,53064],{"class":323},[178,90472,336],{"class":319},[178,90474,90475,90477,90479,90481,90483,90485],{"class":180,"line":364},[178,90476,341],{"class":319},[178,90478,53074],{"class":323},[178,90480,53077],{"class":184},[178,90482,330],{"class":319},[178,90484,53082],{"class":188},[178,90486,336],{"class":319},[178,90488,90489,90491,90493,90495,90497,90499,90501,90503,90505],{"class":180,"line":740},[178,90490,341],{"class":319},[178,90492,53074],{"class":323},[178,90494,426],{"class":184},[178,90496,330],{"class":319},[178,90498,53121],{"class":188},[178,90500,53101],{"class":184},[178,90502,330],{"class":319},[178,90504,53128],{"class":188},[178,90506,336],{"class":319},[178,90508,90509,90511,90513,90515,90517],{"class":180,"line":746},[178,90510,341],{"class":319},[178,90512,53137],{"class":323},[178,90514,53140],{"class":319},[178,90516,53137],{"class":323},[178,90518,336],{"class":319},[178,90520,90521,90523,90525],{"class":180,"line":752},[178,90522,367],{"class":319},[178,90524,53064],{"class":323},[178,90526,336],{"class":319},[178,90528,90529],{"class":180,"line":757},[178,90530,722],{"emptyLinePlaceholder":721},[178,90532,90533,90535,90537],{"class":180,"line":763},[178,90534,320],{"class":319},[178,90536,376],{"class":323},[178,90538,336],{"class":319},[178,90540,90541,90543,90545,90547,90549],{"class":180,"line":769},[178,90542,341],{"class":319},[178,90544,19],{"class":323},[178,90546,55217],{"class":319},[178,90548,19],{"class":323},[178,90550,336],{"class":319},[178,90552,90553,90555,90557],{"class":180,"line":774},[178,90554,341],{"class":319},[178,90556,53541],{"class":323},[178,90558,336],{"class":319},[178,90560,90561,90563,90566],{"class":180,"line":780},[178,90562,71804],{"class":699},[178,90564,90565],{"class":184}," fn",[178,90567,12614],{"class":319},[178,90569,90570,90573],{"class":180,"line":786},[178,90571,90572],{"class":699},"      try",[178,90574,17330],{"class":319},[178,90576,90577],{"class":180,"line":792},[178,90578,90579],{"class":2008},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[178,90581,90582,90584,90586,90588,90590,90592,90594,90597],{"class":180,"line":798},[178,90583,62991],{"class":699},[178,90585,8594],{"class":195},[178,90587,734],{"class":699},[178,90589,56117],{"class":319},[178,90591,56120],{"class":184},[178,90593,944],{"class":319},[178,90595,90596],{"class":188},"'.p'",[178,90598,863],{"class":319},[178,90600,90601,90604,90606],{"class":180,"line":804},[178,90602,90603],{"class":319},"        p.style.color ",[178,90605,330],{"class":699},[178,90607,68771],{"class":188},[178,90609,90610,90613,90616],{"class":180,"line":810},[178,90611,90612],{"class":319},"      } ",[178,90614,90615],{"class":699},"catch",[178,90617,90618],{"class":319}," (err) {\n",[178,90620,90621],{"class":180,"line":816},[178,90622,90623],{"class":2008},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[178,90625,90626,90629,90631],{"class":180,"line":822},[178,90627,90628],{"class":319},"        console.",[178,90630,59968],{"class":184},[178,90632,90633],{"class":319},"(err.message)\n",[178,90635,90636],{"class":180,"line":827},[178,90637,90638],{"class":2008},"        \u002F\u002F 想要中断程序，需要加return\n",[178,90640,90641],{"class":180,"line":832},[178,90642,90643],{"class":2008},"        \u002F\u002F return\n",[178,90645,90646],{"class":180,"line":850},[178,90647,90648],{"class":2008},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[178,90650,90651,90654,90656,90659,90661,90664],{"class":180,"line":866},[178,90652,90653],{"class":699},"        throw",[178,90655,13339],{"class":699},[178,90657,90658],{"class":184}," Error",[178,90660,944],{"class":319},[178,90662,90663],{"class":188},"'你看看，选择器错误了吧'",[178,90665,863],{"class":319},[178,90667,90668],{"class":180,"line":877},[178,90669,54125],{"class":319},[178,90671,90672],{"class":180,"line":882},[178,90673,90674],{"class":2008},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[178,90676,90677,90680],{"class":180,"line":898},[178,90678,90679],{"class":699},"      finally",[178,90681,17330],{"class":319},[178,90683,90684,90687,90689,90692],{"class":180,"line":914},[178,90685,90686],{"class":184},"        alert",[178,90688,944],{"class":319},[178,90690,90691],{"class":188},"'弹出对话框'",[178,90693,863],{"class":319},[178,90695,90696],{"class":180,"line":919},[178,90697,54125],{"class":319},[178,90699,90700,90702,90704,90706,90708],{"class":180,"line":935},[178,90701,59965],{"class":319},[178,90703,59968],{"class":184},[178,90705,944],{"class":319},[178,90707,2412],{"class":195},[178,90709,863],{"class":319},[178,90711,90712],{"class":180,"line":952},[178,90713,722],{"emptyLinePlaceholder":721},[178,90715,90716],{"class":180,"line":966},[178,90717,3971],{"class":319},[178,90719,90720],{"class":180,"line":980},[178,90721,90722],{"class":2008},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[178,90724,90725],{"class":180,"line":985},[178,90726,90727],{"class":2008},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[178,90729,90730,90733],{"class":180,"line":1008},[178,90731,90732],{"class":184},"    fn",[178,90734,3760],{"class":319},[178,90736,90737,90739,90741],{"class":180,"line":1014},[178,90738,357],{"class":319},[178,90740,53541],{"class":323},[178,90742,336],{"class":319},[178,90744,90745,90747,90749],{"class":180,"line":1019},[178,90746,367],{"class":319},[178,90748,376],{"class":323},[178,90750,336],{"class":319},[178,90752,90753],{"class":180,"line":1033},[178,90754,722],{"emptyLinePlaceholder":721},[178,90756,90757,90759,90761],{"class":180,"line":1046},[178,90758,367],{"class":319},[178,90760,52367],{"class":323},[178,90762,336],{"class":319},[19,90764,90765],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[26,90767,90768],{"start":274},[29,90769,90770],{},"debugger",[19,90772,90773],{},[3269,90774],{"alt":160,"src":90775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,90777,90778],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90780,90782],{"id":90781},"_416-处理this","4.16 处理this",[387,90784,90786],{"id":90785},"_4161-this的指向","4.16.1 this的指向",[26,90788,90789],{},[29,90790,90791],{},"普通函数的this",[19,90793,90794],{},[3269,90795],{"alt":160,"src":90796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[26,90798,90799],{"start":263},[29,90800,90801],{},"箭头函数的this",[19,90803,90804],{},[3269,90805],{"alt":160,"src":90806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,90808,90809],{},[3269,90810],{"alt":160,"src":90811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,90813,90814],{},[3269,90815],{"alt":160,"src":90816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[387,90818,90820],{"id":90819},"_4162-this的改变","4.16.2 this的改变",[19,90822,90823],{},"call() apply() bind()",[26,90825,90826],{},[29,90827,90828],{},"call()",[19,90830,90831],{},[3269,90832],{"alt":160,"src":90833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,90835,90836],{},"两个作用：①调用函数；②改变this指向",[154,90838,90840],{"className":310,"code":90839,"language":312,"meta":160,"style":160},"\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",[70,90841,90842,90850,90858,90862,90867,90871,90876,90881,90886,90890,90895,90903],{"__ignoreMap":160},[178,90843,90844,90846,90848],{"class":180,"line":181},[178,90845,320],{"class":319},[178,90847,376],{"class":323},[178,90849,336],{"class":319},[178,90851,90852,90854,90856],{"class":180,"line":263},[178,90853,341],{"class":319},[178,90855,53541],{"class":323},[178,90857,336],{"class":319},[178,90859,90860],{"class":180,"line":274},[178,90861,73243],{"class":319},[178,90863,90864],{"class":180,"line":354},[178,90865,90866],{"class":319},"      uname: 'pink'\n",[178,90868,90869],{"class":180,"line":364},[178,90870,3971],{"class":319},[178,90872,90873],{"class":180,"line":740},[178,90874,90875],{"class":319},"    function fn(x, y) {\n",[178,90877,90878],{"class":180,"line":746},[178,90879,90880],{"class":319},"      console.log(this)  \u002F\u002Fwindow\n",[178,90882,90883],{"class":180,"line":752},[178,90884,90885],{"class":319},"      console.log(x + y)\n",[178,90887,90888],{"class":180,"line":757},[178,90889,3971],{"class":319},[178,90891,90892],{"class":180,"line":763},[178,90893,90894],{"class":319},"    fn.call(obj, 1, 2)\n",[178,90896,90897,90899,90901],{"class":180,"line":769},[178,90898,357],{"class":319},[178,90900,53541],{"class":323},[178,90902,336],{"class":319},[178,90904,90905,90907,90909],{"class":180,"line":774},[178,90906,367],{"class":319},[178,90908,376],{"class":323},[178,90910,336],{"class":319},[19,90912,90913],{},[3269,90914],{"alt":160,"src":90915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[26,90917,90918],{"start":263},[29,90919,90920],{},"apply()",[19,90922,90923],{},[3269,90924],{"alt":160,"src":90925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,90927,90836],{},[19,90929,90930],{},"call传递的是普通参数，而apply必须传递的是数组",[154,90932,90934],{"className":52365,"code":90933,"language":52367,"meta":160,"style":160},"\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",[70,90935,90936,90946,90960,90964,90972,90986,91006,91018,91026,91030,91038,91046,91056,91063,91067,91072,91088,91100,91114,91118,91123,91142,91147,91151,91156,91161,91169,91174,91196,91201,91217,91233,91245,91249,91254,91273,91281,91289,91293],{"__ignoreMap":160},[178,90937,90938,90940,90942,90944],{"class":180,"line":181},[178,90939,53029],{"class":319},[178,90941,53032],{"class":323},[178,90943,53035],{"class":184},[178,90945,336],{"class":319},[178,90947,90948,90950,90952,90954,90956,90958],{"class":180,"line":263},[178,90949,320],{"class":319},[178,90951,52367],{"class":323},[178,90953,53046],{"class":184},[178,90955,330],{"class":319},[178,90957,53051],{"class":188},[178,90959,336],{"class":319},[178,90961,90962],{"class":180,"line":274},[178,90963,722],{"emptyLinePlaceholder":721},[178,90965,90966,90968,90970],{"class":180,"line":354},[178,90967,320],{"class":319},[178,90969,53064],{"class":323},[178,90971,336],{"class":319},[178,90973,90974,90976,90978,90980,90982,90984],{"class":180,"line":364},[178,90975,341],{"class":319},[178,90977,53074],{"class":323},[178,90979,53077],{"class":184},[178,90981,330],{"class":319},[178,90983,53082],{"class":188},[178,90985,336],{"class":319},[178,90987,90988,90990,90992,90994,90996,90998,91000,91002,91004],{"class":180,"line":740},[178,90989,341],{"class":319},[178,90991,53074],{"class":323},[178,90993,426],{"class":184},[178,90995,330],{"class":319},[178,90997,53121],{"class":188},[178,90999,53101],{"class":184},[178,91001,330],{"class":319},[178,91003,53128],{"class":188},[178,91005,336],{"class":319},[178,91007,91008,91010,91012,91014,91016],{"class":180,"line":746},[178,91009,341],{"class":319},[178,91011,53137],{"class":323},[178,91013,53140],{"class":319},[178,91015,53137],{"class":323},[178,91017,336],{"class":319},[178,91019,91020,91022,91024],{"class":180,"line":752},[178,91021,367],{"class":319},[178,91023,53064],{"class":323},[178,91025,336],{"class":319},[178,91027,91028],{"class":180,"line":757},[178,91029,722],{"emptyLinePlaceholder":721},[178,91031,91032,91034,91036],{"class":180,"line":763},[178,91033,320],{"class":319},[178,91035,376],{"class":323},[178,91037,336],{"class":319},[178,91039,91040,91042,91044],{"class":180,"line":769},[178,91041,341],{"class":319},[178,91043,53541],{"class":323},[178,91045,336],{"class":319},[178,91047,91048,91050,91052,91054],{"class":180,"line":774},[178,91049,12982],{"class":699},[178,91051,71691],{"class":195},[178,91053,734],{"class":699},[178,91055,17330],{"class":319},[178,91057,91058,91060],{"class":180,"line":780},[178,91059,73346],{"class":319},[178,91061,91062],{"class":195},"18\n",[178,91064,91065],{"class":180,"line":786},[178,91066,3971],{"class":319},[178,91068,91069],{"class":180,"line":792},[178,91070,91071],{"class":2008},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[178,91073,91074,91076,91078,91080,91082,91084,91086],{"class":180,"line":798},[178,91075,71804],{"class":699},[178,91077,90565],{"class":184},[178,91079,944],{"class":319},[178,91081,2760],{"class":6985},[178,91083,14196],{"class":319},[178,91085,2785],{"class":6985},[178,91087,14203],{"class":319},[178,91089,91090,91092,91094,91096,91098],{"class":180,"line":804},[178,91091,59965],{"class":319},[178,91093,59968],{"class":184},[178,91095,944],{"class":319},[178,91097,88708],{"class":195},[178,91099,863],{"class":319},[178,91101,91102,91104,91106,91109,91111],{"class":180,"line":810},[178,91103,59965],{"class":319},[178,91105,59968],{"class":184},[178,91107,91108],{"class":319},"(x ",[178,91110,2421],{"class":699},[178,91112,91113],{"class":319}," y)\n",[178,91115,91116],{"class":180,"line":816},[178,91117,3971],{"class":319},[178,91119,91120],{"class":180,"line":822},[178,91121,91122],{"class":2008},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[178,91124,91125,91128,91131,91134,91136,91138,91140],{"class":180,"line":827},[178,91126,91127],{"class":319},"    fn.",[178,91129,91130],{"class":184},"apply",[178,91132,91133],{"class":319},"(obj, [",[178,91135,1665],{"class":195},[178,91137,14196],{"class":319},[178,91139,1669],{"class":195},[178,91141,6428],{"class":319},[178,91143,91144],{"class":180,"line":832},[178,91145,91146],{"class":2008},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[178,91148,91149],{"class":180,"line":850},[178,91150,722],{"emptyLinePlaceholder":721},[178,91152,91153],{"class":180,"line":866},[178,91154,91155],{"class":2008},"    \u002F\u002F 使用场景：求数组最大值\n",[178,91157,91158],{"class":180,"line":877},[178,91159,91160],{"class":2008},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[178,91162,91163,91166],{"class":180,"line":882},[178,91164,91165],{"class":2008},"    \u002F\u002F console.log(max)",[178,91167,91168],{"class":2008},"   \u002F\u002F3\n",[178,91170,91171],{"class":180,"line":898},[178,91172,91173],{"class":2008},"    \u002F\u002F 指向空或者Math都是可以的\n",[178,91175,91176,91178,91180,91182,91184,91186,91188,91190,91192,91194],{"class":180,"line":914},[178,91177,12982],{"class":699},[178,91179,59416],{"class":195},[178,91181,734],{"class":699},[178,91183,53953],{"class":319},[178,91185,2251],{"class":195},[178,91187,14196],{"class":319},[178,91189,2444],{"class":195},[178,91191,14196],{"class":319},[178,91193,2475],{"class":195},[178,91195,34978],{"class":319},[178,91197,91198],{"class":180,"line":919},[178,91199,91200],{"class":2008},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[178,91202,91203,91205,91207,91209,91212,91214],{"class":180,"line":935},[178,91204,12982],{"class":699},[178,91206,7720],{"class":195},[178,91208,734],{"class":699},[178,91210,91211],{"class":319}," Math.max.",[178,91213,91130],{"class":184},[178,91215,91216],{"class":319},"(Math, arr)\n",[178,91218,91219,91221,91224,91226,91229,91231],{"class":180,"line":952},[178,91220,12982],{"class":699},[178,91222,91223],{"class":195}," min",[178,91225,734],{"class":699},[178,91227,91228],{"class":319}," Math.min.",[178,91230,91130],{"class":184},[178,91232,91216],{"class":319},[178,91234,91235,91237,91239,91242],{"class":180,"line":966},[178,91236,75473],{"class":319},[178,91238,59968],{"class":184},[178,91240,91241],{"class":319},"(max, min)     ",[178,91243,91244],{"class":2008},"\u002F\u002F100,4\n",[178,91246,91247],{"class":180,"line":980},[178,91248,722],{"emptyLinePlaceholder":721},[178,91250,91251],{"class":180,"line":985},[178,91252,91253],{"class":2008},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[178,91255,91256,91258,91260,91263,91265,91267,91270],{"class":180,"line":1008},[178,91257,75473],{"class":319},[178,91259,59968],{"class":184},[178,91261,91262],{"class":319},"(Max.",[178,91264,7784],{"class":184},[178,91266,944],{"class":319},[178,91268,91269],{"class":699},"...",[178,91271,91272],{"class":319},"arr))\n",[178,91274,91275,91277,91279],{"class":180,"line":1014},[178,91276,357],{"class":319},[178,91278,53541],{"class":323},[178,91280,336],{"class":319},[178,91282,91283,91285,91287],{"class":180,"line":1019},[178,91284,367],{"class":319},[178,91286,376],{"class":323},[178,91288,336],{"class":319},[178,91290,91291],{"class":180,"line":1033},[178,91292,722],{"emptyLinePlaceholder":721},[178,91294,91295,91297,91299],{"class":180,"line":1046},[178,91296,367],{"class":319},[178,91298,52367],{"class":323},[178,91300,336],{"class":319},[19,91302,91303],{},[3269,91304],{"alt":160,"src":91305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[26,91307,91308],{"start":274},[29,91309,91310],{},"bind()",[19,91312,91313],{},[3269,91314],{"alt":160,"src":91315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,91317,91318],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,91320,91321],{},"bind的语法跟call很相似",[154,91323,91325],{"className":310,"code":91324,"language":312,"meta":160,"style":160},"\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",[70,91326,91327,91335,91343,91347,91352,91356,91360,91365,91369,91374,91379,91384,91389,91394,91399,91404,91408,91416],{"__ignoreMap":160},[178,91328,91329,91331,91333],{"class":180,"line":181},[178,91330,320],{"class":319},[178,91332,376],{"class":323},[178,91334,336],{"class":319},[178,91336,91337,91339,91341],{"class":180,"line":263},[178,91338,341],{"class":319},[178,91340,53541],{"class":323},[178,91342,336],{"class":319},[178,91344,91345],{"class":180,"line":274},[178,91346,73243],{"class":319},[178,91348,91349],{"class":180,"line":354},[178,91350,91351],{"class":319},"      age: 18\n",[178,91353,91354],{"class":180,"line":364},[178,91355,3971],{"class":319},[178,91357,91358],{"class":180,"line":740},[178,91359,78863],{"class":319},[178,91361,91362],{"class":180,"line":746},[178,91363,91364],{"class":319},"      console.log(this)\n",[178,91366,91367],{"class":180,"line":752},[178,91368,3971],{"class":319},[178,91370,91371],{"class":180,"line":757},[178,91372,91373],{"class":319},"    \u002F\u002F 1.bind 不会调用函数\n",[178,91375,91376],{"class":180,"line":763},[178,91377,91378],{"class":319},"    \u002F\u002F 2.bind能改变this的指向\n",[178,91380,91381],{"class":180,"line":769},[178,91382,91383],{"class":319},"    fn.bind()\n",[178,91385,91386],{"class":180,"line":774},[178,91387,91388],{"class":319},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[178,91390,91391],{"class":180,"line":780},[178,91392,91393],{"class":319},"    const fun = fn.bind(obj)\n",[178,91395,91396],{"class":180,"line":786},[178,91397,91398],{"class":319},"    \u002F\u002F console.log(fun)\n",[178,91400,91401],{"class":180,"line":792},[178,91402,91403],{"class":319},"    \u002F\u002F 调用,查看this的指向\n",[178,91405,91406],{"class":180,"line":798},[178,91407,54377],{"class":319},[178,91409,91410,91412,91414],{"class":180,"line":804},[178,91411,357],{"class":319},[178,91413,53541],{"class":323},[178,91415,336],{"class":319},[178,91417,91418,91420,91422],{"class":180,"line":810},[178,91419,367],{"class":319},[178,91421,376],{"class":323},[178,91423,336],{"class":319},[19,91425,91426],{},[3269,91427],{"alt":160,"src":91428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[26,91430,91431],{"start":354},[29,91432,91433],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[154,91435,91437],{"className":310,"code":91436,"language":312,"meta":160,"style":160},"\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",[70,91438,91439,91447,91460,91468,91473,91477,91482,91487,91492,91497,91502,91507,91512,91517,91521,91529],{"__ignoreMap":160},[178,91440,91441,91443,91445],{"class":180,"line":181},[178,91442,320],{"class":319},[178,91444,376],{"class":323},[178,91446,336],{"class":319},[178,91448,91449,91451,91453,91456,91458],{"class":180,"line":263},[178,91450,341],{"class":319},[178,91452,55608],{"class":323},[178,91454,91455],{"class":319},">禁用\u003C\u002F",[178,91457,55608],{"class":323},[178,91459,336],{"class":319},[178,91461,91462,91464,91466],{"class":180,"line":274},[178,91463,341],{"class":319},[178,91465,53541],{"class":323},[178,91467,336],{"class":319},[178,91469,91470],{"class":180,"line":354},[178,91471,91472],{"class":319},"    const btn = document.querySelector('button')\n",[178,91474,91475],{"class":180,"line":364},[178,91476,60737],{"class":319},[178,91478,91479],{"class":180,"line":740},[178,91480,91481],{"class":319},"      this.disabled = true\n",[178,91483,91484],{"class":180,"line":746},[178,91485,91486],{"class":319},"      \u002F\u002F 定时器是window进行调用的\n",[178,91488,91489],{"class":180,"line":752},[178,91490,91491],{"class":319},"      setTimeout(function () {\n",[178,91493,91494],{"class":180,"line":757},[178,91495,91496],{"class":319},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[178,91498,91499],{"class":180,"line":763},[178,91500,91501],{"class":319},"        this.disabled = false\n",[178,91503,91504],{"class":180,"line":769},[178,91505,91506],{"class":319},"      }.bind(this), 2000)\n",[178,91508,91509],{"class":180,"line":774},[178,91510,91511],{"class":319},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[178,91513,91514],{"class":180,"line":780},[178,91515,91516],{"class":319},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[178,91518,91519],{"class":180,"line":786},[178,91520,35193],{"class":319},[178,91522,91523,91525,91527],{"class":180,"line":792},[178,91524,357],{"class":319},[178,91526,53541],{"class":323},[178,91528,336],{"class":319},[178,91530,91531,91533,91535],{"class":180,"line":798},[178,91532,367],{"class":319},[178,91534,376],{"class":323},[178,91536,336],{"class":319},[26,91538,91539],{"start":364},[29,91540,23711],{},[19,91542,91543],{},[3269,91544],{"alt":160,"src":91545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91547,91549],{"id":91548},"_417-性能优化","4.17 性能优化",[387,91551,91553],{"id":91552},"_4171-防抖","4.17.1 防抖",[19,91555,91556],{},[3269,91557],{"alt":160,"src":91558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,91560,91561],{},[2093,91562,91563],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,91565,91566],{},"防抖实现方式：",[2946,91568,91569],{},[29,91570,91571],{},"lodash 提供了防抖处理",[19,91573,91574],{},"_.debounce(func,[wait=0],[options={}])",[19,91576,91577],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[154,91579,91581],{"className":52365,"code":91580,"language":52367,"meta":160,"style":160},"\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",[70,91582,91583,91593,91607,91611,91619,91633,91653,91665,91673,91679,91689,91701,91713,91724,91736,91746,91756,91769,91773,91781,91789,91793,91801,91819,91837,91845,91864,91874,91883,91894,91899,91903,91908,91913,91918,91943,91951,91959,91963],{"__ignoreMap":160},[178,91584,91585,91587,91589,91591],{"class":180,"line":181},[178,91586,53029],{"class":319},[178,91588,53032],{"class":323},[178,91590,53035],{"class":184},[178,91592,336],{"class":319},[178,91594,91595,91597,91599,91601,91603,91605],{"class":180,"line":263},[178,91596,320],{"class":319},[178,91598,52367],{"class":323},[178,91600,53046],{"class":184},[178,91602,330],{"class":319},[178,91604,53051],{"class":188},[178,91606,336],{"class":319},[178,91608,91609],{"class":180,"line":274},[178,91610,722],{"emptyLinePlaceholder":721},[178,91612,91613,91615,91617],{"class":180,"line":354},[178,91614,320],{"class":319},[178,91616,53064],{"class":323},[178,91618,336],{"class":319},[178,91620,91621,91623,91625,91627,91629,91631],{"class":180,"line":364},[178,91622,341],{"class":319},[178,91624,53074],{"class":323},[178,91626,53077],{"class":184},[178,91628,330],{"class":319},[178,91630,53082],{"class":188},[178,91632,336],{"class":319},[178,91634,91635,91637,91639,91641,91643,91645,91647,91649,91651],{"class":180,"line":740},[178,91636,341],{"class":319},[178,91638,53074],{"class":323},[178,91640,426],{"class":184},[178,91642,330],{"class":319},[178,91644,53121],{"class":188},[178,91646,53101],{"class":184},[178,91648,330],{"class":319},[178,91650,53128],{"class":188},[178,91652,336],{"class":319},[178,91654,91655,91657,91659,91661,91663],{"class":180,"line":746},[178,91656,341],{"class":319},[178,91658,53137],{"class":323},[178,91660,53140],{"class":319},[178,91662,53137],{"class":323},[178,91664,336],{"class":319},[178,91666,91667,91669,91671],{"class":180,"line":752},[178,91668,341],{"class":319},[178,91670,1853],{"class":323},[178,91672,336],{"class":319},[178,91674,91675,91677],{"class":180,"line":757},[178,91676,56473],{"class":184},[178,91678,17330],{"class":319},[178,91680,91681,91683,91685,91687],{"class":180,"line":763},[178,91682,74316],{"class":195},[178,91684,53167],{"class":319},[178,91686,62226],{"class":195},[178,91688,3100],{"class":319},[178,91690,91691,91693,91695,91697,91699],{"class":180,"line":769},[178,91692,56492],{"class":195},[178,91694,53167],{"class":319},[178,91696,1002],{"class":195},[178,91698,53222],{"class":699},[178,91700,3100],{"class":319},[178,91702,91703,91705,91707,91709,91711],{"class":180,"line":774},[178,91704,56506],{"class":195},[178,91706,53167],{"class":319},[178,91708,1002],{"class":195},[178,91710,53222],{"class":699},[178,91712,3100],{"class":319},[178,91714,91715,91717,91719,91722],{"class":180,"line":780},[178,91716,56605],{"class":195},[178,91718,53167],{"class":319},[178,91720,91721],{"class":195},"gray",[178,91723,3100],{"class":319},[178,91725,91726,91728,91730,91732,91734],{"class":180,"line":786},[178,91727,56643],{"class":195},[178,91729,53167],{"class":319},[178,91731,2765],{"class":195},[178,91733,53222],{"class":699},[178,91735,3100],{"class":319},[178,91737,91738,91740,91742,91744],{"class":180,"line":792},[178,91739,59137],{"class":195},[178,91741,53167],{"class":319},[178,91743,62563],{"class":195},[178,91745,3100],{"class":319},[178,91747,91748,91750,91752,91754],{"class":180,"line":798},[178,91749,59007],{"class":195},[178,91751,53167],{"class":319},[178,91753,53322],{"class":195},[178,91755,3100],{"class":319},[178,91757,91758,91761,91763,91765,91767],{"class":180,"line":804},[178,91759,91760],{"class":195},"      padding-top",[178,91762,53167],{"class":319},[178,91764,2259],{"class":195},[178,91766,53222],{"class":699},[178,91768,3100],{"class":319},[178,91770,91771],{"class":180,"line":810},[178,91772,3971],{"class":319},[178,91774,91775,91777,91779],{"class":180,"line":816},[178,91776,357],{"class":319},[178,91778,1853],{"class":323},[178,91780,336],{"class":319},[178,91782,91783,91785,91787],{"class":180,"line":822},[178,91784,367],{"class":319},[178,91786,53064],{"class":323},[178,91788,336],{"class":319},[178,91790,91791],{"class":180,"line":827},[178,91792,722],{"emptyLinePlaceholder":721},[178,91794,91795,91797,91799],{"class":180,"line":832},[178,91796,320],{"class":319},[178,91798,376],{"class":323},[178,91800,336],{"class":319},[178,91802,91803,91805,91807,91809,91811,91813,91815,91817],{"class":180,"line":850},[178,91804,341],{"class":319},[178,91806,53341],{"class":323},[178,91808,55210],{"class":184},[178,91810,330],{"class":319},[178,91812,431],{"class":188},[178,91814,57035],{"class":319},[178,91816,53341],{"class":323},[178,91818,336],{"class":319},[178,91820,91821,91823,91825,91827,91829,91831,91833,91835],{"class":180,"line":866},[178,91822,341],{"class":319},[178,91824,53541],{"class":323},[178,91826,56960],{"class":184},[178,91828,330],{"class":319},[178,91830,89989],{"class":188},[178,91832,57035],{"class":319},[178,91834,53541],{"class":323},[178,91836,336],{"class":319},[178,91838,91839,91841,91843],{"class":180,"line":877},[178,91840,341],{"class":319},[178,91842,53541],{"class":323},[178,91844,336],{"class":319},[178,91846,91847,91849,91851,91853,91855,91857,91859,91862],{"class":180,"line":882},[178,91848,12982],{"class":699},[178,91850,88648],{"class":195},[178,91852,734],{"class":699},[178,91854,56117],{"class":319},[178,91856,56120],{"class":184},[178,91858,944],{"class":319},[178,91860,91861],{"class":188},"'.box'",[178,91863,863],{"class":319},[178,91865,91866,91868,91870,91872],{"class":180,"line":898},[178,91867,53946],{"class":699},[178,91869,11199],{"class":319},[178,91871,330],{"class":699},[178,91873,49065],{"class":195},[178,91875,91876,91878,91881],{"class":180,"line":914},[178,91877,71804],{"class":699},[178,91879,91880],{"class":184}," mouseMove",[178,91882,12614],{"class":319},[178,91884,91885,91888,91890,91892],{"class":180,"line":919},[178,91886,91887],{"class":319},"      box.innerHTML ",[178,91889,330],{"class":699},[178,91891,4807],{"class":319},[178,91893,4478],{"class":699},[178,91895,91896],{"class":180,"line":935},[178,91897,91898],{"class":2008},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[178,91900,91901],{"class":180,"line":952},[178,91902,3971],{"class":319},[178,91904,91905],{"class":180,"line":966},[178,91906,91907],{"class":2008},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[178,91909,91910],{"class":180,"line":980},[178,91911,91912],{"class":2008},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[178,91914,91915],{"class":180,"line":985},[178,91916,91917],{"class":2008},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[178,91919,91920,91923,91925,91927,91930,91933,91936,91939,91941],{"class":180,"line":1008},[178,91921,91922],{"class":319},"    box.",[178,91924,59534],{"class":184},[178,91926,944],{"class":319},[178,91928,91929],{"class":188},"'mousemove'",[178,91931,91932],{"class":319},", _.",[178,91934,91935],{"class":184},"debounce",[178,91937,91938],{"class":319},"(mouseMove, ",[178,91940,66794],{"class":195},[178,91942,32239],{"class":319},[178,91944,91945,91947,91949],{"class":180,"line":1014},[178,91946,357],{"class":319},[178,91948,53541],{"class":323},[178,91950,336],{"class":319},[178,91952,91953,91955,91957],{"class":180,"line":1019},[178,91954,367],{"class":319},[178,91956,376],{"class":323},[178,91958,336],{"class":319},[178,91960,91961],{"class":180,"line":1033},[178,91962,722],{"emptyLinePlaceholder":721},[178,91964,91965,91967,91969],{"class":180,"line":1046},[178,91966,367],{"class":319},[178,91968,52367],{"class":323},[178,91970,336],{"class":319},[2946,91972,91973],{},[29,91974,91975],{},"手写一个防抖函数来处理",[19,91977,91978],{},"防抖的核心就是利用定时器来实现的：",[19,91980,91981],{},"①声明一个定时器变量",[19,91983,91984],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,91986,91987],{},"③如果没有定时器则开启定时器，记得存到变量里面",[154,91989,91991],{"className":52365,"code":91990,"language":52367,"meta":160,"style":160},"\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",[70,91992,91993,92003,92017,92021,92029,92043,92063,92075,92083,92089,92099,92111,92123,92133,92145,92155,92165,92177,92181,92189,92197,92201,92209,92227,92245,92253,92271,92281,92289,92299,92303,92307,92311,92316,92321,92326,92331,92336,92341,92359,92366,92371,92379,92384,92397,92413,92423,92428,92432,92436,92456,92460,92465,92470,92475,92480,92488,92496,92500],{"__ignoreMap":160},[178,91994,91995,91997,91999,92001],{"class":180,"line":181},[178,91996,53029],{"class":319},[178,91998,53032],{"class":323},[178,92000,53035],{"class":184},[178,92002,336],{"class":319},[178,92004,92005,92007,92009,92011,92013,92015],{"class":180,"line":263},[178,92006,320],{"class":319},[178,92008,52367],{"class":323},[178,92010,53046],{"class":184},[178,92012,330],{"class":319},[178,92014,53051],{"class":188},[178,92016,336],{"class":319},[178,92018,92019],{"class":180,"line":274},[178,92020,722],{"emptyLinePlaceholder":721},[178,92022,92023,92025,92027],{"class":180,"line":354},[178,92024,320],{"class":319},[178,92026,53064],{"class":323},[178,92028,336],{"class":319},[178,92030,92031,92033,92035,92037,92039,92041],{"class":180,"line":364},[178,92032,341],{"class":319},[178,92034,53074],{"class":323},[178,92036,53077],{"class":184},[178,92038,330],{"class":319},[178,92040,53082],{"class":188},[178,92042,336],{"class":319},[178,92044,92045,92047,92049,92051,92053,92055,92057,92059,92061],{"class":180,"line":740},[178,92046,341],{"class":319},[178,92048,53074],{"class":323},[178,92050,426],{"class":184},[178,92052,330],{"class":319},[178,92054,53121],{"class":188},[178,92056,53101],{"class":184},[178,92058,330],{"class":319},[178,92060,53128],{"class":188},[178,92062,336],{"class":319},[178,92064,92065,92067,92069,92071,92073],{"class":180,"line":746},[178,92066,341],{"class":319},[178,92068,53137],{"class":323},[178,92070,53140],{"class":319},[178,92072,53137],{"class":323},[178,92074,336],{"class":319},[178,92076,92077,92079,92081],{"class":180,"line":752},[178,92078,341],{"class":319},[178,92080,1853],{"class":323},[178,92082,336],{"class":319},[178,92084,92085,92087],{"class":180,"line":757},[178,92086,56473],{"class":184},[178,92088,17330],{"class":319},[178,92090,92091,92093,92095,92097],{"class":180,"line":763},[178,92092,74316],{"class":195},[178,92094,53167],{"class":319},[178,92096,62226],{"class":195},[178,92098,3100],{"class":319},[178,92100,92101,92103,92105,92107,92109],{"class":180,"line":769},[178,92102,56492],{"class":195},[178,92104,53167],{"class":319},[178,92106,1002],{"class":195},[178,92108,53222],{"class":699},[178,92110,3100],{"class":319},[178,92112,92113,92115,92117,92119,92121],{"class":180,"line":774},[178,92114,56506],{"class":195},[178,92116,53167],{"class":319},[178,92118,1002],{"class":195},[178,92120,53222],{"class":699},[178,92122,3100],{"class":319},[178,92124,92125,92127,92129,92131],{"class":180,"line":780},[178,92126,56605],{"class":195},[178,92128,53167],{"class":319},[178,92130,91721],{"class":195},[178,92132,3100],{"class":319},[178,92134,92135,92137,92139,92141,92143],{"class":180,"line":786},[178,92136,56643],{"class":195},[178,92138,53167],{"class":319},[178,92140,2765],{"class":195},[178,92142,53222],{"class":699},[178,92144,3100],{"class":319},[178,92146,92147,92149,92151,92153],{"class":180,"line":792},[178,92148,59137],{"class":195},[178,92150,53167],{"class":319},[178,92152,62563],{"class":195},[178,92154,3100],{"class":319},[178,92156,92157,92159,92161,92163],{"class":180,"line":798},[178,92158,59007],{"class":195},[178,92160,53167],{"class":319},[178,92162,53322],{"class":195},[178,92164,3100],{"class":319},[178,92166,92167,92169,92171,92173,92175],{"class":180,"line":804},[178,92168,91760],{"class":195},[178,92170,53167],{"class":319},[178,92172,2259],{"class":195},[178,92174,53222],{"class":699},[178,92176,3100],{"class":319},[178,92178,92179],{"class":180,"line":810},[178,92180,3971],{"class":319},[178,92182,92183,92185,92187],{"class":180,"line":816},[178,92184,357],{"class":319},[178,92186,1853],{"class":323},[178,92188,336],{"class":319},[178,92190,92191,92193,92195],{"class":180,"line":822},[178,92192,367],{"class":319},[178,92194,53064],{"class":323},[178,92196,336],{"class":319},[178,92198,92199],{"class":180,"line":827},[178,92200,722],{"emptyLinePlaceholder":721},[178,92202,92203,92205,92207],{"class":180,"line":832},[178,92204,320],{"class":319},[178,92206,376],{"class":323},[178,92208,336],{"class":319},[178,92210,92211,92213,92215,92217,92219,92221,92223,92225],{"class":180,"line":850},[178,92212,341],{"class":319},[178,92214,53341],{"class":323},[178,92216,55210],{"class":184},[178,92218,330],{"class":319},[178,92220,431],{"class":188},[178,92222,57035],{"class":319},[178,92224,53341],{"class":323},[178,92226,336],{"class":319},[178,92228,92229,92231,92233,92235,92237,92239,92241,92243],{"class":180,"line":866},[178,92230,341],{"class":319},[178,92232,53541],{"class":323},[178,92234,56960],{"class":184},[178,92236,330],{"class":319},[178,92238,89989],{"class":188},[178,92240,57035],{"class":319},[178,92242,53541],{"class":323},[178,92244,336],{"class":319},[178,92246,92247,92249,92251],{"class":180,"line":877},[178,92248,341],{"class":319},[178,92250,53541],{"class":323},[178,92252,336],{"class":319},[178,92254,92255,92257,92259,92261,92263,92265,92267,92269],{"class":180,"line":882},[178,92256,12982],{"class":699},[178,92258,88648],{"class":195},[178,92260,734],{"class":699},[178,92262,56117],{"class":319},[178,92264,56120],{"class":184},[178,92266,944],{"class":319},[178,92268,91861],{"class":188},[178,92270,863],{"class":319},[178,92272,92273,92275,92277,92279],{"class":180,"line":898},[178,92274,53946],{"class":699},[178,92276,11199],{"class":319},[178,92278,330],{"class":699},[178,92280,49065],{"class":195},[178,92282,92283,92285,92287],{"class":180,"line":914},[178,92284,71804],{"class":699},[178,92286,91880],{"class":184},[178,92288,12614],{"class":319},[178,92290,92291,92293,92295,92297],{"class":180,"line":919},[178,92292,91887],{"class":319},[178,92294,330],{"class":699},[178,92296,4807],{"class":319},[178,92298,4478],{"class":699},[178,92300,92301],{"class":180,"line":935},[178,92302,91898],{"class":2008},[178,92304,92305],{"class":180,"line":952},[178,92306,3971],{"class":319},[178,92308,92309],{"class":180,"line":966},[178,92310,91907],{"class":2008},[178,92312,92313],{"class":180,"line":980},[178,92314,92315],{"class":2008},"    \u002F\u002F 手写防抖函数\n",[178,92317,92318],{"class":180,"line":985},[178,92319,92320],{"class":2008},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[178,92322,92323],{"class":180,"line":1008},[178,92324,92325],{"class":2008},"    \u002F\u002F 1.声明定时器变量\n",[178,92327,92328],{"class":180,"line":1014},[178,92329,92330],{"class":2008},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[178,92332,92333],{"class":180,"line":1019},[178,92334,92335],{"class":2008},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[178,92337,92338],{"class":180,"line":1033},[178,92339,92340],{"class":2008},"    \u002F\u002F 4.定时器里面写函数调用\n",[178,92342,92343,92345,92348,92350,92353,92355,92357],{"class":180,"line":1046},[178,92344,71804],{"class":699},[178,92346,92347],{"class":184}," debounce",[178,92349,944],{"class":319},[178,92351,92352],{"class":6985},"fn",[178,92354,14196],{"class":319},[178,92356,2660],{"class":6985},[178,92358,14203],{"class":319},[178,92360,92361,92363],{"class":180,"line":1059},[178,92362,81491],{"class":699},[178,92364,92365],{"class":319}," timer\n",[178,92367,92368],{"class":180,"line":1072},[178,92369,92370],{"class":2008},"      \u002F\u002F return 返回一个匿名函数\n",[178,92372,92373,92375,92377],{"class":180,"line":1077},[178,92374,75702],{"class":699},[178,92376,60639],{"class":699},[178,92378,56173],{"class":319},[178,92380,92381],{"class":180,"line":1082},[178,92382,92383],{"class":2008},"        \u002F\u002F 这里边写第二三四步\n",[178,92385,92386,92388,92391,92394],{"class":180,"line":1099},[178,92387,4280],{"class":699},[178,92389,92390],{"class":319}," (timer) ",[178,92392,92393],{"class":184},"clearTimeout",[178,92395,92396],{"class":319},"(timer)\n",[178,92398,92399,92402,92404,92407,92409,92411],{"class":180,"line":9806},[178,92400,92401],{"class":319},"        timer ",[178,92403,330],{"class":699},[178,92405,92406],{"class":184}," setTimeout",[178,92408,944],{"class":319},[178,92410,56170],{"class":699},[178,92412,56173],{"class":319},[178,92414,92415,92418,92420],{"class":180,"line":9818},[178,92416,92417],{"class":184},"          fn",[178,92419,14811],{"class":319},[178,92421,92422],{"class":2008},"\u002F\u002F加小括号调用fn }, t)\n",[178,92424,92425],{"class":180,"line":11477},[178,92426,92427],{"class":319},"        }, t)\n",[178,92429,92430],{"class":180,"line":11502},[178,92431,54125],{"class":319},[178,92433,92434],{"class":180,"line":11525},[178,92435,3971],{"class":319},[178,92437,92438,92440,92442,92444,92446,92448,92450,92452,92454],{"class":180,"line":11549},[178,92439,91922],{"class":319},[178,92441,59534],{"class":184},[178,92443,944],{"class":319},[178,92445,91929],{"class":188},[178,92447,14196],{"class":319},[178,92449,91935],{"class":184},[178,92451,91938],{"class":319},[178,92453,66794],{"class":195},[178,92455,32239],{"class":319},[178,92457,92458],{"class":180,"line":11554},[178,92459,722],{"emptyLinePlaceholder":721},[178,92461,92462],{"class":180,"line":11559},[178,92463,92464],{"class":2008},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[178,92466,92467],{"class":180,"line":11564},[178,92468,92469],{"class":2008},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[178,92471,92472],{"class":180,"line":11573},[178,92473,92474],{"class":2008},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[178,92476,92477],{"class":180,"line":11578},[178,92478,92479],{"class":2008},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[178,92481,92482,92484,92486],{"class":180,"line":11584},[178,92483,357],{"class":319},[178,92485,53541],{"class":323},[178,92487,336],{"class":319},[178,92489,92490,92492,92494],{"class":180,"line":11605},[178,92491,367],{"class":319},[178,92493,376],{"class":323},[178,92495,336],{"class":319},[178,92497,92498],{"class":180,"line":11611},[178,92499,722],{"emptyLinePlaceholder":721},[178,92501,92502,92504,92506],{"class":180,"line":11625},[178,92503,367],{"class":319},[178,92505,52367],{"class":323},[178,92507,336],{"class":319},[387,92509,92511],{"id":92510},"_4172-节流","4.17.2 节流",[19,92513,92514],{},[3269,92515],{"alt":160,"src":92516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,92518,92519],{},[3269,92520],{"alt":160,"src":92521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,92523,92524],{},[2093,92525,92526],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,92528,92529],{},"实现方式：",[2946,92531,92532],{},[29,92533,92534],{},"lodash 提供的节流函数来处理",[19,92536,92537],{},"_.throttle(func,[wait=0],[options=])",[19,92539,92540],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[154,92542,92544],{"className":52365,"code":92543,"language":52367,"meta":160,"style":160},"\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",[70,92545,92546,92556,92570,92574,92582,92596,92616,92628,92636,92642,92652,92664,92676,92686,92698,92708,92718,92730,92734,92742,92750,92754,92762,92780,92798,92806,92824,92834,92842,92852,92856,92860,92864,92869,92874,92895,92903,92911,92915],{"__ignoreMap":160},[178,92547,92548,92550,92552,92554],{"class":180,"line":181},[178,92549,53029],{"class":319},[178,92551,53032],{"class":323},[178,92553,53035],{"class":184},[178,92555,336],{"class":319},[178,92557,92558,92560,92562,92564,92566,92568],{"class":180,"line":263},[178,92559,320],{"class":319},[178,92561,52367],{"class":323},[178,92563,53046],{"class":184},[178,92565,330],{"class":319},[178,92567,53051],{"class":188},[178,92569,336],{"class":319},[178,92571,92572],{"class":180,"line":274},[178,92573,722],{"emptyLinePlaceholder":721},[178,92575,92576,92578,92580],{"class":180,"line":354},[178,92577,320],{"class":319},[178,92579,53064],{"class":323},[178,92581,336],{"class":319},[178,92583,92584,92586,92588,92590,92592,92594],{"class":180,"line":364},[178,92585,341],{"class":319},[178,92587,53074],{"class":323},[178,92589,53077],{"class":184},[178,92591,330],{"class":319},[178,92593,53082],{"class":188},[178,92595,336],{"class":319},[178,92597,92598,92600,92602,92604,92606,92608,92610,92612,92614],{"class":180,"line":740},[178,92599,341],{"class":319},[178,92601,53074],{"class":323},[178,92603,426],{"class":184},[178,92605,330],{"class":319},[178,92607,53121],{"class":188},[178,92609,53101],{"class":184},[178,92611,330],{"class":319},[178,92613,53128],{"class":188},[178,92615,336],{"class":319},[178,92617,92618,92620,92622,92624,92626],{"class":180,"line":746},[178,92619,341],{"class":319},[178,92621,53137],{"class":323},[178,92623,53140],{"class":319},[178,92625,53137],{"class":323},[178,92627,336],{"class":319},[178,92629,92630,92632,92634],{"class":180,"line":752},[178,92631,341],{"class":319},[178,92633,1853],{"class":323},[178,92635,336],{"class":319},[178,92637,92638,92640],{"class":180,"line":757},[178,92639,56473],{"class":184},[178,92641,17330],{"class":319},[178,92643,92644,92646,92648,92650],{"class":180,"line":763},[178,92645,74316],{"class":195},[178,92647,53167],{"class":319},[178,92649,62226],{"class":195},[178,92651,3100],{"class":319},[178,92653,92654,92656,92658,92660,92662],{"class":180,"line":769},[178,92655,56492],{"class":195},[178,92657,53167],{"class":319},[178,92659,1002],{"class":195},[178,92661,53222],{"class":699},[178,92663,3100],{"class":319},[178,92665,92666,92668,92670,92672,92674],{"class":180,"line":774},[178,92667,56506],{"class":195},[178,92669,53167],{"class":319},[178,92671,1002],{"class":195},[178,92673,53222],{"class":699},[178,92675,3100],{"class":319},[178,92677,92678,92680,92682,92684],{"class":180,"line":780},[178,92679,56605],{"class":195},[178,92681,53167],{"class":319},[178,92683,91721],{"class":195},[178,92685,3100],{"class":319},[178,92687,92688,92690,92692,92694,92696],{"class":180,"line":786},[178,92689,56643],{"class":195},[178,92691,53167],{"class":319},[178,92693,2765],{"class":195},[178,92695,53222],{"class":699},[178,92697,3100],{"class":319},[178,92699,92700,92702,92704,92706],{"class":180,"line":792},[178,92701,59137],{"class":195},[178,92703,53167],{"class":319},[178,92705,62563],{"class":195},[178,92707,3100],{"class":319},[178,92709,92710,92712,92714,92716],{"class":180,"line":798},[178,92711,59007],{"class":195},[178,92713,53167],{"class":319},[178,92715,53322],{"class":195},[178,92717,3100],{"class":319},[178,92719,92720,92722,92724,92726,92728],{"class":180,"line":804},[178,92721,91760],{"class":195},[178,92723,53167],{"class":319},[178,92725,2259],{"class":195},[178,92727,53222],{"class":699},[178,92729,3100],{"class":319},[178,92731,92732],{"class":180,"line":810},[178,92733,3971],{"class":319},[178,92735,92736,92738,92740],{"class":180,"line":816},[178,92737,357],{"class":319},[178,92739,1853],{"class":323},[178,92741,336],{"class":319},[178,92743,92744,92746,92748],{"class":180,"line":822},[178,92745,367],{"class":319},[178,92747,53064],{"class":323},[178,92749,336],{"class":319},[178,92751,92752],{"class":180,"line":827},[178,92753,722],{"emptyLinePlaceholder":721},[178,92755,92756,92758,92760],{"class":180,"line":832},[178,92757,320],{"class":319},[178,92759,376],{"class":323},[178,92761,336],{"class":319},[178,92763,92764,92766,92768,92770,92772,92774,92776,92778],{"class":180,"line":850},[178,92765,341],{"class":319},[178,92767,53341],{"class":323},[178,92769,55210],{"class":184},[178,92771,330],{"class":319},[178,92773,431],{"class":188},[178,92775,57035],{"class":319},[178,92777,53341],{"class":323},[178,92779,336],{"class":319},[178,92781,92782,92784,92786,92788,92790,92792,92794,92796],{"class":180,"line":866},[178,92783,341],{"class":319},[178,92785,53541],{"class":323},[178,92787,56960],{"class":184},[178,92789,330],{"class":319},[178,92791,89989],{"class":188},[178,92793,57035],{"class":319},[178,92795,53541],{"class":323},[178,92797,336],{"class":319},[178,92799,92800,92802,92804],{"class":180,"line":877},[178,92801,341],{"class":319},[178,92803,53541],{"class":323},[178,92805,336],{"class":319},[178,92807,92808,92810,92812,92814,92816,92818,92820,92822],{"class":180,"line":882},[178,92809,12982],{"class":699},[178,92811,88648],{"class":195},[178,92813,734],{"class":699},[178,92815,56117],{"class":319},[178,92817,56120],{"class":184},[178,92819,944],{"class":319},[178,92821,91861],{"class":188},[178,92823,863],{"class":319},[178,92825,92826,92828,92830,92832],{"class":180,"line":898},[178,92827,53946],{"class":699},[178,92829,11199],{"class":319},[178,92831,330],{"class":699},[178,92833,49065],{"class":195},[178,92835,92836,92838,92840],{"class":180,"line":914},[178,92837,71804],{"class":699},[178,92839,91880],{"class":184},[178,92841,12614],{"class":319},[178,92843,92844,92846,92848,92850],{"class":180,"line":919},[178,92845,91887],{"class":319},[178,92847,330],{"class":699},[178,92849,4807],{"class":319},[178,92851,4478],{"class":699},[178,92853,92854],{"class":180,"line":935},[178,92855,91898],{"class":2008},[178,92857,92858],{"class":180,"line":952},[178,92859,3971],{"class":319},[178,92861,92862],{"class":180,"line":966},[178,92863,91907],{"class":2008},[178,92865,92866],{"class":180,"line":980},[178,92867,92868],{"class":2008},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[178,92870,92871],{"class":180,"line":985},[178,92872,92873],{"class":2008},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[178,92875,92876,92878,92880,92882,92884,92886,92889,92891,92893],{"class":180,"line":1008},[178,92877,91922],{"class":319},[178,92879,59534],{"class":184},[178,92881,944],{"class":319},[178,92883,91929],{"class":188},[178,92885,91932],{"class":319},[178,92887,92888],{"class":184},"throttle",[178,92890,91938],{"class":319},[178,92892,66794],{"class":195},[178,92894,32239],{"class":319},[178,92896,92897,92899,92901],{"class":180,"line":1014},[178,92898,357],{"class":319},[178,92900,53541],{"class":323},[178,92902,336],{"class":319},[178,92904,92905,92907,92909],{"class":180,"line":1019},[178,92906,367],{"class":319},[178,92908,376],{"class":323},[178,92910,336],{"class":319},[178,92912,92913],{"class":180,"line":1033},[178,92914,722],{"emptyLinePlaceholder":721},[178,92916,92917,92919,92921],{"class":180,"line":1046},[178,92918,367],{"class":319},[178,92920,52367],{"class":323},[178,92922,336],{"class":319},[2946,92924,92925],{},[29,92926,92927],{},"手写一个节流函数来处理",[19,92929,72672],{},[19,92931,91981],{},[19,92933,92934],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,92936,92937],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[154,92939,92941],{"className":52365,"code":92940,"language":52367,"meta":160,"style":160},"\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",[70,92942,92943,92953,92967,92971,92979,92993,93013,93025,93033,93039,93049,93061,93073,93083,93095,93105,93115,93127,93131,93139,93147,93151,93159,93177,93195,93203,93221,93231,93239,93249,93253,93257,93261,93266,93271,93276,93281,93286,93291,93308,93314,93322,93333,93348,93355,93360,93365,93375,93380,93385,93390,93394,93398,93402,93422,93430,93438,93442],{"__ignoreMap":160},[178,92944,92945,92947,92949,92951],{"class":180,"line":181},[178,92946,53029],{"class":319},[178,92948,53032],{"class":323},[178,92950,53035],{"class":184},[178,92952,336],{"class":319},[178,92954,92955,92957,92959,92961,92963,92965],{"class":180,"line":263},[178,92956,320],{"class":319},[178,92958,52367],{"class":323},[178,92960,53046],{"class":184},[178,92962,330],{"class":319},[178,92964,53051],{"class":188},[178,92966,336],{"class":319},[178,92968,92969],{"class":180,"line":274},[178,92970,722],{"emptyLinePlaceholder":721},[178,92972,92973,92975,92977],{"class":180,"line":354},[178,92974,320],{"class":319},[178,92976,53064],{"class":323},[178,92978,336],{"class":319},[178,92980,92981,92983,92985,92987,92989,92991],{"class":180,"line":364},[178,92982,341],{"class":319},[178,92984,53074],{"class":323},[178,92986,53077],{"class":184},[178,92988,330],{"class":319},[178,92990,53082],{"class":188},[178,92992,336],{"class":319},[178,92994,92995,92997,92999,93001,93003,93005,93007,93009,93011],{"class":180,"line":740},[178,92996,341],{"class":319},[178,92998,53074],{"class":323},[178,93000,426],{"class":184},[178,93002,330],{"class":319},[178,93004,53121],{"class":188},[178,93006,53101],{"class":184},[178,93008,330],{"class":319},[178,93010,53128],{"class":188},[178,93012,336],{"class":319},[178,93014,93015,93017,93019,93021,93023],{"class":180,"line":746},[178,93016,341],{"class":319},[178,93018,53137],{"class":323},[178,93020,53140],{"class":319},[178,93022,53137],{"class":323},[178,93024,336],{"class":319},[178,93026,93027,93029,93031],{"class":180,"line":752},[178,93028,341],{"class":319},[178,93030,1853],{"class":323},[178,93032,336],{"class":319},[178,93034,93035,93037],{"class":180,"line":757},[178,93036,56473],{"class":184},[178,93038,17330],{"class":319},[178,93040,93041,93043,93045,93047],{"class":180,"line":763},[178,93042,74316],{"class":195},[178,93044,53167],{"class":319},[178,93046,62226],{"class":195},[178,93048,3100],{"class":319},[178,93050,93051,93053,93055,93057,93059],{"class":180,"line":769},[178,93052,56492],{"class":195},[178,93054,53167],{"class":319},[178,93056,1002],{"class":195},[178,93058,53222],{"class":699},[178,93060,3100],{"class":319},[178,93062,93063,93065,93067,93069,93071],{"class":180,"line":774},[178,93064,56506],{"class":195},[178,93066,53167],{"class":319},[178,93068,1002],{"class":195},[178,93070,53222],{"class":699},[178,93072,3100],{"class":319},[178,93074,93075,93077,93079,93081],{"class":180,"line":780},[178,93076,56605],{"class":195},[178,93078,53167],{"class":319},[178,93080,91721],{"class":195},[178,93082,3100],{"class":319},[178,93084,93085,93087,93089,93091,93093],{"class":180,"line":786},[178,93086,56643],{"class":195},[178,93088,53167],{"class":319},[178,93090,2765],{"class":195},[178,93092,53222],{"class":699},[178,93094,3100],{"class":319},[178,93096,93097,93099,93101,93103],{"class":180,"line":792},[178,93098,59137],{"class":195},[178,93100,53167],{"class":319},[178,93102,62563],{"class":195},[178,93104,3100],{"class":319},[178,93106,93107,93109,93111,93113],{"class":180,"line":798},[178,93108,59007],{"class":195},[178,93110,53167],{"class":319},[178,93112,53322],{"class":195},[178,93114,3100],{"class":319},[178,93116,93117,93119,93121,93123,93125],{"class":180,"line":804},[178,93118,91760],{"class":195},[178,93120,53167],{"class":319},[178,93122,2259],{"class":195},[178,93124,53222],{"class":699},[178,93126,3100],{"class":319},[178,93128,93129],{"class":180,"line":810},[178,93130,3971],{"class":319},[178,93132,93133,93135,93137],{"class":180,"line":816},[178,93134,357],{"class":319},[178,93136,1853],{"class":323},[178,93138,336],{"class":319},[178,93140,93141,93143,93145],{"class":180,"line":822},[178,93142,367],{"class":319},[178,93144,53064],{"class":323},[178,93146,336],{"class":319},[178,93148,93149],{"class":180,"line":827},[178,93150,722],{"emptyLinePlaceholder":721},[178,93152,93153,93155,93157],{"class":180,"line":832},[178,93154,320],{"class":319},[178,93156,376],{"class":323},[178,93158,336],{"class":319},[178,93160,93161,93163,93165,93167,93169,93171,93173,93175],{"class":180,"line":850},[178,93162,341],{"class":319},[178,93164,53341],{"class":323},[178,93166,55210],{"class":184},[178,93168,330],{"class":319},[178,93170,431],{"class":188},[178,93172,57035],{"class":319},[178,93174,53341],{"class":323},[178,93176,336],{"class":319},[178,93178,93179,93181,93183,93185,93187,93189,93191,93193],{"class":180,"line":866},[178,93180,341],{"class":319},[178,93182,53541],{"class":323},[178,93184,56960],{"class":184},[178,93186,330],{"class":319},[178,93188,89989],{"class":188},[178,93190,57035],{"class":319},[178,93192,53541],{"class":323},[178,93194,336],{"class":319},[178,93196,93197,93199,93201],{"class":180,"line":877},[178,93198,341],{"class":319},[178,93200,53541],{"class":323},[178,93202,336],{"class":319},[178,93204,93205,93207,93209,93211,93213,93215,93217,93219],{"class":180,"line":882},[178,93206,12982],{"class":699},[178,93208,88648],{"class":195},[178,93210,734],{"class":699},[178,93212,56117],{"class":319},[178,93214,56120],{"class":184},[178,93216,944],{"class":319},[178,93218,91861],{"class":188},[178,93220,863],{"class":319},[178,93222,93223,93225,93227,93229],{"class":180,"line":898},[178,93224,53946],{"class":699},[178,93226,11199],{"class":319},[178,93228,330],{"class":699},[178,93230,49065],{"class":195},[178,93232,93233,93235,93237],{"class":180,"line":914},[178,93234,71804],{"class":699},[178,93236,91880],{"class":184},[178,93238,12614],{"class":319},[178,93240,93241,93243,93245,93247],{"class":180,"line":919},[178,93242,91887],{"class":319},[178,93244,330],{"class":699},[178,93246,4807],{"class":319},[178,93248,4478],{"class":699},[178,93250,93251],{"class":180,"line":935},[178,93252,91898],{"class":2008},[178,93254,93255],{"class":180,"line":952},[178,93256,3971],{"class":319},[178,93258,93259],{"class":180,"line":966},[178,93260,91907],{"class":2008},[178,93262,93263],{"class":180,"line":980},[178,93264,93265],{"class":2008},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[178,93267,93268],{"class":180,"line":985},[178,93269,93270],{"class":2008},"    \u002F\u002F 1.声明一个定时器变量\n",[178,93272,93273],{"class":180,"line":1008},[178,93274,93275],{"class":2008},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[178,93277,93278],{"class":180,"line":1014},[178,93279,93280],{"class":2008},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[178,93282,93283],{"class":180,"line":1019},[178,93284,93285],{"class":2008},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[178,93287,93288],{"class":180,"line":1033},[178,93289,93290],{"class":2008},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[178,93292,93293,93295,93298,93300,93302,93304,93306],{"class":180,"line":1046},[178,93294,71804],{"class":699},[178,93296,93297],{"class":184}," throttle",[178,93299,944],{"class":319},[178,93301,92352],{"class":6985},[178,93303,14196],{"class":319},[178,93305,2660],{"class":6985},[178,93307,14203],{"class":319},[178,93309,93310,93312],{"class":180,"line":1059},[178,93311,81491],{"class":699},[178,93313,92365],{"class":319},[178,93315,93316,93318,93320],{"class":180,"line":1072},[178,93317,75702],{"class":699},[178,93319,60639],{"class":699},[178,93321,56173],{"class":319},[178,93323,93324,93326,93328,93330],{"class":180,"line":1077},[178,93325,4280],{"class":699},[178,93327,3457],{"class":319},[178,93329,2166],{"class":699},[178,93331,93332],{"class":319},"timer) {\n",[178,93334,93335,93338,93340,93342,93344,93346],{"class":180,"line":1082},[178,93336,93337],{"class":319},"          timer ",[178,93339,330],{"class":699},[178,93341,92406],{"class":184},[178,93343,944],{"class":319},[178,93345,56170],{"class":699},[178,93347,56173],{"class":319},[178,93349,93350,93353],{"class":180,"line":1099},[178,93351,93352],{"class":184},"            fn",[178,93354,3760],{"class":319},[178,93356,93357],{"class":180,"line":9806},[178,93358,93359],{"class":2008},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[178,93361,93362],{"class":180,"line":9818},[178,93363,93364],{"class":2008},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[178,93366,93367,93370,93372],{"class":180,"line":11477},[178,93368,93369],{"class":319},"            timer ",[178,93371,330],{"class":699},[178,93373,93374],{"class":195}," null\n",[178,93376,93377],{"class":180,"line":11502},[178,93378,93379],{"class":2008},"            \u002F\u002F 不能用clearTimeout(timer)\n",[178,93381,93382],{"class":180,"line":11525},[178,93383,93384],{"class":2008},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[178,93386,93387],{"class":180,"line":11549},[178,93388,93389],{"class":319},"          }, t)\n",[178,93391,93392],{"class":180,"line":11554},[178,93393,4312],{"class":319},[178,93395,93396],{"class":180,"line":11559},[178,93397,54125],{"class":319},[178,93399,93400],{"class":180,"line":11564},[178,93401,3971],{"class":319},[178,93403,93404,93406,93408,93410,93412,93414,93416,93418,93420],{"class":180,"line":11573},[178,93405,91922],{"class":319},[178,93407,59534],{"class":184},[178,93409,944],{"class":319},[178,93411,91929],{"class":188},[178,93413,14196],{"class":319},[178,93415,92888],{"class":184},[178,93417,91938],{"class":319},[178,93419,66794],{"class":195},[178,93421,32239],{"class":319},[178,93423,93424,93426,93428],{"class":180,"line":11578},[178,93425,357],{"class":319},[178,93427,53541],{"class":323},[178,93429,336],{"class":319},[178,93431,93432,93434,93436],{"class":180,"line":11584},[178,93433,367],{"class":319},[178,93435,376],{"class":323},[178,93437,336],{"class":319},[178,93439,93440],{"class":180,"line":11605},[178,93441,722],{"emptyLinePlaceholder":721},[178,93443,93444,93446,93448],{"class":180,"line":11611},[178,93445,367],{"class":319},[178,93447,52367],{"class":323},[178,93449,336],{"class":319},[387,93451,93453],{"id":93452},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[154,93455,93457],{"className":310,"code":93456,"language":312,"meta":160,"style":160},"\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",[70,93458,93459,93467,93475,93480,93485,93490,93495,93499,93507],{"__ignoreMap":160},[178,93460,93461,93463,93465],{"class":180,"line":181},[178,93462,320],{"class":319},[178,93464,376],{"class":323},[178,93466,336],{"class":319},[178,93468,93469,93471,93473],{"class":180,"line":263},[178,93470,341],{"class":319},[178,93472,53541],{"class":323},[178,93474,336],{"class":319},[178,93476,93477],{"class":180,"line":274},[178,93478,93479],{"class":319},"    let timer = null\n",[178,93481,93482],{"class":180,"line":354},[178,93483,93484],{"class":319},"    timer = setTimeout(() => {\n",[178,93486,93487],{"class":180,"line":364},[178,93488,93489],{"class":319},"      clearTimeout(timer)\n",[178,93491,93492],{"class":180,"line":740},[178,93493,93494],{"class":319},"      console.log(timer)\n",[178,93496,93497],{"class":180,"line":746},[178,93498,61946],{"class":319},[178,93500,93501,93503,93505],{"class":180,"line":752},[178,93502,357],{"class":319},[178,93504,53541],{"class":323},[178,93506,336],{"class":319},[178,93508,93509,93511,93513],{"class":180,"line":757},[178,93510,367],{"class":319},[178,93512,376],{"class":323},[178,93514,336],{"class":319},[19,93516,93517],{},"输出为1",[19,93519,93520],{},"在开启的定时器里边写清除定时器",[19,93522,93523],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[387,93525,93527],{"id":93526},"_4174-节流综合案例","4.17.4 节流综合案例",[19,93529,93530],{},"页面打开，可以记录上一次的视频播放位置",[19,93532,93533],{},[3269,93534],{"alt":160,"src":93535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,93537,93538],{},[3269,93539],{"alt":160,"src":93540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[154,93542,93544],{"className":52365,"code":93543,"language":52367,"meta":160,"style":160},"\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",[70,93545,93546,93556,93570,93574,93582,93596,93616,93636,93658,93671,93679,93685,93695,93705,93715,93719,93723,93730,93743,93755,93759,93763,93773,93785,93799,93803,93807,93814,93824,93837,93849,93859,93869,93885,93897,93901,93905,93913,93923,93935,93945,93955,93965,93969,93973,93983,93994,93998,94006,94014,94018,94026,94041,94056,94071,94092,94100,94108,94123,94145,94153,94168,94194,94220,94246,94254,94262,94281,94289,94294,94313,94318,94336,94341,94346,94354,94359,94373,94381,94386,94403,94407,94412,94434,94438,94446,94454,94458],{"__ignoreMap":160},[178,93547,93548,93550,93552,93554],{"class":180,"line":181},[178,93549,53029],{"class":319},[178,93551,53032],{"class":323},[178,93553,53035],{"class":184},[178,93555,336],{"class":319},[178,93557,93558,93560,93562,93564,93566,93568],{"class":180,"line":263},[178,93559,320],{"class":319},[178,93561,52367],{"class":323},[178,93563,53046],{"class":184},[178,93565,330],{"class":319},[178,93567,53051],{"class":188},[178,93569,336],{"class":319},[178,93571,93572],{"class":180,"line":274},[178,93573,722],{"emptyLinePlaceholder":721},[178,93575,93576,93578,93580],{"class":180,"line":354},[178,93577,320],{"class":319},[178,93579,53064],{"class":323},[178,93581,336],{"class":319},[178,93583,93584,93586,93588,93590,93592,93594],{"class":180,"line":364},[178,93585,341],{"class":319},[178,93587,53074],{"class":323},[178,93589,53077],{"class":184},[178,93591,330],{"class":319},[178,93593,53082],{"class":188},[178,93595,60848],{"class":319},[178,93597,93598,93600,93602,93604,93606,93608,93610,93612,93614],{"class":180,"line":740},[178,93599,341],{"class":319},[178,93601,53074],{"class":323},[178,93603,53093],{"class":184},[178,93605,330],{"class":319},[178,93607,53098],{"class":188},[178,93609,53101],{"class":184},[178,93611,330],{"class":319},[178,93613,53106],{"class":188},[178,93615,60848],{"class":319},[178,93617,93618,93620,93622,93624,93626,93628,93630,93632,93634],{"class":180,"line":746},[178,93619,341],{"class":319},[178,93621,53074],{"class":323},[178,93623,426],{"class":184},[178,93625,330],{"class":319},[178,93627,53121],{"class":188},[178,93629,53101],{"class":184},[178,93631,330],{"class":319},[178,93633,53128],{"class":188},[178,93635,60848],{"class":319},[178,93637,93638,93640,93642,93644,93646,93649,93651,93653,93656],{"class":180,"line":752},[178,93639,341],{"class":319},[178,93641,53074],{"class":323},[178,93643,426],{"class":184},[178,93645,330],{"class":319},[178,93647,93648],{"class":188},"\"referrer\"",[178,93650,53101],{"class":184},[178,93652,330],{"class":319},[178,93654,93655],{"class":188},"\"never\"",[178,93657,60848],{"class":319},[178,93659,93660,93662,93664,93667,93669],{"class":180,"line":757},[178,93661,341],{"class":319},[178,93663,53137],{"class":323},[178,93665,93666],{"class":319},">综合案例\u003C\u002F",[178,93668,53137],{"class":323},[178,93670,336],{"class":319},[178,93672,93673,93675,93677],{"class":180,"line":763},[178,93674,341],{"class":319},[178,93676,1853],{"class":323},[178,93678,336],{"class":319},[178,93680,93681,93683],{"class":180,"line":769},[178,93682,8172],{"class":323},[178,93684,17330],{"class":319},[178,93686,93687,93689,93691,93693],{"class":180,"line":774},[178,93688,56416],{"class":195},[178,93690,53167],{"class":319},[178,93692,2133],{"class":195},[178,93694,3100],{"class":319},[178,93696,93697,93699,93701,93703],{"class":180,"line":780},[178,93698,56427],{"class":195},[178,93700,53167],{"class":319},[178,93702,2133],{"class":195},[178,93704,3100],{"class":319},[178,93706,93707,93709,93711,93713],{"class":180,"line":786},[178,93708,74316],{"class":195},[178,93710,53167],{"class":319},[178,93712,62226],{"class":195},[178,93714,3100],{"class":319},[178,93716,93717],{"class":180,"line":792},[178,93718,3971],{"class":319},[178,93720,93721],{"class":180,"line":798},[178,93722,722],{"emptyLinePlaceholder":721},[178,93724,93725,93728],{"class":180,"line":804},[178,93726,93727],{"class":184},"    .container",[178,93729,17330],{"class":319},[178,93731,93732,93734,93736,93739,93741],{"class":180,"line":810},[178,93733,56492],{"class":195},[178,93735,53167],{"class":319},[178,93737,93738],{"class":195},"1200",[178,93740,53222],{"class":699},[178,93742,3100],{"class":319},[178,93744,93745,93747,93749,93751,93753],{"class":180,"line":816},[178,93746,56427],{"class":195},[178,93748,53167],{"class":319},[178,93750,2133],{"class":195},[178,93752,53286],{"class":195},[178,93754,3100],{"class":319},[178,93756,93757],{"class":180,"line":822},[178,93758,3971],{"class":319},[178,93760,93761],{"class":180,"line":827},[178,93762,722],{"emptyLinePlaceholder":721},[178,93764,93765,93768,93771],{"class":180,"line":832},[178,93766,93767],{"class":184},"    .video",[178,93769,93770],{"class":323}," video",[178,93772,17330],{"class":319},[178,93774,93775,93777,93779,93781,93783],{"class":180,"line":850},[178,93776,56492],{"class":195},[178,93778,53167],{"class":319},[178,93780,2251],{"class":195},[178,93782,2268],{"class":699},[178,93784,3100],{"class":319},[178,93786,93787,93789,93791,93793,93795,93797],{"class":180,"line":866},[178,93788,56416],{"class":195},[178,93790,53167],{"class":319},[178,93792,2640],{"class":195},[178,93794,53222],{"class":699},[178,93796,930],{"class":195},[178,93798,3100],{"class":319},[178,93800,93801],{"class":180,"line":877},[178,93802,3971],{"class":319},[178,93804,93805],{"class":180,"line":882},[178,93806,722],{"emptyLinePlaceholder":721},[178,93808,93809,93812],{"class":180,"line":898},[178,93810,93811],{"class":184},"    .elevator",[178,93813,17330],{"class":319},[178,93815,93816,93818,93820,93822],{"class":180,"line":914},[178,93817,56480],{"class":195},[178,93819,53167],{"class":319},[178,93821,87948],{"class":195},[178,93823,3100],{"class":319},[178,93825,93826,93828,93830,93833,93835],{"class":180,"line":919},[178,93827,56668],{"class":195},[178,93829,53167],{"class":319},[178,93831,93832],{"class":195},"280",[178,93834,53222],{"class":699},[178,93836,3100],{"class":319},[178,93838,93839,93841,93843,93845,93847],{"class":180,"line":935},[178,93840,88142],{"class":195},[178,93842,53167],{"class":319},[178,93844,2640],{"class":195},[178,93846,53222],{"class":699},[178,93848,3100],{"class":319},[178,93850,93851,93853,93855,93857],{"class":180,"line":952},[178,93852,87955],{"class":195},[178,93854,53167],{"class":319},[178,93856,87960],{"class":195},[178,93858,3100],{"class":319},[178,93860,93861,93863,93865,93867],{"class":180,"line":966},[178,93862,63442],{"class":195},[178,93864,53167],{"class":319},[178,93866,62563],{"class":195},[178,93868,3100],{"class":319},[178,93870,93871,93873,93875,93877,93879,93881,93883],{"class":180,"line":980},[178,93872,63698],{"class":195},[178,93874,53167],{"class":319},[178,93876,1665],{"class":195},[178,93878,53222],{"class":699},[178,93880,53251],{"class":195},[178,93882,63965],{"class":195},[178,93884,3100],{"class":319},[178,93886,93887,93889,93891,93893,93895],{"class":180,"line":985},[178,93888,56492],{"class":195},[178,93890,53167],{"class":319},[178,93892,2847],{"class":195},[178,93894,53222],{"class":699},[178,93896,3100],{"class":319},[178,93898,93899],{"class":180,"line":1008},[178,93900,3971],{"class":319},[178,93902,93903],{"class":180,"line":1014},[178,93904,722],{"emptyLinePlaceholder":721},[178,93906,93907,93909,93911],{"class":180,"line":1019},[178,93908,93811],{"class":184},[178,93910,3205],{"class":323},[178,93912,17330],{"class":319},[178,93914,93915,93917,93919,93921],{"class":180,"line":1033},[178,93916,56730],{"class":195},[178,93918,53167],{"class":319},[178,93920,62590],{"class":195},[178,93922,3100],{"class":319},[178,93924,93925,93927,93929,93931,93933],{"class":180,"line":1046},[178,93926,56416],{"class":195},[178,93928,53167],{"class":319},[178,93930,2386],{"class":195},[178,93932,53222],{"class":699},[178,93934,3100],{"class":319},[178,93936,93937,93939,93941,93943],{"class":180,"line":1059},[178,93938,65690],{"class":195},[178,93940,53167],{"class":319},[178,93942,56458],{"class":195},[178,93944,3100],{"class":319},[178,93946,93947,93949,93951,93953],{"class":180,"line":1072},[178,93948,59007],{"class":195},[178,93950,53167],{"class":319},[178,93952,53322],{"class":195},[178,93954,3100],{"class":319},[178,93956,93957,93959,93961,93963],{"class":180,"line":1077},[178,93958,59137],{"class":195},[178,93960,53167],{"class":319},[178,93962,63791],{"class":195},[178,93964,3100],{"class":319},[178,93966,93967],{"class":180,"line":1082},[178,93968,3971],{"class":319},[178,93970,93971],{"class":180,"line":1099},[178,93972,722],{"emptyLinePlaceholder":721},[178,93974,93975,93977,93979,93981],{"class":180,"line":9806},[178,93976,93811],{"class":184},[178,93978,3205],{"class":323},[178,93980,65744],{"class":184},[178,93982,17330],{"class":319},[178,93984,93985,93987,93989,93992],{"class":180,"line":9818},[178,93986,59137],{"class":195},[178,93988,53167],{"class":319},[178,93990,93991],{"class":195},"#1286ff",[178,93993,3100],{"class":319},[178,93995,93996],{"class":180,"line":11477},[178,93997,3971],{"class":319},[178,93999,94000,94002,94004],{"class":180,"line":11502},[178,94001,357],{"class":319},[178,94003,1853],{"class":323},[178,94005,336],{"class":319},[178,94007,94008,94010,94012],{"class":180,"line":11525},[178,94009,367],{"class":319},[178,94011,53064],{"class":323},[178,94013,336],{"class":319},[178,94015,94016],{"class":180,"line":11549},[178,94017,722],{"emptyLinePlaceholder":721},[178,94019,94020,94022,94024],{"class":180,"line":11554},[178,94021,320],{"class":319},[178,94023,376],{"class":323},[178,94025,336],{"class":319},[178,94027,94028,94030,94032,94034,94036,94039],{"class":180,"line":11559},[178,94029,341],{"class":319},[178,94031,53341],{"class":323},[178,94033,55210],{"class":184},[178,94035,330],{"class":319},[178,94037,94038],{"class":188},"\"container\"",[178,94040,336],{"class":319},[178,94042,94043,94045,94047,94049,94051,94054],{"class":180,"line":11564},[178,94044,53071],{"class":319},[178,94046,53341],{"class":323},[178,94048,55210],{"class":184},[178,94050,330],{"class":319},[178,94052,94053],{"class":188},"\"header\"",[178,94055,336],{"class":319},[178,94057,94058,94060,94062,94064,94066,94069],{"class":180,"line":11573},[178,94059,56955],{"class":319},[178,94061,2178],{"class":323},[178,94063,62778],{"class":184},[178,94065,330],{"class":319},[178,94067,94068],{"class":188},"\"http:\u002F\u002Fpip.itcast.cn\"",[178,94070,336],{"class":319},[178,94072,94073,94075,94077,94079,94081,94084,94086,94088,94090],{"class":180,"line":11578},[178,94074,57023],{"class":319},[178,94076,3269],{"class":323},[178,94078,56960],{"class":184},[178,94080,330],{"class":319},[178,94082,94083],{"class":188},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[178,94085,56968],{"class":184},[178,94087,330],{"class":319},[178,94089,9421],{"class":188},[178,94091,60848],{"class":319},[178,94093,94094,94096,94098],{"class":180,"line":11584},[178,94095,57128],{"class":319},[178,94097,2178],{"class":323},[178,94099,336],{"class":319},[178,94101,94102,94104,94106],{"class":180,"line":11605},[178,94103,53506],{"class":319},[178,94105,53341],{"class":323},[178,94107,336],{"class":319},[178,94109,94110,94112,94114,94116,94118,94121],{"class":180,"line":11611},[178,94111,53071],{"class":319},[178,94113,53341],{"class":323},[178,94115,55210],{"class":184},[178,94117,330],{"class":319},[178,94119,94120],{"class":188},"\"video\"",[178,94122,336],{"class":319},[178,94124,94125,94127,94129,94131,94133,94136,94139,94141,94143],{"class":180,"line":11625},[178,94126,56955],{"class":319},[178,94128,29932],{"class":323},[178,94130,56960],{"class":184},[178,94132,330],{"class":319},[178,94134,94135],{"class":188},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[178,94137,94138],{"class":184}," controls",[178,94140,57035],{"class":319},[178,94142,29932],{"class":323},[178,94144,336],{"class":319},[178,94146,94147,94149,94151],{"class":180,"line":11631},[178,94148,53506],{"class":319},[178,94150,53341],{"class":323},[178,94152,336],{"class":319},[178,94154,94155,94157,94159,94161,94163,94166],{"class":180,"line":11658},[178,94156,53071],{"class":319},[178,94158,53341],{"class":323},[178,94160,55210],{"class":184},[178,94162,330],{"class":319},[178,94164,94165],{"class":188},"\"elevator\"",[178,94167,336],{"class":319},[178,94169,94170,94172,94174,94176,94178,94180,94183,94185,94187,94190,94192],{"class":180,"line":11667},[178,94171,56955],{"class":319},[178,94173,2178],{"class":323},[178,94175,62778],{"class":184},[178,94177,330],{"class":319},[178,94179,65956],{"class":188},[178,94181,94182],{"class":184}," data-ref",[178,94184,330],{"class":319},[178,94186,94120],{"class":188},[178,94188,94189],{"class":319},">视频介绍\u003C\u002F",[178,94191,2178],{"class":323},[178,94193,336],{"class":319},[178,94195,94196,94198,94200,94202,94204,94206,94208,94210,94213,94216,94218],{"class":180,"line":11673},[178,94197,56955],{"class":319},[178,94199,2178],{"class":323},[178,94201,62778],{"class":184},[178,94203,330],{"class":319},[178,94205,65956],{"class":188},[178,94207,94182],{"class":184},[178,94209,330],{"class":319},[178,94211,94212],{"class":188},"\"intro\"",[178,94214,94215],{"class":319},">课程简介\u003C\u002F",[178,94217,2178],{"class":323},[178,94219,336],{"class":319},[178,94221,94222,94224,94226,94228,94230,94232,94234,94236,94239,94242,94244],{"class":180,"line":11681},[178,94223,56955],{"class":319},[178,94225,2178],{"class":323},[178,94227,62778],{"class":184},[178,94229,330],{"class":319},[178,94231,65956],{"class":188},[178,94233,94182],{"class":184},[178,94235,330],{"class":319},[178,94237,94238],{"class":188},"\"outline\"",[178,94240,94241],{"class":319},">评论列表\u003C\u002F",[178,94243,2178],{"class":323},[178,94245,336],{"class":319},[178,94247,94248,94250,94252],{"class":180,"line":11686},[178,94249,53506],{"class":319},[178,94251,53341],{"class":323},[178,94253,336],{"class":319},[178,94255,94256,94258,94260],{"class":180,"line":18362},[178,94257,357],{"class":319},[178,94259,53341],{"class":323},[178,94261,336],{"class":319},[178,94263,94264,94266,94268,94270,94272,94275,94277,94279],{"class":180,"line":18368},[178,94265,341],{"class":319},[178,94267,53541],{"class":323},[178,94269,56960],{"class":184},[178,94271,330],{"class":319},[178,94273,94274],{"class":188},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[178,94276,57035],{"class":319},[178,94278,53541],{"class":323},[178,94280,336],{"class":319},[178,94282,94283,94285,94287],{"class":180,"line":18391},[178,94284,341],{"class":319},[178,94286,53541],{"class":323},[178,94288,336],{"class":319},[178,94290,94291],{"class":180,"line":18397},[178,94292,94293],{"class":2008},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[178,94295,94296,94298,94300,94302,94304,94306,94308,94311],{"class":180,"line":18420},[178,94297,12982],{"class":699},[178,94299,93770],{"class":195},[178,94301,734],{"class":699},[178,94303,56117],{"class":319},[178,94305,56120],{"class":184},[178,94307,944],{"class":319},[178,94309,94310],{"class":188},"'video'",[178,94312,863],{"class":319},[178,94314,94315],{"class":180,"line":18434},[178,94316,94317],{"class":2008},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[178,94319,94320,94323,94325,94327,94329,94332,94334],{"class":180,"line":18454},[178,94321,94322],{"class":319},"    video.ontimeupdate ",[178,94324,330],{"class":699},[178,94326,90070],{"class":319},[178,94328,92888],{"class":184},[178,94330,94331],{"class":319},"(() ",[178,94333,86437],{"class":699},[178,94335,17330],{"class":319},[178,94337,94338],{"class":180,"line":18460},[178,94339,94340],{"class":2008},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[178,94342,94343],{"class":180,"line":18471},[178,94344,94345],{"class":2008},"      \u002F\u002F 控制台输出当前的时间\n",[178,94347,94348,94351],{"class":180,"line":18494},[178,94349,94350],{"class":2008},"      \u002F\u002F console.log(video.currentTime)",[178,94352,94353],{"class":2008},"  \u002F\u002F获得当前的视频时间\n",[178,94355,94356],{"class":180,"line":18516},[178,94357,94358],{"class":2008},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[178,94360,94361,94363,94365,94367,94370],{"class":180,"line":18521},[178,94362,76403],{"class":319},[178,94364,73374],{"class":184},[178,94366,944],{"class":319},[178,94368,94369],{"class":188},"'currentTime'",[178,94371,94372],{"class":319},", video.currentTime)\n",[178,94374,94375,94377,94379],{"class":180,"line":18527},[178,94376,56256],{"class":319},[178,94378,8179],{"class":195},[178,94380,863],{"class":319},[178,94382,94383],{"class":180,"line":18541},[178,94384,94385],{"class":2008},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[178,94387,94388,94391,94394,94396,94399,94401],{"class":180,"line":18554},[178,94389,94390],{"class":319},"    video.",[178,94392,94393],{"class":184},"onloadeddata",[178,94395,734],{"class":699},[178,94397,94398],{"class":319}," () ",[178,94400,86437],{"class":699},[178,94402,17330],{"class":319},[178,94404,94405],{"class":180,"line":18559},[178,94406,61733],{"class":2008},[178,94408,94409],{"class":180,"line":18573},[178,94410,94411],{"class":2008},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[178,94413,94414,94417,94419,94422,94424,94426,94428,94430,94432],{"class":180,"line":18578},[178,94415,94416],{"class":319},"      video.currentTime ",[178,94418,330],{"class":699},[178,94420,94421],{"class":319}," localStorage.",[178,94423,73405],{"class":184},[178,94425,944],{"class":319},[178,94427,94369],{"class":188},[178,94429,15474],{"class":319},[178,94431,73077],{"class":699},[178,94433,49065],{"class":195},[178,94435,94436],{"class":180,"line":18584},[178,94437,3971],{"class":319},[178,94439,94440,94442,94444],{"class":180,"line":18589},[178,94441,357],{"class":319},[178,94443,53541],{"class":323},[178,94445,336],{"class":319},[178,94447,94448,94450,94452],{"class":180,"line":18603},[178,94449,367],{"class":319},[178,94451,376],{"class":323},[178,94453,336],{"class":319},[178,94455,94456],{"class":180,"line":18608},[178,94457,722],{"emptyLinePlaceholder":721},[178,94459,94460,94462,94464],{"class":180,"line":18613},[178,94461,367],{"class":319},[178,94463,52367],{"class":323},[178,94465,336],{"class":319},[1853,94467,94468],{},"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":160,"searchDepth":263,"depth":263,"links":94470},[94471,94476,94480,94481,94482,94487,94492,94493,94494,94495,94502,94507,94508,94518,94522,94523,94527],{"id":78411,"depth":263,"text":78412,"children":94472},[94473,94474,94475],{"id":78415,"depth":274,"text":78416},{"id":78440,"depth":274,"text":78441},{"id":78452,"depth":274,"text":78453},{"id":78464,"depth":263,"text":78465,"children":94477},[94478,94479],{"id":78468,"depth":274,"text":78469},{"id":78483,"depth":274,"text":78484},{"id":78535,"depth":263,"text":78536},{"id":78579,"depth":263,"text":78580},{"id":78596,"depth":263,"text":78597,"children":94483},[94484,94485,94486],{"id":78600,"depth":274,"text":78601},{"id":78613,"depth":274,"text":78614},{"id":78718,"depth":274,"text":78719},{"id":79007,"depth":263,"text":79008,"children":94488},[94489,94490,94491],{"id":79011,"depth":274,"text":79012},{"id":79454,"depth":274,"text":79455},{"id":79865,"depth":274,"text":79866},{"id":79928,"depth":263,"text":79929},{"id":80007,"depth":263,"text":80008},{"id":80100,"depth":263,"text":80101},{"id":81944,"depth":263,"text":81945,"children":94496},[94497,94498,94499,94500,94501],{"id":81948,"depth":274,"text":81949},{"id":81960,"depth":274,"text":81961},{"id":82179,"depth":274,"text":82180},{"id":82197,"depth":274,"text":82198},{"id":82257,"depth":274,"text":82258},{"id":86521,"depth":263,"text":86522,"children":94503},[94504,94505,94506],{"id":86525,"depth":274,"text":86526},{"id":86543,"depth":274,"text":86544},{"id":86569,"depth":274,"text":86570},{"id":86578,"depth":263,"text":86579},{"id":86600,"depth":263,"text":86601,"children":94509},[94510,94511,94512,94513,94514,94515,94516,94517],{"id":86604,"depth":274,"text":86605},{"id":86865,"depth":274,"text":86866},{"id":87051,"depth":274,"text":87052},{"id":87418,"depth":274,"text":87419},{"id":87534,"depth":274,"text":87535},{"id":87570,"depth":274,"text":87571},{"id":87617,"depth":274,"text":87618},{"id":87651,"depth":274,"text":87652},{"id":89014,"depth":263,"text":89015,"children":94519},[94520,94521],{"id":89018,"depth":274,"text":89019},{"id":89055,"depth":274,"text":89056},{"id":90410,"depth":263,"text":90411},{"id":90781,"depth":263,"text":90782,"children":94524},[94525,94526],{"id":90785,"depth":274,"text":90786},{"id":90819,"depth":274,"text":90820},{"id":91548,"depth":263,"text":91549,"children":94528},[94529,94530,94531,94532],{"id":91552,"depth":274,"text":91553},{"id":92510,"depth":274,"text":92511},{"id":93452,"depth":274,"text":93453},{"id":93526,"depth":274,"text":93527},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78400,"description":25135},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94539,"title":94540,"body":94541,"description":94552,"extension":1880,"meta":94553,"navigation":721,"path":94555,"seo":94556,"stem":94557,"__hash__":94558},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94542,"toc":94550},[94543],[19,94544,94545,94546],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[2178,94547,94548],{"href":94548,"rel":94549},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[25619],{"title":160,"searchDepth":263,"depth":263,"links":94551},[],"三件套第三套学习",{"category":94554},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94540,"description":94552},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94560,"title":94561,"body":94562,"description":25135,"extension":1880,"meta":94667,"navigation":721,"path":94668,"seo":94669,"stem":94670,"__hash__":94671},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94563,"toc":94662},[94564,94571,94574,94577,94580,94584,94593,94596,94599,94603,94612,94615,94619,94622,94642,94645,94659],[19,94565,94566],{},[2178,94567,94570],{"href":94568,"rel":94569},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[25619],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94572,94561],{"id":94573},"_1安装",[19,94575,94576],{},"numpy是科学计算基础库,底层是C语言",[19,94578,94579],{},"三种方式：",[14,94581,94583],{"id":94582},"_11-通过pip安装","1.1 通过pip安装",[154,94585,94587],{"className":690,"code":94586,"language":692,"meta":160,"style":160},"pip install numpy\n",[70,94588,94589],{"__ignoreMap":160},[178,94590,94591],{"class":180,"line":181},[178,94592,94586],{"class":319},[19,94594,94595],{},"首选方式，自动处理依赖项",[19,94597,94598],{},"在提示系统命令符中使用cmd",[14,94600,94602],{"id":94601},"_12-通过anaconda安装","1.2 通过Anaconda安装",[154,94604,94606],{"className":690,"code":94605,"language":692,"meta":160,"style":160},"conda install numpy\n",[70,94607,94608],{"__ignoreMap":160},[178,94609,94610],{"class":180,"line":181},[178,94611,94605],{"class":319},[19,94613,94614],{},"自动解决环境依赖",[14,94616,94618],{"id":94617},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,94620,94621],{},"对于Debian\u002FUbuntu",[154,94623,94625],{"className":690,"code":94624,"language":692,"meta":160,"style":160},"sudo apt-get install python3-numpy\n",[70,94626,94627],{"__ignoreMap":160},[178,94628,94629,94632,94634,94637,94639],{"class":180,"line":181},[178,94630,94631],{"class":319},"sudo apt",[178,94633,2472],{"class":699},[178,94635,94636],{"class":319},"get install python3",[178,94638,2472],{"class":699},[178,94640,94641],{"class":319},"numpy\n",[19,94643,94644],{},"对于Fedora:",[154,94646,94648],{"className":690,"code":94647,"language":692,"meta":160,"style":160},"sudo dnf install python3-numpy\n",[70,94649,94650],{"__ignoreMap":160},[178,94651,94652,94655,94657],{"class":180,"line":181},[178,94653,94654],{"class":319},"sudo dnf install python3",[178,94656,2472],{"class":699},[178,94658,94641],{"class":319},[1853,94660,94661],{},"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":160,"searchDepth":263,"depth":263,"links":94663},[94664,94665,94666],{"id":94582,"depth":263,"text":94583},{"id":94601,"depth":263,"text":94602},{"id":94617,"depth":263,"text":94618},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94561,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94673,"title":94674,"body":94675,"description":25135,"extension":1880,"meta":94788,"navigation":721,"path":94789,"seo":94790,"stem":94791,"__hash__":94792},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94676,"toc":94786},[94677,94680,94683,94686,94689,94692,94695,94698,94701,94704,94780,94783],[10,94678,94674],{"id":94679},"_10算数函数",[19,94681,94682],{},"加减乘除运算跟python基础语法没区别",[19,94684,94685],{},"除了python那种方法外还可以使用函数",[19,94687,94688],{},"加：np.add(a,b)",[19,94690,94691],{},"减：np.subtract(a,b)",[19,94693,94694],{},"乘：np.multiply(a,b)",[19,94696,94697],{},"除：np.divide(a,b) == a\u002Fb",[19,94699,94700],{},"取余：np.mod(a,b) == a%b",[19,94702,94703],{},"必须会的用法：",[154,94705,94707],{"className":690,"code":94706,"language":692,"meta":160,"style":160},"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",[70,94708,94709,94731,94752,94762,94775],{"__ignoreMap":160},[178,94710,94711,94713,94715,94718,94720,94723,94725,94727,94729],{"class":180,"line":181},[178,94712,2178],{"class":319},[178,94714,330],{"class":699},[178,94716,94717],{"class":319},"np.arange(",[178,94719,2360],{"class":195},[178,94721,94722],{"class":319},").reshape(",[178,94724,2021],{"class":195},[178,94726,2318],{"class":319},[178,94728,2021],{"class":195},[178,94730,863],{"class":319},[178,94732,94733,94735,94737,94740,94742,94744,94746,94748,94750],{"class":180,"line":263},[178,94734,2203],{"class":319},[178,94736,330],{"class":699},[178,94738,94739],{"class":319},"np.array([",[178,94741,2386],{"class":195},[178,94743,2318],{"class":319},[178,94745,2386],{"class":195},[178,94747,2318],{"class":319},[178,94749,2386],{"class":195},[178,94751,6428],{"class":319},[178,94753,94754,94757,94759],{"class":180,"line":274},[178,94755,94756],{"class":319},"result",[178,94758,330],{"class":699},[178,94760,94761],{"class":319},"np.empty_like(a)\n",[178,94763,94764,94767,94770,94772],{"class":180,"line":354},[178,94765,94766],{"class":319},"np.add(a,b,",[178,94768,94769],{"class":6985},"out",[178,94771,330],{"class":699},[178,94773,94774],{"class":319},"result)\n",[178,94776,94777],{"class":180,"line":364},[178,94778,94779],{"class":319},"result\n",[19,94781,94782],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[1853,94784,94785],{},"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":160,"searchDepth":263,"depth":263,"links":94787},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94674,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94794,"title":94795,"body":94796,"description":25135,"extension":1880,"meta":95558,"navigation":721,"path":95559,"seo":95560,"stem":95561,"__hash__":95562},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94797,"toc":95545},[94798,94801,94804,94807,94811,94850,94854,94898,94958,94962,94965,95004,95007,95052,95056,95092,95096,95165,95169,95233,95237,95240,95243,95246,95249,95285,95289,95329,95333,95405,95408,95412,95475,95479,95542],[10,94799,94795],{"id":94800},"_11统计函数",[19,94802,94803],{},"sum max min mean",[19,94805,94806],{},"这些有axis参数，可以指定方向",[14,94808,94810],{"id":94809},"_111-sum求和函数","11.1 sum()求和函数",[154,94812,94814],{"className":690,"code":94813,"language":692,"meta":160,"style":160},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[70,94815,94816,94821,94842],{"__ignoreMap":160},[178,94817,94818],{"class":180,"line":181},[178,94819,94820],{"class":2008},"#创建一维数组\n",[178,94822,94823,94825,94827,94830,94832,94834,94836,94838,94840],{"class":180,"line":263},[178,94824,2178],{"class":319},[178,94826,330],{"class":699},[178,94828,94829],{"class":319},"np.random.randint(",[178,94831,1665],{"class":195},[178,94833,2318],{"class":319},[178,94835,2251],{"class":195},[178,94837,2318],{"class":319},[178,94839,2640],{"class":195},[178,94841,863],{"class":319},[178,94843,94844,94847],{"class":180,"line":274},[178,94845,94846],{"class":319},"np.sum(a)",[178,94848,94849],{"class":2008},"#求和\n",[14,94851,94853],{"id":94852},"_112-max求最大值函数","11.2 max()求最大值函数",[154,94855,94857],{"className":690,"code":94856,"language":692,"meta":160,"style":160},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[70,94858,94859,94863,94883,94888,94893],{"__ignoreMap":160},[178,94860,94861],{"class":180,"line":181},[178,94862,94820],{"class":2008},[178,94864,94865,94867,94869,94871,94873,94875,94877,94879,94881],{"class":180,"line":263},[178,94866,2178],{"class":319},[178,94868,330],{"class":699},[178,94870,94829],{"class":319},[178,94872,1665],{"class":195},[178,94874,2318],{"class":319},[178,94876,2251],{"class":195},[178,94878,2318],{"class":319},[178,94880,2640],{"class":195},[178,94882,863],{"class":319},[178,94884,94885],{"class":180,"line":274},[178,94886,94887],{"class":319},"np.max(a)\n",[178,94889,94890],{"class":180,"line":354},[178,94891,94892],{"class":2008},"#最大索引(求最大元素的索引)arg\n",[178,94894,94895],{"class":180,"line":364},[178,94896,94897],{"class":319},"np.argmax(a)\n",[154,94899,94901],{"className":690,"code":94900,"language":692,"meta":160,"style":160},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[70,94902,94903,94924,94944,94948],{"__ignoreMap":160},[178,94904,94905,94907,94909,94912,94914,94916,94918,94920,94922],{"class":180,"line":181},[178,94906,12680],{"class":319},[178,94908,330],{"class":699},[178,94910,94911],{"class":319}," np.array([",[178,94913,1665],{"class":195},[178,94915,14196],{"class":319},[178,94917,2259],{"class":195},[178,94919,14196],{"class":319},[178,94921,2021],{"class":195},[178,94923,6428],{"class":319},[178,94925,94926,94928,94930,94932,94934,94936,94938,94940,94942],{"class":180,"line":263},[178,94927,12706],{"class":319},[178,94929,330],{"class":699},[178,94931,94911],{"class":319},[178,94933,2021],{"class":195},[178,94935,14196],{"class":319},[178,94937,1669],{"class":195},[178,94939,14196],{"class":319},[178,94941,2233],{"class":195},[178,94943,6428],{"class":319},[178,94945,94946],{"class":180,"line":274},[178,94947,722],{"emptyLinePlaceholder":721},[178,94949,94950,94952,94955],{"class":180,"line":354},[178,94951,1504],{"class":195},[178,94953,94954],{"class":319},"(np.maximum(a, b))   ",[178,94956,94957],{"class":2008},"# [3 5 4]，每个位置上取较大值\n",[14,94959,94961],{"id":94960},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,94963,94964],{},"①一维数组：",[154,94966,94968],{"className":690,"code":94967,"language":692,"meta":160,"style":160},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[70,94969,94970,94974,94994,94999],{"__ignoreMap":160},[178,94971,94972],{"class":180,"line":181},[178,94973,94820],{"class":2008},[178,94975,94976,94978,94980,94982,94984,94986,94988,94990,94992],{"class":180,"line":263},[178,94977,2178],{"class":319},[178,94979,330],{"class":699},[178,94981,94829],{"class":319},[178,94983,1665],{"class":195},[178,94985,2318],{"class":319},[178,94987,2251],{"class":195},[178,94989,2318],{"class":319},[178,94991,2640],{"class":195},[178,94993,863],{"class":319},[178,94995,94996],{"class":180,"line":274},[178,94997,94998],{"class":2008},"#求平均值\n",[178,95000,95001],{"class":180,"line":354},[178,95002,95003],{"class":319},"np.mean(a)\n",[19,95005,95006],{},"②二维数组",[154,95008,95010],{"className":690,"code":95009,"language":692,"meta":160,"style":160},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[70,95011,95012,95017,95042,95047],{"__ignoreMap":160},[178,95013,95014],{"class":180,"line":181},[178,95015,95016],{"class":2008},"#二维数组\n",[178,95018,95019,95022,95024,95026,95028,95030,95032,95034,95036,95038,95040],{"class":180,"line":263},[178,95020,95021],{"class":319},"aa",[178,95023,330],{"class":699},[178,95025,94717],{"class":319},[178,95027,1665],{"class":195},[178,95029,2318],{"class":319},[178,95031,2463],{"class":195},[178,95033,94722],{"class":319},[178,95035,2021],{"class":195},[178,95037,2318],{"class":319},[178,95039,2233],{"class":195},[178,95041,863],{"class":319},[178,95043,95044],{"class":180,"line":274},[178,95045,95046],{"class":2008},"#对数组中的所有数求平均\n",[178,95048,95049],{"class":180,"line":354},[178,95050,95051],{"class":319},"np.mean(aa)\n",[14,95053,95055],{"id":95054},"_114-median求中位数函数","11.4 median()求中位数函数",[154,95057,95059],{"className":690,"code":95058,"language":692,"meta":160,"style":160},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[70,95060,95061,95066,95082,95087],{"__ignoreMap":160},[178,95062,95063],{"class":180,"line":181},[178,95064,95065],{"class":2008},"#求中位数\n",[178,95067,95068,95070,95072,95074,95076,95078,95080],{"class":180,"line":263},[178,95069,2203],{"class":319},[178,95071,330],{"class":699},[178,95073,94717],{"class":319},[178,95075,1665],{"class":195},[178,95077,2318],{"class":319},[178,95079,2386],{"class":195},[178,95081,863],{"class":319},[178,95083,95084],{"class":180,"line":274},[178,95085,95086],{"class":319},"np.median(b)\n",[178,95088,95089],{"class":180,"line":354},[178,95090,95091],{"class":2008},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95093,95095],{"id":95094},"_115-power求幂运算函数","11.5 power()求幂运算函数",[154,95097,95099],{"className":690,"code":95098,"language":692,"meta":160,"style":160},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[70,95100,95101,95117,95122,95127,95136,95141,95150],{"__ignoreMap":160},[178,95102,95103,95105,95107,95109,95111,95113,95115],{"class":180,"line":181},[178,95104,2203],{"class":319},[178,95106,330],{"class":699},[178,95108,94717],{"class":319},[178,95110,1665],{"class":195},[178,95112,2318],{"class":319},[178,95114,2386],{"class":195},[178,95116,863],{"class":319},[178,95118,95119],{"class":180,"line":263},[178,95120,95121],{"class":2008},"#幂运算\n",[178,95123,95124],{"class":180,"line":274},[178,95125,95126],{"class":2008},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[178,95128,95129,95132,95134],{"class":180,"line":354},[178,95130,95131],{"class":319},"np.power(b,",[178,95133,1669],{"class":195},[178,95135,863],{"class":319},[178,95137,95138],{"class":180,"line":364},[178,95139,95140],{"class":2008},"#或者以下代码，将数据存储起来\n",[178,95142,95143,95145,95147],{"class":180,"line":740},[178,95144,2785],{"class":319},[178,95146,330],{"class":699},[178,95148,95149],{"class":319},"np.empty_like(b)\n",[178,95151,95152,95154,95156,95158,95160,95162],{"class":180,"line":746},[178,95153,95131],{"class":319},[178,95155,1669],{"class":195},[178,95157,2318],{"class":319},[178,95159,94769],{"class":6985},[178,95161,330],{"class":699},[178,95163,95164],{"class":319},"y)\n",[14,95166,95168],{"id":95167},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[154,95170,95172],{"className":690,"code":95171,"language":692,"meta":160,"style":160},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[70,95173,95174,95190,95195,95200,95204,95222],{"__ignoreMap":160},[178,95175,95176,95178,95180,95182,95184,95186,95188],{"class":180,"line":181},[178,95177,2203],{"class":319},[178,95179,330],{"class":699},[178,95181,94717],{"class":319},[178,95183,1665],{"class":195},[178,95185,2318],{"class":319},[178,95187,2386],{"class":195},[178,95189,863],{"class":319},[178,95191,95192],{"class":180,"line":263},[178,95193,95194],{"class":2008},"#开方\n",[178,95196,95197],{"class":180,"line":274},[178,95198,95199],{"class":319},"np.sqrt(b)\n",[178,95201,95202],{"class":180,"line":354},[178,95203,95140],{"class":2008},[178,95205,95206,95208,95210,95213,95216,95218,95220],{"class":180,"line":364},[178,95207,2785],{"class":319},[178,95209,330],{"class":699},[178,95211,95212],{"class":319},"np.empty_like(b,",[178,95214,95215],{"class":6985},"dtype",[178,95217,330],{"class":699},[178,95219,1991],{"class":195},[178,95221,863],{"class":319},[178,95223,95224,95227,95229,95231],{"class":180,"line":740},[178,95225,95226],{"class":319},"np.sqrt(b,",[178,95228,94769],{"class":6985},[178,95230,330],{"class":699},[178,95232,95164],{"class":319},[14,95234,95236],{"id":95235},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,95238,95239],{},"对数组中的元素累计求和，可指定轴",[19,95241,95242],{},"#累计求和的意思是：",[19,95244,95245],{},"a = np.array([1, 2, 3, 4])",[19,95247,95248],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[154,95250,95252],{"className":690,"code":95251,"language":692,"meta":160,"style":160},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[70,95253,95254,95270,95275,95280],{"__ignoreMap":160},[178,95255,95256,95258,95260,95262,95264,95266,95268],{"class":180,"line":181},[178,95257,2203],{"class":319},[178,95259,330],{"class":699},[178,95261,94717],{"class":319},[178,95263,1665],{"class":195},[178,95265,2318],{"class":319},[178,95267,2386],{"class":195},[178,95269,863],{"class":319},[178,95271,95272],{"class":180,"line":263},[178,95273,95274],{"class":319},"np.cumsum(b)\n",[178,95276,95277],{"class":180,"line":274},[178,95278,95279],{"class":2008},"#结果：\n",[178,95281,95282],{"class":180,"line":354},[178,95283,95284],{"class":2008},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95286,95288],{"id":95287},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[154,95290,95292],{"className":690,"code":95291,"language":692,"meta":160,"style":160},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[70,95293,95294,95310,95315,95320,95324],{"__ignoreMap":160},[178,95295,95296,95298,95300,95302,95304,95306,95308],{"class":180,"line":181},[178,95297,2203],{"class":319},[178,95299,330],{"class":699},[178,95301,94717],{"class":319},[178,95303,1665],{"class":195},[178,95305,2318],{"class":319},[178,95307,2386],{"class":195},[178,95309,863],{"class":319},[178,95311,95312],{"class":180,"line":263},[178,95313,95314],{"class":2008},"#对数组中的元素累计求积，可指定轴\n",[178,95316,95317],{"class":180,"line":274},[178,95318,95319],{"class":319},"np.cumprod(b)\n",[178,95321,95322],{"class":180,"line":354},[178,95323,95279],{"class":2008},[178,95325,95326],{"class":180,"line":364},[178,95327,95328],{"class":2008},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95330,95332],{"id":95331},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[154,95334,95336],{"className":690,"code":95335,"language":692,"meta":160,"style":160},"#删除数组中的重复数据，并对数据进行排序\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",[70,95337,95338,95343,95391,95396,95400],{"__ignoreMap":160},[178,95339,95340],{"class":180,"line":181},[178,95341,95342],{"class":2008},"#删除数组中的重复数据，并对数据进行排序\n",[178,95344,95345,95347,95349,95351,95353,95355,95357,95359,95361,95363,95365,95367,95369,95371,95373,95375,95377,95379,95381,95383,95385,95387,95389],{"class":180,"line":263},[178,95346,2178],{"class":319},[178,95348,330],{"class":699},[178,95350,94739],{"class":319},[178,95352,1665],{"class":195},[178,95354,2318],{"class":319},[178,95356,1669],{"class":195},[178,95358,2318],{"class":319},[178,95360,2021],{"class":195},[178,95362,2318],{"class":319},[178,95364,2438],{"class":195},[178,95366,2318],{"class":319},[178,95368,2021],{"class":195},[178,95370,2318],{"class":319},[178,95372,2386],{"class":195},[178,95374,2318],{"class":319},[178,95376,2139],{"class":195},[178,95378,2318],{"class":319},[178,95380,2133],{"class":195},[178,95382,2318],{"class":319},[178,95384,2715],{"class":195},[178,95386,2318],{"class":319},[178,95388,2233],{"class":195},[178,95390,6428],{"class":319},[178,95392,95393],{"class":180,"line":274},[178,95394,95395],{"class":319},"np.unique(a)\n",[178,95397,95398],{"class":180,"line":354},[178,95399,95279],{"class":2008},[178,95401,95402],{"class":180,"line":364},[178,95403,95404],{"class":2008},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,95406,95407],{},"升序形式排序",[14,95409,95411],{"id":95410},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[154,95413,95415],{"className":690,"code":95414,"language":692,"meta":160,"style":160},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[70,95416,95417,95465,95470],{"__ignoreMap":160},[178,95418,95419,95421,95423,95425,95427,95429,95431,95433,95435,95437,95439,95441,95443,95445,95447,95449,95451,95453,95455,95457,95459,95461,95463],{"class":180,"line":181},[178,95420,2178],{"class":319},[178,95422,330],{"class":699},[178,95424,94739],{"class":319},[178,95426,1665],{"class":195},[178,95428,2318],{"class":319},[178,95430,1669],{"class":195},[178,95432,2318],{"class":319},[178,95434,2021],{"class":195},[178,95436,2318],{"class":319},[178,95438,2438],{"class":195},[178,95440,2318],{"class":319},[178,95442,2021],{"class":195},[178,95444,2318],{"class":319},[178,95446,2386],{"class":195},[178,95448,2318],{"class":319},[178,95450,2139],{"class":195},[178,95452,2318],{"class":319},[178,95454,2133],{"class":195},[178,95456,2318],{"class":319},[178,95458,2715],{"class":195},[178,95460,2318],{"class":319},[178,95462,2233],{"class":195},[178,95464,6428],{"class":319},[178,95466,95467],{"class":180,"line":263},[178,95468,95469],{"class":2008},"#返回数组中非零元素的索引\n",[178,95471,95472],{"class":180,"line":274},[178,95473,95474],{"class":319},"np.nonzero(a)\n",[14,95476,95478],{"id":95477},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[154,95480,95482],{"className":690,"code":95481,"language":692,"meta":160,"style":160},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[70,95483,95484,95532,95537],{"__ignoreMap":160},[178,95485,95486,95488,95490,95492,95494,95496,95498,95500,95502,95504,95506,95508,95510,95512,95514,95516,95518,95520,95522,95524,95526,95528,95530],{"class":180,"line":181},[178,95487,2178],{"class":319},[178,95489,330],{"class":699},[178,95491,94739],{"class":319},[178,95493,1665],{"class":195},[178,95495,2318],{"class":319},[178,95497,1669],{"class":195},[178,95499,2318],{"class":319},[178,95501,2021],{"class":195},[178,95503,2318],{"class":319},[178,95505,2438],{"class":195},[178,95507,2318],{"class":319},[178,95509,2021],{"class":195},[178,95511,2318],{"class":319},[178,95513,2386],{"class":195},[178,95515,2318],{"class":319},[178,95517,2139],{"class":195},[178,95519,2318],{"class":319},[178,95521,2133],{"class":195},[178,95523,2318],{"class":319},[178,95525,2715],{"class":195},[178,95527,2318],{"class":319},[178,95529,2233],{"class":195},[178,95531,6428],{"class":319},[178,95533,95534],{"class":180,"line":263},[178,95535,95536],{"class":2008},"#计算一组数中最大值与最小值的差，可指定轴\n",[178,95538,95539],{"class":180,"line":274},[178,95540,95541],{"class":319},"np.ptp(a)\n",[1853,95543,95544],{},"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":160,"searchDepth":263,"depth":263,"links":95546},[95547,95548,95549,95550,95551,95552,95553,95554,95555,95556,95557],{"id":94809,"depth":263,"text":94810},{"id":94852,"depth":263,"text":94853},{"id":94960,"depth":263,"text":94961},{"id":95054,"depth":263,"text":95055},{"id":95094,"depth":263,"text":95095},{"id":95167,"depth":263,"text":95168},{"id":95235,"depth":263,"text":95236},{"id":95287,"depth":263,"text":95288},{"id":95331,"depth":263,"text":95332},{"id":95410,"depth":263,"text":95411},{"id":95477,"depth":263,"text":95478},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94795,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95564,"title":95565,"body":95566,"description":25135,"extension":1880,"meta":96221,"navigation":721,"path":96222,"seo":96223,"stem":96224,"__hash__":96225},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95567,"toc":96209},[95568,95571,95575,95578,95794,95798,95801,96010,96014,96080,96085,96089,96092,96095,96133,96137,96140,96145,96149,96152,96155,96160,96164,96167,96171,96174,96177,96182,96186,96189,96192,96197,96201,96206],[10,95569,95565],{"id":95570},"_12其他常用函数",[14,95572,95574],{"id":95573},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,95576,95577],{},"将数组的数据按照行列复制扩展",[154,95579,95581],{"className":690,"code":95580,"language":692,"meta":160,"style":160},"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",[70,95582,95583,95599,95608,95612,95617,95622,95635,95639,95644,95649,95654,95658,95663,95687,95699,95703,95707,95712,95717,95722,95727,95731,95744,95748,95752,95757,95762,95767,95772,95777,95781,95785,95790],{"__ignoreMap":160},[178,95584,95585,95587,95589,95591,95593,95595,95597],{"class":180,"line":181},[178,95586,2178],{"class":319},[178,95588,330],{"class":699},[178,95590,94717],{"class":319},[178,95592,1665],{"class":195},[178,95594,2318],{"class":319},[178,95596,2259],{"class":195},[178,95598,863],{"class":319},[178,95600,95601,95604,95606],{"class":180,"line":263},[178,95602,95603],{"class":319},"np.tile(a,",[178,95605,1669],{"class":195},[178,95607,863],{"class":319},[178,95609,95610],{"class":180,"line":274},[178,95611,95279],{"class":2008},[178,95613,95614],{"class":180,"line":354},[178,95615,95616],{"class":2008},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[178,95618,95619],{"class":180,"line":364},[178,95620,95621],{"class":2008},"#行复制两次，列复制三次\n",[178,95623,95624,95627,95629,95631,95633],{"class":180,"line":740},[178,95625,95626],{"class":319},"np.tile(a,(",[178,95628,1669],{"class":195},[178,95630,2318],{"class":319},[178,95632,2021],{"class":195},[178,95634,32239],{"class":319},[178,95636,95637],{"class":180,"line":746},[178,95638,95279],{"class":2008},[178,95640,95641],{"class":180,"line":752},[178,95642,95643],{"class":188},"'''\n",[178,95645,95646],{"class":180,"line":757},[178,95647,95648],{"class":188},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[178,95650,95651],{"class":180,"line":763},[178,95652,95653],{"class":188},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[178,95655,95656],{"class":180,"line":769},[178,95657,95643],{"class":188},[178,95659,95660],{"class":180,"line":774},[178,95661,95662],{"class":2008},"#创建二维数组\n",[178,95664,95665,95667,95669,95671,95673,95675,95677,95679,95681,95683,95685],{"class":180,"line":780},[178,95666,95021],{"class":319},[178,95668,330],{"class":699},[178,95670,94717],{"class":319},[178,95672,1665],{"class":195},[178,95674,2318],{"class":319},[178,95676,2463],{"class":195},[178,95678,94722],{"class":319},[178,95680,2233],{"class":195},[178,95682,2318],{"class":319},[178,95684,2021],{"class":195},[178,95686,863],{"class":319},[178,95688,95689,95692,95694,95696],{"class":180,"line":786},[178,95690,95691],{"class":319},"np.tile(aa,",[178,95693,1669],{"class":195},[178,95695,2369],{"class":319},[178,95697,95698],{"class":2008},"#一个数的时候就是行\n",[178,95700,95701],{"class":180,"line":792},[178,95702,95279],{"class":2008},[178,95704,95705],{"class":180,"line":798},[178,95706,95643],{"class":188},[178,95708,95709],{"class":180,"line":804},[178,95710,95711],{"class":188},"array([[ 1,  2,  3,  1,  2,  3],\n",[178,95713,95714],{"class":180,"line":810},[178,95715,95716],{"class":188},"       [ 4,  5,  6,  4,  5,  6],\n",[178,95718,95719],{"class":180,"line":816},[178,95720,95721],{"class":188},"       [ 7,  8,  9,  7,  8,  9],\n",[178,95723,95724],{"class":180,"line":822},[178,95725,95726],{"class":188},"       [10, 11, 12, 10, 11, 12]])\n",[178,95728,95729],{"class":180,"line":827},[178,95730,95643],{"class":188},[178,95732,95733,95736,95738,95740,95742],{"class":180,"line":832},[178,95734,95735],{"class":319},"np.tile(aa,(",[178,95737,1669],{"class":195},[178,95739,2318],{"class":319},[178,95741,2021],{"class":195},[178,95743,32239],{"class":319},[178,95745,95746],{"class":180,"line":850},[178,95747,95279],{"class":2008},[178,95749,95750],{"class":180,"line":866},[178,95751,95643],{"class":188},[178,95753,95754],{"class":180,"line":877},[178,95755,95756],{"class":188},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[178,95758,95759],{"class":180,"line":882},[178,95760,95761],{"class":188},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[178,95763,95764],{"class":180,"line":898},[178,95765,95766],{"class":188},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[178,95768,95769],{"class":180,"line":914},[178,95770,95771],{"class":188},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[178,95773,95774],{"class":180,"line":919},[178,95775,95776],{"class":188},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[178,95778,95779],{"class":180,"line":935},[178,95780,95761],{"class":188},[178,95782,95783],{"class":180,"line":952},[178,95784,95766],{"class":188},[178,95786,95787],{"class":180,"line":966},[178,95788,95789],{"class":188},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[178,95791,95792],{"class":180,"line":980},[178,95793,95643],{"class":188},[14,95795,95797],{"id":95796},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,95799,95800],{},"repeat()将数组中的每个元素重复若干次",[154,95802,95804],{"className":690,"code":95803,"language":692,"meta":160,"style":160},"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",[70,95805,95806,95822,95831,95835,95840,95864,95869,95878,95882,95887,95891,95896,95912,95916,95920,95925,95930,95935,95939,95944,95948,95953,95958,95962,95978,95982,95986,95991,95996,96001,96006],{"__ignoreMap":160},[178,95807,95808,95810,95812,95814,95816,95818,95820],{"class":180,"line":181},[178,95809,2178],{"class":319},[178,95811,330],{"class":699},[178,95813,94717],{"class":319},[178,95815,1665],{"class":195},[178,95817,2318],{"class":319},[178,95819,2259],{"class":195},[178,95821,863],{"class":319},[178,95823,95824,95827,95829],{"class":180,"line":263},[178,95825,95826],{"class":319},"np.repeat(a,",[178,95828,2021],{"class":195},[178,95830,863],{"class":319},[178,95832,95833],{"class":180,"line":274},[178,95834,95279],{"class":2008},[178,95836,95837],{"class":180,"line":354},[178,95838,95839],{"class":2008},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[178,95841,95842,95844,95846,95848,95850,95852,95854,95856,95858,95860,95862],{"class":180,"line":364},[178,95843,95021],{"class":319},[178,95845,330],{"class":699},[178,95847,94717],{"class":319},[178,95849,1665],{"class":195},[178,95851,2318],{"class":319},[178,95853,2463],{"class":195},[178,95855,94722],{"class":319},[178,95857,2233],{"class":195},[178,95859,2318],{"class":319},[178,95861,2021],{"class":195},[178,95863,863],{"class":319},[178,95865,95866],{"class":180,"line":740},[178,95867,95868],{"class":2008},"#这个重复之后二维变成一维\n",[178,95870,95871,95874,95876],{"class":180,"line":746},[178,95872,95873],{"class":319},"np.repeat(aa,",[178,95875,1669],{"class":195},[178,95877,863],{"class":319},[178,95879,95880],{"class":180,"line":752},[178,95881,95643],{"class":188},[178,95883,95884],{"class":180,"line":757},[178,95885,95886],{"class":188},"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",[178,95888,95889],{"class":180,"line":763},[178,95890,95643],{"class":188},[178,95892,95893],{"class":180,"line":769},[178,95894,95895],{"class":2008},"#指定axis\n",[178,95897,95898,95900,95902,95904,95906,95908,95910],{"class":180,"line":774},[178,95899,95873],{"class":319},[178,95901,1669],{"class":195},[178,95903,2318],{"class":319},[178,95905,49246],{"class":6985},[178,95907,330],{"class":699},[178,95909,2133],{"class":195},[178,95911,863],{"class":319},[178,95913,95914],{"class":180,"line":780},[178,95915,95279],{"class":2008},[178,95917,95918],{"class":180,"line":786},[178,95919,95643],{"class":188},[178,95921,95922],{"class":180,"line":792},[178,95923,95924],{"class":188},"array([[ 1,  2,  3],\n",[178,95926,95927],{"class":180,"line":798},[178,95928,95929],{"class":188},"       [ 1,  2,  3],\n",[178,95931,95932],{"class":180,"line":804},[178,95933,95934],{"class":188},"       [ 4,  5,  6],\n",[178,95936,95937],{"class":180,"line":810},[178,95938,95934],{"class":188},[178,95940,95941],{"class":180,"line":816},[178,95942,95943],{"class":188},"       [ 7,  8,  9],\n",[178,95945,95946],{"class":180,"line":822},[178,95947,95943],{"class":188},[178,95949,95950],{"class":180,"line":827},[178,95951,95952],{"class":188},"       [10, 11, 12],\n",[178,95954,95955],{"class":180,"line":832},[178,95956,95957],{"class":188},"       [10, 11, 12]])\n",[178,95959,95960],{"class":180,"line":850},[178,95961,95643],{"class":188},[178,95963,95964,95966,95968,95970,95972,95974,95976],{"class":180,"line":866},[178,95965,95873],{"class":319},[178,95967,1669],{"class":195},[178,95969,2318],{"class":319},[178,95971,49246],{"class":6985},[178,95973,330],{"class":699},[178,95975,1665],{"class":195},[178,95977,863],{"class":319},[178,95979,95980],{"class":180,"line":877},[178,95981,95279],{"class":2008},[178,95983,95984],{"class":180,"line":882},[178,95985,95643],{"class":188},[178,95987,95988],{"class":180,"line":898},[178,95989,95990],{"class":188},"array([[ 1,  1,  2,  2,  3,  3],\n",[178,95992,95993],{"class":180,"line":914},[178,95994,95995],{"class":188},"       [ 4,  4,  5,  5,  6,  6],\n",[178,95997,95998],{"class":180,"line":919},[178,95999,96000],{"class":188},"       [ 7,  7,  8,  8,  9,  9],\n",[178,96002,96003],{"class":180,"line":935},[178,96004,96005],{"class":188},"       [10, 10, 11, 11, 12, 12]])\n",[178,96007,96008],{"class":180,"line":952},[178,96009,95643],{"class":188},[14,96011,96013],{"id":96012},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[154,96015,96017],{"className":690,"code":96016,"language":692,"meta":160,"style":160},"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",[70,96018,96019,96035,96040,96052,96056,96061,96071,96075],{"__ignoreMap":160},[178,96020,96021,96023,96025,96027,96029,96031,96033],{"class":180,"line":181},[178,96022,2178],{"class":319},[178,96024,330],{"class":699},[178,96026,94717],{"class":319},[178,96028,1665],{"class":195},[178,96030,2318],{"class":319},[178,96032,2259],{"class":195},[178,96034,863],{"class":319},[178,96036,96037],{"class":180,"line":263},[178,96038,96039],{"class":2008},"#array([，2，3，4])\n",[178,96041,96042,96045,96047,96049],{"class":180,"line":274},[178,96043,96044],{"class":319},"np.roll(a,",[178,96046,1669],{"class":195},[178,96048,2369],{"class":319},[178,96050,96051],{"class":2008},"#传正数向后调多少位，传负数向前调多少位\n",[178,96053,96054],{"class":180,"line":354},[178,96055,95279],{"class":2008},[178,96057,96058],{"class":180,"line":364},[178,96059,96060],{"class":2008},"#array([3, 4, 1, 2])\n",[178,96062,96063,96065,96067,96069],{"class":180,"line":740},[178,96064,96044],{"class":319},[178,96066,2472],{"class":699},[178,96068,1665],{"class":195},[178,96070,863],{"class":319},[178,96072,96073],{"class":180,"line":746},[178,96074,95279],{"class":2008},[178,96076,96077],{"class":180,"line":752},[178,96078,96079],{"class":2008},"#array([2, 3, 4, 1])\n",[19,96081,96082],{},[3269,96083],{"alt":160,"src":96084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96086,96088],{"id":96087},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,96090,96091],{},"resize()重新调整数组的大小",[19,96093,96094],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[154,96096,96098],{"className":690,"code":96097,"language":692,"meta":160,"style":160},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[70,96099,96100,96105,96118],{"__ignoreMap":160},[178,96101,96102],{"class":180,"line":181},[178,96103,96104],{"class":2008},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[178,96106,96107,96110,96112,96114,96116],{"class":180,"line":263},[178,96108,96109],{"class":319},"np.resize(aa,(",[178,96111,1669],{"class":195},[178,96113,2318],{"class":319},[178,96115,2284],{"class":195},[178,96117,32239],{"class":319},[178,96119,96120,96122,96124,96126,96128,96130],{"class":180,"line":274},[178,96121,96109],{"class":319},[178,96123,1669],{"class":195},[178,96125,2318],{"class":319},[178,96127,2360],{"class":195},[178,96129,84486],{"class":319},[178,96131,96132],{"class":2008},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96134,96136],{"id":96135},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,96138,96139],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,96141,96142],{},[3269,96143],{"alt":160,"src":96144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96146,96148],{"id":96147},"_126-保存加载文件","12.6 保存加载文件",[19,96150,96151],{},"savetxt():将数据保存到txt文件中",[19,96153,96154],{},"loadtxt():从文件加载数据",[19,96156,96157],{},[3269,96158],{"alt":160,"src":96159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96161,96163],{"id":96162},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,96165,96166],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96168,96170],{"id":96169},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,96172,96173],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,96175,96176],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,96178,96179],{},[3269,96180],{"alt":160,"src":96181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96183,96185],{"id":96184},"_129-where语句","12.9 where语句",[19,96187,96188],{},"np.where(条件,x,y)",[19,96190,96191],{},"如果条件为True,对应值为x,否则对应值为y",[19,96193,96194],{},[3269,96195],{"alt":160,"src":96196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96198,96200],{"id":96199},"_1210-dot矩阵","12.10 dot()矩阵",[19,96202,96203],{},[3269,96204],{"alt":160,"src":96205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[1853,96207,96208],{},"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":160,"searchDepth":263,"depth":263,"links":96210},[96211,96212,96213,96214,96215,96216,96217,96218,96219,96220],{"id":95573,"depth":263,"text":95574},{"id":95796,"depth":263,"text":95797},{"id":96012,"depth":263,"text":96013},{"id":96087,"depth":263,"text":96088},{"id":96135,"depth":263,"text":96136},{"id":96147,"depth":263,"text":96148},{"id":96162,"depth":263,"text":96163},{"id":96169,"depth":263,"text":96170},{"id":96184,"depth":263,"text":96185},{"id":96199,"depth":263,"text":96200},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95565,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96227,"title":96228,"body":96229,"description":25135,"extension":1880,"meta":96582,"navigation":721,"path":96583,"seo":96584,"stem":96585,"__hash__":96586},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96230,"toc":96580},[96231,96234,96237,96240,96243,96246,96311,96313,96577],[10,96232,96228],{"id":96233},"_13数组排序",[19,96235,96236],{},"排序主要用到的方法是np.sort和np.argsort",[19,96238,96239],{},"其中np.sort()对数组直接排序",[19,96241,96242],{},"而np.argsort()是返回排序后的原始索引",[19,96244,96245],{},"①一维数组",[154,96247,96249],{"className":690,"code":96248,"language":692,"meta":160,"style":160},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[70,96250,96251,96255,96295,96303],{"__ignoreMap":160},[178,96252,96253],{"class":180,"line":181},[178,96254,94820],{"class":2008},[178,96256,96257,96259,96261,96263,96265,96267,96269,96271,96273,96275,96277,96279,96281,96283,96285,96287,96289,96291,96293],{"class":180,"line":263},[178,96258,2178],{"class":319},[178,96260,330],{"class":699},[178,96262,94739],{"class":319},[178,96264,2021],{"class":195},[178,96266,2318],{"class":319},[178,96268,2438],{"class":195},[178,96270,2318],{"class":319},[178,96272,2335],{"class":195},[178,96274,2318],{"class":319},[178,96276,2715],{"class":195},[178,96278,2318],{"class":319},[178,96280,2219],{"class":195},[178,96282,2318],{"class":319},[178,96284,2833],{"class":195},[178,96286,2318],{"class":319},[178,96288,2284],{"class":195},[178,96290,2318],{"class":319},[178,96292,2386],{"class":195},[178,96294,6428],{"class":319},[178,96296,96297,96300],{"class":180,"line":274},[178,96298,96299],{"class":319},"np.sort(a)",[178,96301,96302],{"class":2008},"#升序排序\n",[178,96304,96305,96308],{"class":180,"line":354},[178,96306,96307],{"class":319},"np.argsort(a)",[178,96309,96310],{"class":2008},"#按照元素大小来索引排序\n",[19,96312,95006],{},[154,96314,96316],{"className":690,"code":96315,"language":692,"meta":160,"style":160},"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",[70,96317,96318,96330,96356,96361,96365,96370,96375,96380,96385,96389,96397,96401,96406,96411,96416,96421,96425,96430,96443,96447,96452,96457,96462,96467,96471,96476,96488,96492,96496,96500,96504,96508,96512,96517,96532,96537,96546,96551,96555,96559,96564,96568,96573],{"__ignoreMap":160},[178,96319,96320,96323,96325,96327],{"class":180,"line":181},[178,96321,96322],{"class":319},"np.random.seed(",[178,96324,2133],{"class":195},[178,96326,2369],{"class":319},[178,96328,96329],{"class":2008},"#保证每次值一样\n",[178,96331,96332,96334,96336,96338,96340,96342,96344,96346,96348,96350,96352,96354],{"class":180,"line":263},[178,96333,95021],{"class":319},[178,96335,330],{"class":699},[178,96337,94829],{"class":319},[178,96339,2251],{"class":195},[178,96341,2318],{"class":319},[178,96343,554],{"class":6985},[178,96345,330],{"class":699},[178,96347,944],{"class":319},[178,96349,2233],{"class":195},[178,96351,2318],{"class":319},[178,96353,2284],{"class":195},[178,96355,32239],{"class":319},[178,96357,96358],{"class":180,"line":274},[178,96359,96360],{"class":2008},"#原数组：\n",[178,96362,96363],{"class":180,"line":354},[178,96364,95643],{"class":188},[178,96366,96367],{"class":180,"line":364},[178,96368,96369],{"class":188},"array([[44, 47, 64, 67, 67,  9],\n",[178,96371,96372],{"class":180,"line":740},[178,96373,96374],{"class":188},"       [83, 21, 36, 87, 70, 88],\n",[178,96376,96377],{"class":180,"line":746},[178,96378,96379],{"class":188},"       [88, 12, 58, 65, 39, 87],\n",[178,96381,96382],{"class":180,"line":752},[178,96383,96384],{"class":188},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[178,96386,96387],{"class":180,"line":757},[178,96388,95643],{"class":188},[178,96390,96391,96394],{"class":180,"line":763},[178,96392,96393],{"class":319},"np.sort(aa)",[178,96395,96396],{"class":2008},"#每行进行了排序\n",[178,96398,96399],{"class":180,"line":769},[178,96400,95643],{"class":188},[178,96402,96403],{"class":180,"line":774},[178,96404,96405],{"class":188},"array([[ 9, 44, 47, 64, 67, 67],\n",[178,96407,96408],{"class":180,"line":780},[178,96409,96410],{"class":188},"       [21, 36, 70, 83, 87, 88],\n",[178,96412,96413],{"class":180,"line":786},[178,96414,96415],{"class":188},"       [12, 39, 58, 65, 87, 88],\n",[178,96417,96418],{"class":180,"line":792},[178,96419,96420],{"class":188},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[178,96422,96423],{"class":180,"line":798},[178,96424,95643],{"class":188},[178,96426,96427],{"class":180,"line":804},[178,96428,96429],{"class":2008},"#axis=0时\n",[178,96431,96432,96435,96437,96439,96441],{"class":180,"line":810},[178,96433,96434],{"class":319},"np.sort(aa,",[178,96436,49246],{"class":6985},[178,96438,330],{"class":699},[178,96440,2133],{"class":195},[178,96442,863],{"class":319},[178,96444,96445],{"class":180,"line":816},[178,96446,95643],{"class":188},[178,96448,96449],{"class":180,"line":822},[178,96450,96451],{"class":188},"array([[44, 12, 36, 37, 25,  9],\n",[178,96453,96454],{"class":180,"line":827},[178,96455,96456],{"class":188},"       [46, 21, 58, 65, 39, 77],\n",[178,96458,96459],{"class":180,"line":832},[178,96460,96461],{"class":188},"       [83, 47, 64, 67, 67, 87],\n",[178,96463,96464],{"class":180,"line":850},[178,96465,96466],{"class":188},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[178,96468,96469],{"class":180,"line":866},[178,96470,95643],{"class":188},[178,96472,96473],{"class":180,"line":877},[178,96474,96475],{"class":2008},"#axis=1时,为默认值\n",[178,96477,96478,96480,96482,96484,96486],{"class":180,"line":882},[178,96479,96434],{"class":319},[178,96481,49246],{"class":6985},[178,96483,330],{"class":699},[178,96485,1665],{"class":195},[178,96487,863],{"class":319},[178,96489,96490],{"class":180,"line":898},[178,96491,95643],{"class":188},[178,96493,96494],{"class":180,"line":914},[178,96495,96405],{"class":188},[178,96497,96498],{"class":180,"line":919},[178,96499,96410],{"class":188},[178,96501,96502],{"class":180,"line":935},[178,96503,96415],{"class":188},[178,96505,96506],{"class":180,"line":952},[178,96507,96420],{"class":188},[178,96509,96510],{"class":180,"line":966},[178,96511,95643],{"class":188},[178,96513,96514],{"class":180,"line":980},[178,96515,96516],{"class":2008},"#按最后一列排序\n",[178,96518,96519,96521,96523,96526,96528,96530],{"class":180,"line":985},[178,96520,2203],{"class":319},[178,96522,330],{"class":699},[178,96524,96525],{"class":319},"aa[:,",[178,96527,2472],{"class":699},[178,96529,1665],{"class":195},[178,96531,34978],{"class":319},[178,96533,96534],{"class":180,"line":1008},[178,96535,96536],{"class":2008},"#获取最后一列排好序的索引\n",[178,96538,96539,96541,96543],{"class":180,"line":1014},[178,96540,75778],{"class":319},[178,96542,330],{"class":699},[178,96544,96545],{"class":319},"np.argsort(b)\n",[178,96547,96548],{"class":180,"line":1019},[178,96549,96550],{"class":319},"aa[index]\n",[178,96552,96553],{"class":180,"line":1033},[178,96554,95643],{"class":188},[178,96556,96557],{"class":180,"line":1046},[178,96558,96369],{"class":188},[178,96560,96561],{"class":180,"line":1059},[178,96562,96563],{"class":188},"       [46, 88, 81, 37, 25, 77],\n",[178,96565,96566],{"class":180,"line":1072},[178,96567,96379],{"class":188},[178,96569,96570],{"class":180,"line":1077},[178,96571,96572],{"class":188},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[178,96574,96575],{"class":180,"line":1082},[178,96576,95643],{"class":188},[1853,96578,96579],{},"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":160,"searchDepth":263,"depth":263,"links":96581},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96228,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96588,"title":96589,"body":96590,"description":25135,"extension":1880,"meta":96620,"navigation":721,"path":96621,"seo":96622,"stem":96623,"__hash__":96624},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96591,"toc":96618},[96592,96595,96598,96601,96604,96607,96610,96613],[10,96593,96589],{"id":96594},"_14广播机制",[19,96596,96597],{},"广播的规则：",[19,96599,96600],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,96602,96603],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,96605,96606],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,96608,96609],{},"3.如果没有维度形状为1，则会引发异常",[19,96611,96612],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,96614,96615],{},[3269,96616],{"alt":160,"src":96617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":160,"searchDepth":263,"depth":263,"links":96619},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96589,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96626,"title":96627,"body":96628,"description":25135,"extension":1880,"meta":96726,"navigation":721,"path":96727,"seo":96728,"stem":96729,"__hash__":96730},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96629,"toc":96724},[96630,96633,96636,96721],[10,96631,96627],{"id":96632},"_15比较掩码",[19,96634,96635],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[154,96637,96639],{"className":690,"code":96638,"language":692,"meta":160,"style":160},"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",[70,96640,96641,96687,96698,96712,96716],{"__ignoreMap":160},[178,96642,96643,96645,96647,96650,96652,96654,96656,96658,96660,96662,96664,96666,96668,96670,96672,96674,96676,96678,96680,96682,96684],{"class":180,"line":181},[178,96644,2178],{"class":319},[178,96646,330],{"class":699},[178,96648,96649],{"class":319},"np.array([[",[178,96651,1665],{"class":195},[178,96653,2318],{"class":319},[178,96655,1669],{"class":195},[178,96657,2318],{"class":319},[178,96659,2021],{"class":195},[178,96661,49762],{"class":319},[178,96663,2412],{"class":195},[178,96665,2318],{"class":319},[178,96667,2438],{"class":195},[178,96669,2318],{"class":319},[178,96671,2463],{"class":195},[178,96673,49762],{"class":319},[178,96675,2665],{"class":195},[178,96677,2318],{"class":319},[178,96679,2690],{"class":195},[178,96681,2318],{"class":319},[178,96683,2715],{"class":195},[178,96685,96686],{"class":319},"]])\n",[178,96688,96689,96691,96693,96695],{"class":180,"line":263},[178,96690,2178],{"class":319},[178,96692,320],{"class":699},[178,96694,2640],{"class":195},[178,96696,96697],{"class":2008},"#结果是一个由True,False组成的数组\n",[178,96699,96700,96703,96705,96707,96709],{"class":180,"line":274},[178,96701,96702],{"class":319},"a[a",[178,96704,320],{"class":699},[178,96706,2640],{"class":195},[178,96708,2879],{"class":319},[178,96710,96711],{"class":2008},"#小于20的元素会存到这个数组中\n",[178,96713,96714],{"class":180,"line":354},[178,96715,95279],{"class":2008},[178,96717,96718],{"class":180,"line":364},[178,96719,96720],{"class":2008},"#array([ 1,  2,  3, 11, 12, 13])\n",[1853,96722,96723],{},"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":160,"searchDepth":263,"depth":263,"links":96725},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96627,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96732,"title":96733,"body":96734,"description":25135,"extension":1880,"meta":96826,"navigation":721,"path":96827,"seo":96828,"stem":96829,"__hash__":96830},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96735,"toc":96824},[96736,96739,96742,96745,96748,96751,96816,96821],[10,96737,96733],{"id":96738},"_16魔法命令time",[19,96740,96741],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,96743,96744],{},"%:行模式",[19,96746,96747],{},"%%:单元格模式",[19,96749,96750],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[154,96752,96754],{"className":690,"code":96753,"language":692,"meta":160,"style":160},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[70,96755,96756,96761,96768,96773,96782,96795,96799,96807],{"__ignoreMap":160},[178,96757,96758],{"class":180,"line":181},[178,96759,96760],{"class":2008},"#程序执行时间\n",[178,96762,96763,96765],{"class":180,"line":263},[178,96764,700],{"class":699},[178,96766,96767],{"class":319}," time \n",[178,96769,96770],{"class":180,"line":274},[178,96771,96772],{"class":2008},"#获取时间\n",[178,96774,96775,96778,96780],{"class":180,"line":354},[178,96776,96777],{"class":319},"start",[178,96779,330],{"class":699},[178,96781,34151],{"class":319},[178,96783,96784,96787,96790,96792],{"class":180,"line":364},[178,96785,96786],{"class":319},"time.sleep(",[178,96788,96789],{"class":195},"0.4",[178,96791,2369],{"class":319},[178,96793,96794],{"class":2008},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[178,96796,96797],{"class":180,"line":740},[178,96798,96772],{"class":2008},[178,96800,96801,96803,96805],{"class":180,"line":746},[178,96802,47533],{"class":319},[178,96804,330],{"class":699},[178,96806,34151],{"class":319},[178,96808,96809,96811,96813],{"class":180,"line":752},[178,96810,47533],{"class":319},[178,96812,2472],{"class":699},[178,96814,96815],{"class":319},"start\n",[19,96817,96818],{},[3269,96819],{"alt":160,"src":96820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[1853,96822,96823],{},"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":160,"searchDepth":263,"depth":263,"links":96825},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96733,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":96832,"title":96833,"body":96834,"description":25135,"extension":1880,"meta":96869,"navigation":721,"path":96870,"seo":96871,"stem":96872,"__hash__":96873},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":96835,"toc":96867},[96836,96839,96842,96845,96848,96851,96854,96857,96862],[10,96837,96833],{"id":96838},"_17魔法命令timeit",[19,96840,96841],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,96843,96844],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,96846,96847],{},"单元格模式：",[19,96849,96850],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,96852,96853],{},"初始化语句执行次数由轮数来决定",[19,96855,96856],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,96858,96859],{},[3269,96860],{"alt":160,"src":96861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,96863,96864],{},[3269,96865],{"alt":160,"src":96866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":160,"searchDepth":263,"depth":263,"links":96868},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":96833,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":96875,"title":96876,"body":96877,"description":25135,"extension":1880,"meta":96895,"navigation":721,"path":96896,"seo":96897,"stem":96898,"__hash__":96899},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":96878,"toc":96893},[96879,96882,96885,96888],[10,96880,96876],{"id":96881},"_18魔法命令writefile和run",[19,96883,96884],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,96886,96887],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,96889,96890],{},[3269,96891],{"alt":160,"src":96892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":160,"searchDepth":263,"depth":263,"links":96894},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":96876,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":96901,"title":96902,"body":96903,"description":25135,"extension":1880,"meta":96956,"navigation":721,"path":96957,"seo":96958,"stem":96959,"__hash__":96960},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":96904,"toc":96954},[96905,96908,96911,96913,96916,96919,96924,96927,96930,96933,96936,96939,96942,96945,96948,96951],[10,96906,96902],{"id":96907},"_19魔法命令memit",[19,96909,96910],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,96912,26353],{},[19,96914,96915],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,96917,96918],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,96920,96921],{},[3269,96922],{"alt":160,"src":96923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,96925,96926],{},"补充：",[19,96928,96929],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,96931,96932],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,96934,96935],{},"解决方法：",[19,96937,96938],{},"1.cmd",[19,96940,96941],{},"2.依次输入以下代码：",[19,96943,96944],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,96946,96947],{},"pip install --upgrade ipython",[19,96949,96950],{},"#升级 memory_profiler 和 setuptools",[19,96952,96953],{},"pip install --upgrade memory_profiler setuptools",{"title":160,"searchDepth":263,"depth":263,"links":96955},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":96902,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":96962,"title":96963,"body":96964,"description":25135,"extension":1880,"meta":98608,"navigation":721,"path":98609,"seo":98610,"stem":98611,"__hash__":98612},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":96965,"toc":98578},[96966,96969,96973,96977,97038,97041,97046,97050,97055,97060,97065,97070,97073,97078,97082,97086,97119,97122,97125,97128,97180,97183,97219,97222,97264,97268,97289,97291,97328,97330,97335,97337,97342,97346,97349,97377,97381,97385,97436,97440,97532,97536,97540,97543,97548,97552,97577,97582,97586,97589,97592,97595,97598,97601,97604,97607,97619,97623,97627,97630,97662,97665,97688,97691,97717,97720,97746,97749,97783,97786,97848,97852,97855,97859,97862,97888,97891,97894,97899,97902,97971,97973,97978,98039,98042,98053,98059,98064,98068,98071,98084,98088,98103,98105,98128,98130,98156,98159,98162,98165,98213,98215,98220,98224,98228,98255,98259,98286,98289,98294,98299,98389,98393,98451,98456,98459,98462,98504,98508,98564,98569,98572,98575],[10,96967,96963],{"id":96968},"_2创建数组",[14,96970,96972],{"id":96971},"_21-array函数创建数组","2.1 array()函数创建数组",[387,96974,96976],{"id":96975},"_221-函数语句","2.2.1 函数语句",[154,96978,96980],{"className":690,"code":96979,"language":692,"meta":160,"style":160},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[70,96981,96982],{"__ignoreMap":160},[178,96983,96984,96987,96990,96992,96994,96996,96998,97000,97003,97005,97008,97010,97013,97015,97017,97019,97022,97024,97027,97029,97032,97034,97036],{"class":180,"line":181},[178,96985,96986],{"class":319},"numpy.array(",[178,96988,96989],{"class":195},"object",[178,96991,14196],{"class":319},[178,96993,95215],{"class":6985},[178,96995,734],{"class":699},[178,96997,40665],{"class":195},[178,96999,14196],{"class":319},[178,97001,97002],{"class":6985},"copy",[178,97004,734],{"class":699},[178,97006,97007],{"class":195}," True",[178,97009,14196],{"class":319},[178,97011,97012],{"class":6985},"order",[178,97014,734],{"class":699},[178,97016,40665],{"class":195},[178,97018,14196],{"class":319},[178,97020,97021],{"class":6985},"subok",[178,97023,734],{"class":699},[178,97025,97026],{"class":195}," False",[178,97028,14196],{"class":319},[178,97030,97031],{"class":6985},"ndmin",[178,97033,734],{"class":699},[178,97035,930],{"class":195},[178,97037,863],{"class":319},[19,97039,97040],{},"参数：",[19,97042,97043],{},[3269,97044],{"alt":160,"src":97045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[387,97047,97049],{"id":97048},"_222-实例","2.2.2 实例",[19,97051,97052],{},[3269,97053],{"alt":160,"src":97054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,97056,97057],{},[3269,97058],{"alt":160,"src":97059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,97061,97062],{},[3269,97063],{"alt":160,"src":97064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,97066,97067],{},[3269,97068],{"alt":160,"src":97069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,97071,97072],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,97074,97075],{},[3269,97076],{"alt":160,"src":97077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97079,97081],{"id":97080},"_22-随机数创建数组","2.2 随机数创建数组",[387,97083,97085],{"id":97084},"_221-random语句","2.2.1 random语句",[154,97087,97089],{"className":690,"code":97088,"language":692,"meta":160,"style":160},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[70,97090,97091,97096,97101,97109,97114],{"__ignoreMap":160},[178,97092,97093],{"class":180,"line":181},[178,97094,97095],{"class":2008},"#random.random()\n",[178,97097,97098],{"class":180,"line":263},[178,97099,97100],{"class":2008},"#确定随机种子,就是每次运行结果是相同的\n",[178,97102,97103,97105,97107],{"class":180,"line":274},[178,97104,96322],{"class":319},[178,97106,2133],{"class":195},[178,97108,863],{"class":319},[178,97110,97111],{"class":180,"line":354},[178,97112,97113],{"class":319},"np.random.random()\n",[178,97115,97116],{"class":180,"line":364},[178,97117,97118],{"class":2008},"#生成一个随机的数目\n",[19,97120,97121],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,97123,97124],{},"可以指定数组形状 size",[19,97126,97127],{},"①生成一维数组",[154,97129,97131],{"className":690,"code":97130,"language":692,"meta":160,"style":160},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[70,97132,97133,97138,97151,97156,97172],{"__ignoreMap":160},[178,97134,97135],{"class":180,"line":181},[178,97136,97137],{"class":2008},"#random.random(size())\n",[178,97139,97140,97143,97145,97147,97149],{"class":180,"line":263},[178,97141,97142],{"class":319},"np.random.random(",[178,97144,554],{"class":6985},[178,97146,330],{"class":699},[178,97148,2259],{"class":195},[178,97150,863],{"class":319},[178,97152,97153],{"class":180,"line":274},[178,97154,97155],{"class":2008},"#生成一位的五个元素\n",[178,97157,97158,97160,97162,97164,97166,97168,97170],{"class":180,"line":354},[178,97159,2178],{"class":319},[178,97161,330],{"class":699},[178,97163,97142],{"class":319},[178,97165,554],{"class":6985},[178,97167,330],{"class":699},[178,97169,2233],{"class":195},[178,97171,863],{"class":319},[178,97173,97174,97177],{"class":180,"line":364},[178,97175,97176],{"class":319},"a.shape ",[178,97178,97179],{"class":2008},"#输出数组形状\n",[19,97181,97182],{},"②生成二维数组",[154,97184,97186],{"className":690,"code":97185,"language":692,"meta":160,"style":160},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[70,97187,97188,97192,97214],{"__ignoreMap":160},[178,97189,97190],{"class":180,"line":181},[178,97191,95016],{"class":2008},[178,97193,97194,97196,97198,97200,97202,97204,97206,97208,97210,97212],{"class":180,"line":263},[178,97195,95021],{"class":319},[178,97197,330],{"class":699},[178,97199,97142],{"class":319},[178,97201,554],{"class":6985},[178,97203,330],{"class":699},[178,97205,944],{"class":319},[178,97207,2233],{"class":195},[178,97209,2318],{"class":319},[178,97211,2259],{"class":195},[178,97213,32239],{"class":319},[178,97215,97216],{"class":180,"line":274},[178,97217,97218],{"class":2008},"#生成四行五列的数组\n",[19,97220,97221],{},"③生成三维数组",[154,97223,97225],{"className":690,"code":97224,"language":692,"meta":160,"style":160},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[70,97226,97227,97232,97259],{"__ignoreMap":160},[178,97228,97229],{"class":180,"line":181},[178,97230,97231],{"class":2008},"#三维数组\n",[178,97233,97234,97237,97239,97241,97243,97245,97247,97249,97251,97253,97255,97257],{"class":180,"line":263},[178,97235,97236],{"class":319},"aaa",[178,97238,330],{"class":699},[178,97240,97142],{"class":319},[178,97242,554],{"class":6985},[178,97244,330],{"class":699},[178,97246,944],{"class":319},[178,97248,1669],{"class":195},[178,97250,2318],{"class":319},[178,97252,2021],{"class":195},[178,97254,2318],{"class":319},[178,97256,2233],{"class":195},[178,97258,32239],{"class":319},[178,97260,97261],{"class":180,"line":274},[178,97262,97263],{"class":319},"aaa.shape\n",[387,97265,97267],{"id":97266},"_222-randint语句","2.2.2 randint语句",[154,97269,97271],{"className":690,"code":97270,"language":692,"meta":160,"style":160},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[70,97272,97273,97278],{"__ignoreMap":160},[178,97274,97275],{"class":180,"line":181},[178,97276,97277],{"class":2008},"#生成随机的整数 random.randint(low,high,size)\n",[178,97279,97280,97282,97284,97286],{"class":180,"line":263},[178,97281,94829],{"class":319},[178,97283,2259],{"class":195},[178,97285,15474],{"class":319},[178,97287,97288],{"class":2008},"#0~5中的随机一个数\n",[19,97290,97127],{},[154,97292,97294],{"className":690,"code":97293,"language":692,"meta":160,"style":160},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[70,97295,97296,97301,97323],{"__ignoreMap":160},[178,97297,97298],{"class":180,"line":181},[178,97299,97300],{"class":2008},"#一维\n",[178,97302,97303,97305,97307,97309,97311,97313,97315,97317,97319,97321],{"class":180,"line":263},[178,97304,94829],{"class":319},[178,97306,1665],{"class":195},[178,97308,2318],{"class":319},[178,97310,2412],{"class":195},[178,97312,2318],{"class":319},[178,97314,554],{"class":6985},[178,97316,330],{"class":699},[178,97318,944],{"class":319},[178,97320,2386],{"class":195},[178,97322,32239],{"class":319},[178,97324,97325],{"class":180,"line":274},[178,97326,97327],{"class":2008},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,97329,97182],{},[19,97331,97332],{},[3269,97333],{"alt":160,"src":97334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,97336,97221],{},[19,97338,97339],{},[3269,97340],{"alt":160,"src":97341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[387,97343,97345],{"id":97344},"_222-rand语句","2.2.2 rand语句",[19,97347,97348],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[154,97350,97352],{"className":690,"code":97351,"language":692,"meta":160,"style":160},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[70,97353,97354,97367,97372],{"__ignoreMap":160},[178,97355,97356,97359,97361,97363,97365],{"class":180,"line":181},[178,97357,97358],{"class":319},"np.random.rand(",[178,97360,2251],{"class":195},[178,97362,2318],{"class":319},[178,97364,2386],{"class":195},[178,97366,863],{"class":319},[178,97368,97369],{"class":180,"line":263},[178,97370,97371],{"class":2008},"#第一个参数100：行数，表示有100个样本\n",[178,97373,97374],{"class":180,"line":274},[178,97375,97376],{"class":2008},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,97378,97380],{"id":97379},"_23-arange创建数组","2.3 arange()创建数组",[387,97382,97384],{"id":97383},"_231-函数语句","2.3.1 函数语句",[154,97386,97388],{"className":690,"code":97387,"language":692,"meta":160,"style":160},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[70,97389,97390,97403,97408,97412,97417,97422,97427,97432],{"__ignoreMap":160},[178,97391,97392,97395,97397,97399,97401],{"class":180,"line":181},[178,97393,97394],{"class":319},"numpy.arange([start,] stop[, step], ",[178,97396,95215],{"class":6985},[178,97398,330],{"class":699},[178,97400,844],{"class":195},[178,97402,863],{"class":319},[178,97404,97405],{"class":180,"line":263},[178,97406,97407],{"class":2008},"#参数\n",[178,97409,97410],{"class":180,"line":274},[178,97411,819],{"class":188},[178,97413,97414],{"class":180,"line":354},[178,97415,97416],{"class":188},"start:起始值，可选，默认从 0 开始。\n",[178,97418,97419],{"class":180,"line":364},[178,97420,97421],{"class":188},"stop:结束值（不包含该值）。\n",[178,97423,97424],{"class":180,"line":740},[178,97425,97426],{"class":188},"step:步长，可选，默认是 1。可以为浮点数。\n",[178,97428,97429],{"class":180,"line":746},[178,97430,97431],{"class":188},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[178,97433,97434],{"class":180,"line":752},[178,97435,819],{"class":188},[387,97437,97439],{"id":97438},"_232-实例","2.3.2 实例",[154,97441,97443],{"className":690,"code":97442,"language":692,"meta":160,"style":160},"#创建一维数组\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",[70,97444,97445,97449,97473,97478,97483,97487,97510,97514,97518,97523,97528],{"__ignoreMap":160},[178,97446,97447],{"class":180,"line":181},[178,97448,94820],{"class":2008},[178,97450,97451,97453,97455,97457,97459,97461,97463,97465,97467,97469,97471],{"class":180,"line":263},[178,97452,94717],{"class":319},[178,97454,1665],{"class":195},[178,97456,2318],{"class":319},[178,97458,2665],{"class":195},[178,97460,2318],{"class":319},[178,97462,1665],{"class":195},[178,97464,2318],{"class":319},[178,97466,95215],{"class":6985},[178,97468,330],{"class":699},[178,97470,1956],{"class":195},[178,97472,863],{"class":319},[178,97474,97475],{"class":180,"line":274},[178,97476,97477],{"class":2008},"#输出结果：\n",[178,97479,97480],{"class":180,"line":354},[178,97481,97482],{"class":2008},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[178,97484,97485],{"class":180,"line":364},[178,97486,95662],{"class":2008},[178,97488,97489,97492,97494,97496,97498,97501,97503,97505,97507],{"class":180,"line":740},[178,97490,97491],{"class":319},"np.array([np.arange(",[178,97493,1665],{"class":195},[178,97495,2318],{"class":319},[178,97497,2233],{"class":195},[178,97499,97500],{"class":319},"),np.arange(",[178,97502,2233],{"class":195},[178,97504,2318],{"class":319},[178,97506,2309],{"class":195},[178,97508,97509],{"class":319},")])\n",[178,97511,97512],{"class":180,"line":746},[178,97513,95279],{"class":2008},[178,97515,97516],{"class":180,"line":752},[178,97517,819],{"class":188},[178,97519,97520],{"class":180,"line":757},[178,97521,97522],{"class":188},"array([[1, 2, 3],\n",[178,97524,97525],{"class":180,"line":763},[178,97526,97527],{"class":188},"       [4, 5, 6]])\n",[178,97529,97530],{"class":180,"line":769},[178,97531,819],{"class":188},[14,97533,97535],{"id":97534},"_24-生态分布","2.4 生态分布",[387,97537,97539],{"id":97538},"_241-标准正态分布","2.4.1 标准正态分布",[19,97541,97542],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,97544,97545],{},[3269,97546],{"alt":160,"src":97547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[387,97549,97551],{"id":97550},"_242-常规正态分布","2.4.2 常规正态分布",[154,97553,97555],{"className":690,"code":97554,"language":692,"meta":160,"style":160},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[70,97556,97557,97562,97567,97572],{"__ignoreMap":160},[178,97558,97559],{"class":180,"line":181},[178,97560,97561],{"class":319},"random.normal(loc,scale,size)也可以生成正态分布\n",[178,97563,97564],{"class":180,"line":263},[178,97565,97566],{"class":2008},"#loc:期望\n",[178,97568,97569],{"class":180,"line":274},[178,97570,97571],{"class":2008},"#scale:方差\n",[178,97573,97574],{"class":180,"line":354},[178,97575,97576],{"class":2008},"#size:用于确定是几维的数列\n",[19,97578,97579],{},[3269,97580],{"alt":160,"src":97581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97583,97585],{"id":97584},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,97587,97588],{},"ndim:秩，维度个数",[19,97590,97591],{},"size:数组元素的个数",[19,97593,97594],{},"shape:数组的形状",[19,97596,97597],{},"dtype:数组元素的类型",[19,97599,97600],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,97602,97603],{},"他们都是属性，通过数组.属性的形式来确定",[19,97605,97606],{},"如果需要输出多个可以通过以下方式：",[154,97608,97610],{"className":690,"code":97609,"language":692,"meta":160,"style":160},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[70,97611,97612],{"__ignoreMap":160},[178,97613,97614,97616],{"class":180,"line":181},[178,97615,1504],{"class":195},[178,97617,97618],{"class":319},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97620,97622],{"id":97621},"_26-其他方式创建数组","2.6 其他方式创建数组",[387,97624,97626],{"id":97625},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,97628,97629],{},"①创建一维数组",[154,97631,97633],{"className":690,"code":97632,"language":692,"meta":160,"style":160},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[70,97634,97635,97644,97648,97653,97658],{"__ignoreMap":160},[178,97636,97637,97640,97642],{"class":180,"line":181},[178,97638,97639],{"class":319},"np.zeros(",[178,97641,2386],{"class":195},[178,97643,863],{"class":319},[178,97645,97646],{"class":180,"line":263},[178,97647,819],{"class":188},[178,97649,97650],{"class":180,"line":274},[178,97651,97652],{"class":188},"输出结果：\n",[178,97654,97655],{"class":180,"line":354},[178,97656,97657],{"class":188},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[178,97659,97660],{"class":180,"line":364},[178,97661,819],{"class":188},[19,97663,97664],{},"上方代码等价于：",[154,97666,97668],{"className":690,"code":97667,"language":692,"meta":160,"style":160},"np.zeros(shape=(10))#创建10个元素的0数组\n",[70,97669,97670],{"__ignoreMap":160},[178,97671,97672,97674,97677,97679,97681,97683,97685],{"class":180,"line":181},[178,97673,97639],{"class":319},[178,97675,97676],{"class":6985},"shape",[178,97678,330],{"class":699},[178,97680,944],{"class":319},[178,97682,2386],{"class":195},[178,97684,84486],{"class":319},[178,97686,97687],{"class":2008},"#创建10个元素的0数组\n",[19,97689,97690],{},"也可以指定类型",[154,97692,97694],{"className":690,"code":97693,"language":692,"meta":160,"style":160},"#指定类型\nnp.zeros(5,dtype=int)\n",[70,97695,97696,97701],{"__ignoreMap":160},[178,97697,97698],{"class":180,"line":181},[178,97699,97700],{"class":2008},"#指定类型\n",[178,97702,97703,97705,97707,97709,97711,97713,97715],{"class":180,"line":263},[178,97704,97639],{"class":319},[178,97706,2259],{"class":195},[178,97708,2318],{"class":319},[178,97710,95215],{"class":6985},[178,97712,330],{"class":699},[178,97714,1956],{"class":195},[178,97716,863],{"class":319},[19,97718,97719],{},"②创建二维数组",[154,97721,97723],{"className":690,"code":97722,"language":692,"meta":160,"style":160},"np.zeros((3,4),dtype=int)\n",[70,97724,97725],{"__ignoreMap":160},[178,97726,97727,97730,97732,97734,97736,97738,97740,97742,97744],{"class":180,"line":181},[178,97728,97729],{"class":319},"np.zeros((",[178,97731,2021],{"class":195},[178,97733,2318],{"class":319},[178,97735,2233],{"class":195},[178,97737,43988],{"class":319},[178,97739,95215],{"class":6985},[178,97741,330],{"class":699},[178,97743,1956],{"class":195},[178,97745,863],{"class":319},[19,97747,97748],{},"③创建三维数组",[154,97750,97752],{"className":690,"code":97751,"language":692,"meta":160,"style":160},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[70,97753,97754,97759],{"__ignoreMap":160},[178,97755,97756],{"class":180,"line":181},[178,97757,97758],{"class":2008},"#创建三维数组\n",[178,97760,97761,97763,97765,97767,97769,97771,97773,97775,97777,97779,97781],{"class":180,"line":263},[178,97762,97729],{"class":319},[178,97764,2021],{"class":195},[178,97766,2318],{"class":319},[178,97768,2233],{"class":195},[178,97770,2318],{"class":319},[178,97772,2259],{"class":195},[178,97774,43988],{"class":319},[178,97776,95215],{"class":6985},[178,97778,330],{"class":699},[178,97780,1956],{"class":195},[178,97782,863],{"class":319},[19,97784,97785],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[154,97787,97789],{"className":690,"code":97788,"language":692,"meta":160,"style":160},"#使用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",[70,97790,97791,97796,97811,97816,97821,97843],{"__ignoreMap":160},[178,97792,97793],{"class":180,"line":181},[178,97794,97795],{"class":2008},"#使用zeros_like将创建的一维数组变成全0的数组\n",[178,97797,97798,97800,97802,97804,97806,97808],{"class":180,"line":263},[178,97799,2178],{"class":319},[178,97801,330],{"class":699},[178,97803,94717],{"class":319},[178,97805,2233],{"class":195},[178,97807,2369],{"class":319},[178,97809,97810],{"class":2008},"#这个得到的结果：一维数组0，1，2，3\n",[178,97812,97813],{"class":180,"line":274},[178,97814,97815],{"class":319},"np.zeros_like(a)\n",[178,97817,97818],{"class":180,"line":354},[178,97819,97820],{"class":2008},"#使用zeros_like将创建的二维数组变成全0的数组\n",[178,97822,97823,97825,97827,97829,97831,97833,97835,97837,97839,97841],{"class":180,"line":364},[178,97824,95021],{"class":319},[178,97826,330],{"class":699},[178,97828,97142],{"class":319},[178,97830,554],{"class":6985},[178,97832,330],{"class":699},[178,97834,944],{"class":319},[178,97836,2233],{"class":195},[178,97838,2318],{"class":319},[178,97840,2259],{"class":195},[178,97842,32239],{"class":319},[178,97844,97845],{"class":180,"line":740},[178,97846,97847],{"class":319},"np.zeros_like(aa)\n",[387,97849,97851],{"id":97850},"_262-ones创建数组","2.6.2 ones()创建数组",[19,97853,97854],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[387,97856,97858],{"id":97857},"_263-empty创建数组","2.6.3 empty()创建数组",[19,97860,97861],{},"①empty()用法",[154,97863,97865],{"className":690,"code":97864,"language":692,"meta":160,"style":160},"numpy.empty(shape,dtype=float,order='c')\n",[70,97866,97867],{"__ignoreMap":160},[178,97868,97869,97872,97874,97876,97878,97880,97882,97884,97886],{"class":180,"line":181},[178,97870,97871],{"class":319},"numpy.empty(shape,",[178,97873,95215],{"class":6985},[178,97875,330],{"class":699},[178,97877,1991],{"class":195},[178,97879,2318],{"class":319},[178,97881,97012],{"class":6985},[178,97883,330],{"class":699},[178,97885,77748],{"class":188},[178,97887,863],{"class":319},[19,97889,97890],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,97892,97893],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,97895,97896],{},[3269,97897],{"alt":160,"src":97898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,97900,97901],{},"②empty()用法",[154,97903,97905],{"className":690,"code":97904,"language":692,"meta":160,"style":160},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[70,97906,97907,97928,97940,97961,97966],{"__ignoreMap":160},[178,97908,97909,97911,97913,97916,97918,97920,97922,97924,97926],{"class":180,"line":181},[178,97910,2785],{"class":319},[178,97912,330],{"class":699},[178,97914,97915],{"class":319},"np.empty(",[178,97917,2386],{"class":195},[178,97919,2318],{"class":319},[178,97921,95215],{"class":6985},[178,97923,330],{"class":699},[178,97925,1956],{"class":195},[178,97927,863],{"class":319},[178,97929,97930,97932,97934,97936,97938],{"class":180,"line":263},[178,97931,2760],{"class":319},[178,97933,330],{"class":699},[178,97935,94717],{"class":319},[178,97937,2259],{"class":195},[178,97939,863],{"class":319},[178,97941,97942,97945,97947,97950,97952,97954,97957,97959],{"class":180,"line":274},[178,97943,97944],{"class":319},"np.add(",[178,97946,1669],{"class":195},[178,97948,97949],{"class":319},",x,",[178,97951,94769],{"class":6985},[178,97953,330],{"class":699},[178,97955,97956],{"class":319},"y[:",[178,97958,2259],{"class":195},[178,97960,6428],{"class":319},[178,97962,97963],{"class":180,"line":354},[178,97964,97965],{"class":2008},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[178,97967,97968],{"class":180,"line":364},[178,97969,97970],{"class":319},"y\n",[19,97972,13275],{},[19,97974,97975],{},[3269,97976],{"alt":160,"src":97977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[154,97979,97981],{"className":690,"code":97980,"language":692,"meta":160,"style":160},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[70,97982,97983,97999,98019,98034],{"__ignoreMap":160},[178,97984,97985,97987,97989,97991,97993,97995,97997],{"class":180,"line":181},[178,97986,2760],{"class":319},[178,97988,330],{"class":699},[178,97990,94717],{"class":319},[178,97992,1665],{"class":195},[178,97994,2318],{"class":319},[178,97996,2284],{"class":195},[178,97998,863],{"class":319},[178,98000,98001,98003,98005,98007,98009,98011,98013,98015,98017],{"class":180,"line":263},[178,98002,2785],{"class":319},[178,98004,330],{"class":699},[178,98006,97915],{"class":319},[178,98008,2259],{"class":195},[178,98010,2318],{"class":319},[178,98012,95215],{"class":6985},[178,98014,330],{"class":699},[178,98016,1956],{"class":195},[178,98018,863],{"class":319},[178,98020,98021,98024,98026,98028,98030,98032],{"class":180,"line":274},[178,98022,98023],{"class":319},"np.add(x,",[178,98025,1669],{"class":195},[178,98027,2318],{"class":319},[178,98029,94769],{"class":6985},[178,98031,330],{"class":699},[178,98033,95164],{"class":319},[178,98035,98036],{"class":180,"line":354},[178,98037,98038],{"class":2008},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,98040,98041],{},"③empty_like()",[19,98043,98044],{},[2093,98045,98046,98047,98052],{},"创建一个",[2093,98048,98049],{},[2093,98050,98051],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,98054,98055,98058],{},[70,98056,98057],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,98060,98061],{},[3269,98062],{"alt":160,"src":98063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[387,98065,98067],{"id":98066},"_264-用法","2.6.4 ？？用法",[19,98069,98070],{},"当想查看一个函数的参数时，可以通过？？来实现",[154,98072,98074],{"className":690,"code":98073,"language":692,"meta":160,"style":160},"np.full??\n",[70,98075,98076],{"__ignoreMap":160},[178,98077,98078,98081],{"class":180,"line":181},[178,98079,98080],{"class":319},"np.full",[178,98082,98083],{"class":79123},"??\n",[387,98085,98087],{"id":98086},"_265-full创建数组","2.6.5 full()创建数组",[154,98089,98091],{"className":690,"code":98090,"language":692,"meta":160,"style":160},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[70,98092,98093,98098],{"__ignoreMap":160},[178,98094,98095],{"class":180,"line":181},[178,98096,98097],{"class":319},"full(shape,fill_value)\n",[178,98099,98100],{"class":180,"line":263},[178,98101,98102],{"class":319},"创建全为某个指定值的数组\n",[19,98104,96245],{},[154,98106,98108],{"className":690,"code":98107,"language":692,"meta":160,"style":160},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[70,98109,98110,98115],{"__ignoreMap":160},[178,98111,98112],{"class":180,"line":181},[178,98113,98114],{"class":2008},"#创建一个一维数组,以20进行填充\n",[178,98116,98117,98120,98122,98124,98126],{"class":180,"line":263},[178,98118,98119],{"class":319},"np.full(",[178,98121,2386],{"class":195},[178,98123,2318],{"class":319},[178,98125,2640],{"class":195},[178,98127,863],{"class":319},[19,98129,95006],{},[154,98131,98133],{"className":690,"code":98132,"language":692,"meta":160,"style":160},"#创建二维数组\nnp.full((3,5),11)\n",[70,98134,98135,98139],{"__ignoreMap":160},[178,98136,98137],{"class":180,"line":181},[178,98138,95662],{"class":2008},[178,98140,98141,98144,98146,98148,98150,98152,98154],{"class":180,"line":263},[178,98142,98143],{"class":319},"np.full((",[178,98145,2021],{"class":195},[178,98147,2318],{"class":319},[178,98149,2259],{"class":195},[178,98151,43988],{"class":319},[178,98153,2412],{"class":195},[178,98155,863],{"class":319},[19,98157,98158],{},"③full_like用法",[19,98160,98161],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,98163,98164],{},"这里是指定填充而已",[154,98166,98168],{"className":690,"code":98167,"language":692,"meta":160,"style":160},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[70,98169,98170,98175,98199,98204],{"__ignoreMap":160},[178,98171,98172],{"class":180,"line":181},[178,98173,98174],{"class":2008},"#创建一个指定形状数组\n",[178,98176,98177,98179,98181,98183,98185,98187,98189,98191,98193,98195,98197],{"class":180,"line":263},[178,98178,2178],{"class":319},[178,98180,330],{"class":699},[178,98182,94717],{"class":319},[178,98184,1665],{"class":195},[178,98186,2318],{"class":319},[178,98188,2265],{"class":195},[178,98190,94722],{"class":319},[178,98192,2233],{"class":195},[178,98194,2318],{"class":319},[178,98196,2360],{"class":195},[178,98198,863],{"class":319},[178,98200,98201],{"class":180,"line":274},[178,98202,98203],{"class":2008},"#进行指定填充\n",[178,98205,98206,98209,98211],{"class":180,"line":354},[178,98207,98208],{"class":319},"np.full_like(a,",[178,98210,2386],{"class":195},[178,98212,863],{"class":319},[19,98214,13275],{},[19,98216,98217],{},[3269,98218],{"alt":160,"src":98219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[387,98221,98223],{"id":98222},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[23756,98225,98227],{"id":98226},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[154,98229,98231],{"className":690,"code":98230,"language":692,"meta":160,"style":160},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[70,98232,98233,98250],{"__ignoreMap":160},[178,98234,98235,98238,98240,98242,98244,98246,98248],{"class":180,"line":181},[178,98236,98237],{"class":319},"np.eye(",[178,98239,2233],{"class":195},[178,98241,2318],{"class":319},[178,98243,95215],{"class":6985},[178,98245,330],{"class":699},[178,98247,1956],{"class":195},[178,98249,863],{"class":319},[178,98251,98252],{"class":180,"line":263},[178,98253,98254],{"class":2008},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[23756,98256,98258],{"id":98257},"_2662-法2identity","2.6.6.2 法2：identity()",[154,98260,98262],{"className":690,"code":98261,"language":692,"meta":160,"style":160},"#identity()\nnp.identity(5,dtype=int)\n",[70,98263,98264,98269],{"__ignoreMap":160},[178,98265,98266],{"class":180,"line":181},[178,98267,98268],{"class":2008},"#identity()\n",[178,98270,98271,98274,98276,98278,98280,98282,98284],{"class":180,"line":263},[178,98272,98273],{"class":319},"np.identity(",[178,98275,2259],{"class":195},[178,98277,2318],{"class":319},[178,98279,95215],{"class":6985},[178,98281,330],{"class":699},[178,98283,1956],{"class":195},[178,98285,863],{"class":319},[19,98287,98288],{},"两个函数是有区别的",[19,98290,98291],{},[3269,98292],{"alt":160,"src":98293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,98295,98296],{},[3269,98297],{"alt":160,"src":98298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[154,98300,98302],{"className":690,"code":98301,"language":692,"meta":160,"style":160},"# 创建一个 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",[70,98303,98304,98309,98321,98326,98331,98336,98341,98345,98350,98370,98374,98379,98384],{"__ignoreMap":160},[178,98305,98306],{"class":180,"line":181},[178,98307,98308],{"class":2008},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[178,98310,98311,98313,98315,98317,98319],{"class":180,"line":263},[178,98312,98237],{"class":319},[178,98314,2021],{"class":195},[178,98316,14196],{"class":319},[178,98318,2233],{"class":195},[178,98320,863],{"class":319},[178,98322,98323],{"class":180,"line":274},[178,98324,98325],{"class":2008},"# 输出:\n",[178,98327,98328],{"class":180,"line":354},[178,98329,98330],{"class":2008},"# [[1. 0. 0. 0.]\n",[178,98332,98333],{"class":180,"line":364},[178,98334,98335],{"class":2008},"#  [0. 1. 0. 0.]\n",[178,98337,98338],{"class":180,"line":740},[178,98339,98340],{"class":2008},"#  [0. 0. 1. 0.]]\n",[178,98342,98343],{"class":180,"line":746},[178,98344,722],{"emptyLinePlaceholder":721},[178,98346,98347],{"class":180,"line":752},[178,98348,98349],{"class":2008},"# 对角线向上偏移1\n",[178,98351,98352,98354,98356,98358,98360,98362,98364,98366,98368],{"class":180,"line":757},[178,98353,98237],{"class":319},[178,98355,2021],{"class":195},[178,98357,14196],{"class":319},[178,98359,2233],{"class":195},[178,98361,14196],{"class":319},[178,98363,2433],{"class":6985},[178,98365,330],{"class":699},[178,98367,1665],{"class":195},[178,98369,863],{"class":319},[178,98371,98372],{"class":180,"line":763},[178,98373,98325],{"class":2008},[178,98375,98376],{"class":180,"line":769},[178,98377,98378],{"class":2008},"# [[0. 1. 0. 0.]\n",[178,98380,98381],{"class":180,"line":774},[178,98382,98383],{"class":2008},"#  [0. 0. 1. 0.]\n",[178,98385,98386],{"class":180,"line":780},[178,98387,98388],{"class":2008},"#  [0. 0. 0. 1.]]\n",[387,98390,98392],{"id":98391},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[154,98394,98396],{"className":690,"code":98395,"language":692,"meta":160,"style":160},"#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",[70,98397,98398,98403,98407,98412,98417,98422,98427,98432,98437,98442,98447],{"__ignoreMap":160},[178,98399,98400],{"class":180,"line":181},[178,98401,98402],{"class":2008},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[178,98404,98405],{"class":180,"line":263},[178,98406,819],{"class":188},[178,98408,98409],{"class":180,"line":274},[178,98410,98411],{"class":188},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[178,98413,98414],{"class":180,"line":354},[178,98415,98416],{"class":188},"参数介绍：\n",[178,98418,98419],{"class":180,"line":364},[178,98420,98421],{"class":188},"start：序列的起始值\n",[178,98423,98424],{"class":180,"line":740},[178,98425,98426],{"class":188},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[178,98428,98429],{"class":180,"line":746},[178,98430,98431],{"class":188},"num：要生长的等步长的样本数量，默认为50\n",[178,98433,98434],{"class":180,"line":752},[178,98435,98436],{"class":188},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[178,98438,98439],{"class":180,"line":757},[178,98440,98441],{"class":188},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[178,98443,98444],{"class":180,"line":763},[178,98445,98446],{"class":188},"dtype：ndarry的数据类型\n",[178,98448,98449],{"class":180,"line":769},[178,98450,819],{"class":188},[19,98452,98453],{},[3269,98454],{"alt":160,"src":98455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,98457,98458],{},"这里num=是可以省略的",[19,98460,98461],{},"也就是下方两行代码结果是一模一样的",[154,98463,98465],{"className":690,"code":98464,"language":692,"meta":160,"style":160},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[70,98466,98467,98484],{"__ignoreMap":160},[178,98468,98469,98472,98474,98476,98478,98480,98482],{"class":180,"line":181},[178,98470,98471],{"class":319},"np.linspace(",[178,98473,1665],{"class":195},[178,98475,2318],{"class":319},[178,98477,2259],{"class":195},[178,98479,2318],{"class":319},[178,98481,2259],{"class":195},[178,98483,863],{"class":319},[178,98485,98486,98488,98490,98492,98494,98496,98498,98500,98502],{"class":180,"line":263},[178,98487,98471],{"class":319},[178,98489,1665],{"class":195},[178,98491,2318],{"class":319},[178,98493,2259],{"class":195},[178,98495,2318],{"class":319},[178,98497,3464],{"class":6985},[178,98499,330],{"class":699},[178,98501,2259],{"class":195},[178,98503,863],{"class":319},[387,98505,98507],{"id":98506},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[154,98509,98511],{"className":690,"code":98510,"language":692,"meta":160,"style":160},"#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",[70,98512,98513,98518,98522,98527,98532,98537,98542,98546,98551,98556,98560],{"__ignoreMap":160},[178,98514,98515],{"class":180,"line":181},[178,98516,98517],{"class":2008},"#logspace函数用于创建一个等比数列，格式如下：\n",[178,98519,98520],{"class":180,"line":263},[178,98521,819],{"class":188},[178,98523,98524],{"class":180,"line":274},[178,98525,98526],{"class":188},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[178,98528,98529],{"class":180,"line":354},[178,98530,98531],{"class":188},"参数为：\n",[178,98533,98534],{"class":180,"line":364},[178,98535,98536],{"class":188},"start:序列的起始位置为：base**start\n",[178,98538,98539],{"class":180,"line":740},[178,98540,98541],{"class":188},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[178,98543,98544],{"class":180,"line":746},[178,98545,98431],{"class":188},[178,98547,98548],{"class":180,"line":752},[178,98549,98550],{"class":188},"endpoint：是否包含 stop 这个值，默认是 True\n",[178,98552,98553],{"class":180,"line":757},[178,98554,98555],{"class":188},"base：对数的底数，默认是 10（常见对数）\n",[178,98557,98558],{"class":180,"line":763},[178,98559,98446],{"class":188},[178,98561,98562],{"class":180,"line":769},[178,98563,819],{"class":188},[19,98565,98566],{},[3269,98567],{"alt":160,"src":98568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,98570,98571],{},"logspace()函数中的num参数也是可以不写num=的",[19,98573,98574],{},"endpoint是不可以省略的",[1853,98576,98577],{},"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":160,"searchDepth":263,"depth":263,"links":98579},[98580,98584,98589,98593,98597,98598],{"id":96971,"depth":263,"text":96972,"children":98581},[98582,98583],{"id":96975,"depth":274,"text":96976},{"id":97048,"depth":274,"text":97049},{"id":97080,"depth":263,"text":97081,"children":98585},[98586,98587,98588],{"id":97084,"depth":274,"text":97085},{"id":97266,"depth":274,"text":97267},{"id":97344,"depth":274,"text":97345},{"id":97379,"depth":263,"text":97380,"children":98590},[98591,98592],{"id":97383,"depth":274,"text":97384},{"id":97438,"depth":274,"text":97439},{"id":97534,"depth":263,"text":97535,"children":98594},[98595,98596],{"id":97538,"depth":274,"text":97539},{"id":97550,"depth":274,"text":97551},{"id":97584,"depth":263,"text":97585},{"id":97621,"depth":263,"text":97622,"children":98599},[98600,98601,98602,98603,98604,98605,98606,98607],{"id":97625,"depth":274,"text":97626},{"id":97850,"depth":274,"text":97851},{"id":97857,"depth":274,"text":97858},{"id":98066,"depth":274,"text":98067},{"id":98086,"depth":274,"text":98087},{"id":98222,"depth":274,"text":98223},{"id":98391,"depth":274,"text":98392},{"id":98506,"depth":274,"text":98507},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":96963,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98614,"title":98615,"body":98616,"description":25135,"extension":1880,"meta":98709,"navigation":721,"path":98710,"seo":98711,"stem":98712,"__hash__":98713},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98617,"toc":98707},[98618,98621,98624,98627,98630,98633,98636,98639,98642,98645,98648,98651,98653,98656,98659,98664,98667,98670,98704],[10,98619,98615],{"id":98620},"_20魔法命令mprun",[19,98622,98623],{},"逐行分析数据内存的使用情况",[19,98625,98626],{},"语法格式：",[19,98628,98629],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,98631,98632],{},"分析结果列如下：",[19,98634,98635],{},"Line行号",[19,98637,98638],{},"Mem usage内存使用大小",[19,98640,98641],{},"increment内存增量",[19,98643,98644],{},"Line content代码内容",[19,98646,98647],{},"补充说明：",[19,98649,98650],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,98652,96918],{},[19,98654,98655],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,98657,98658],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,98660,98661],{},[3269,98662],{"alt":160,"src":98663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,98665,98666],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,98668,98669],{},"这时候需要重新加载模块",[154,98671,98673],{"className":690,"code":98672,"language":692,"meta":160,"style":160},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[70,98674,98675,98680,98687,98692],{"__ignoreMap":160},[178,98676,98677],{"class":180,"line":181},[178,98678,98679],{"class":2008},"#重新加载模块\n",[178,98681,98682,98684],{"class":180,"line":263},[178,98683,700],{"class":699},[178,98685,98686],{"class":319}," importlib\n",[178,98688,98689],{"class":180,"line":274},[178,98690,98691],{"class":319},"importlib.reload(mprun_test)\n",[178,98693,98694,98696,98699,98701],{"class":180,"line":354},[178,98695,2268],{"class":699},[178,98697,98698],{"class":319},"mprun ",[178,98700,2472],{"class":699},[178,98702,98703],{"class":319},"f mprun_test.fun_test mprun_test.fun_test()\n",[1853,98705,98706],{},"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":160,"searchDepth":263,"depth":263,"links":98708},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98615,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98715,"title":98716,"body":98717,"description":25135,"extension":1880,"meta":98734,"navigation":721,"path":98735,"seo":98736,"stem":98737,"__hash__":98738},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98718,"toc":98732},[98719,98722,98727],[10,98720,98716],{"id":98721},"_3一维数组的索引和切片",[19,98723,98724],{},[3269,98725],{"alt":160,"src":98726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,98728,98729],{},[3269,98730],{"alt":160,"src":98731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":160,"searchDepth":263,"depth":263,"links":98733},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98716,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98740,"title":98741,"body":98742,"description":25135,"extension":1880,"meta":99225,"navigation":721,"path":99226,"seo":99227,"stem":99228,"__hash__":99229},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98743,"toc":99223},[98744,98747,98750,98755,98788,98791,98829,98832,98866,98869,98974,98977,99014,99017,99118,99121,99172,99175,99217,99220],[10,98745,98741],{"id":98746},"_4二维数组的索引与切片",[19,98748,98749],{},"①获取指定单个元素",[19,98751,98752],{},[3269,98753],{"alt":160,"src":98754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[154,98756,98758],{"className":690,"code":98757,"language":692,"meta":160,"style":160},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[70,98759,98760,98765,98770,98775],{"__ignoreMap":160},[178,98761,98762],{"class":180,"line":181},[178,98763,98764],{"class":2008},"#获取元素9\n",[178,98766,98767],{"class":180,"line":263},[178,98768,98769],{"class":2008},"#先获取所在行，再获取所在列\n",[178,98771,98772],{"class":180,"line":274},[178,98773,98774],{"class":2008},"#数组[行索引号，列索引号]\n",[178,98776,98777,98780,98782,98784,98786],{"class":180,"line":354},[178,98778,98779],{"class":319},"a[",[178,98781,1665],{"class":195},[178,98783,2318],{"class":319},[178,98785,1669],{"class":195},[178,98787,34978],{"class":319},[19,98789,98790],{},"②获取整行元素",[154,98792,98794],{"className":690,"code":98793,"language":692,"meta":160,"style":160},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[70,98795,98796,98801,98806,98814,98819],{"__ignoreMap":160},[178,98797,98798],{"class":180,"line":181},[178,98799,98800],{"class":2008},"#获取整行 数组[行索引号]\n",[178,98802,98803],{"class":180,"line":263},[178,98804,98805],{"class":2008},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[178,98807,98808,98810,98812],{"class":180,"line":274},[178,98809,98779],{"class":319},[178,98811,1669],{"class":195},[178,98813,34978],{"class":319},[178,98815,98816],{"class":180,"line":354},[178,98817,98818],{"class":2008},"#也可以负索引获取一行\n",[178,98820,98821,98823,98825,98827],{"class":180,"line":364},[178,98822,98779],{"class":319},[178,98824,2472],{"class":699},[178,98826,1665],{"class":195},[178,98828,34978],{"class":319},[19,98830,98831],{},"③获取整列元素",[154,98833,98835],{"className":690,"code":98834,"language":692,"meta":160,"style":160},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[70,98836,98837,98842,98851,98856],{"__ignoreMap":160},[178,98838,98839],{"class":180,"line":181},[178,98840,98841],{"class":2008},"#获取整列 数组名[:,列索引]\n",[178,98843,98844,98847,98849],{"class":180,"line":263},[178,98845,98846],{"class":319},"a[:,",[178,98848,1669],{"class":195},[178,98850,34978],{"class":319},[178,98852,98853],{"class":180,"line":274},[178,98854,98855],{"class":2008},"#也可以负索引获取一列\n",[178,98857,98858,98860,98862,98864],{"class":180,"line":354},[178,98859,98846],{"class":319},[178,98861,2472],{"class":699},[178,98863,1665],{"class":195},[178,98865,34978],{"class":319},[19,98867,98868],{},"④部分行部分列的元素",[154,98870,98872],{"className":690,"code":98871,"language":692,"meta":160,"style":160},"#部分行部分列 数组名[行切片，列切片]\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",[70,98873,98874,98879,98889,98893,98897,98902,98907,98911,98923,98927,98931,98936,98941,98946,98951,98955,98960],{"__ignoreMap":160},[178,98875,98876],{"class":180,"line":181},[178,98877,98878],{"class":2008},"#部分行部分列 数组名[行切片，列切片]\n",[178,98880,98881,98884,98886],{"class":180,"line":263},[178,98882,98883],{"class":319},"a[:",[178,98885,1669],{"class":195},[178,98887,98888],{"class":319},",:]\n",[178,98890,98891],{"class":180,"line":274},[178,98892,95279],{"class":2008},[178,98894,98895],{"class":180,"line":354},[178,98896,95643],{"class":188},[178,98898,98899],{"class":180,"line":364},[178,98900,98901],{"class":188},"array([[ 1,  2,  3,  4,  5,  6],\n",[178,98903,98904],{"class":180,"line":740},[178,98905,98906],{"class":188},"       [ 7,  8,  9, 10, 11, 12]])\n",[178,98908,98909],{"class":180,"line":746},[178,98910,95643],{"class":188},[178,98912,98913,98915,98917,98919,98921],{"class":180,"line":752},[178,98914,98846],{"class":319},[178,98916,1665],{"class":195},[178,98918,2799],{"class":319},[178,98920,2233],{"class":195},[178,98922,34978],{"class":319},[178,98924,98925],{"class":180,"line":757},[178,98926,95279],{"class":2008},[178,98928,98929],{"class":180,"line":763},[178,98930,95643],{"class":188},[178,98932,98933],{"class":180,"line":769},[178,98934,98935],{"class":188},"array([[ 2,  3,  4],\n",[178,98937,98938],{"class":180,"line":774},[178,98939,98940],{"class":188},"       [ 8,  9, 10],\n",[178,98942,98943],{"class":180,"line":780},[178,98944,98945],{"class":188},"       [14, 15, 16],\n",[178,98947,98948],{"class":180,"line":786},[178,98949,98950],{"class":188},"       [20, 21, 22]])\n",[178,98952,98953],{"class":180,"line":792},[178,98954,95643],{"class":188},[178,98956,98957],{"class":180,"line":798},[178,98958,98959],{"class":2008},"#对列行同时进行切片，使用了step参数\n",[178,98961,98962,98965,98967,98970,98972],{"class":180,"line":804},[178,98963,98964],{"class":319},"a[::",[178,98966,1669],{"class":195},[178,98968,98969],{"class":319},",::",[178,98971,1669],{"class":195},[178,98973,34978],{"class":319},[19,98975,98976],{},"⑤同时获取两个元素",[154,98978,98980],{"className":690,"code":98979,"language":692,"meta":160,"style":160},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[70,98981,98982,98987,98992],{"__ignoreMap":160},[178,98983,98984],{"class":180,"line":181},[178,98985,98986],{"class":2008},"#同时获取第三行第二列，第四行第一列\n",[178,98988,98989],{"class":180,"line":263},[178,98990,98991],{"class":2008},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[178,98993,98994,98997,98999,99001,99003,99005,99007,99009,99011],{"class":180,"line":274},[178,98995,98996],{"class":319},"a[(",[178,98998,1669],{"class":195},[178,99000,2318],{"class":319},[178,99002,2021],{"class":195},[178,99004,43979],{"class":319},[178,99006,1665],{"class":195},[178,99008,2318],{"class":319},[178,99010,2133],{"class":195},[178,99012,99013],{"class":319},")]\n",[19,99015,99016],{},"⑥切片，对行进行反向获取",[154,99018,99020],{"className":690,"code":99019,"language":692,"meta":160,"style":160},"#切片 对所有行进行反向获取\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",[70,99021,99022,99027,99037,99041,99045,99050,99055,99060,99065,99069,99074,99090,99094,99099,99104,99109,99114],{"__ignoreMap":160},[178,99023,99024],{"class":180,"line":181},[178,99025,99026],{"class":2008},"#切片 对所有行进行反向获取\n",[178,99028,99029,99031,99033,99035],{"class":180,"line":263},[178,99030,98964],{"class":319},[178,99032,2472],{"class":699},[178,99034,1665],{"class":195},[178,99036,34978],{"class":319},[178,99038,99039],{"class":180,"line":274},[178,99040,95279],{"class":2008},[178,99042,99043],{"class":180,"line":354},[178,99044,95643],{"class":188},[178,99046,99047],{"class":180,"line":364},[178,99048,99049],{"class":188},"array([[19, 20, 21, 22, 23, 24],\n",[178,99051,99052],{"class":180,"line":740},[178,99053,99054],{"class":188},"       [13, 14, 15, 16, 17, 18],\n",[178,99056,99057],{"class":180,"line":746},[178,99058,99059],{"class":188},"       [ 7,  8,  9, 10, 11, 12],\n",[178,99061,99062],{"class":180,"line":752},[178,99063,99064],{"class":188},"       [ 1,  2,  3,  4,  5,  6]])\n",[178,99066,99067],{"class":180,"line":757},[178,99068,95643],{"class":188},[178,99070,99071],{"class":180,"line":763},[178,99072,99073],{"class":2008},"#对行列都进行反向切片获取\n",[178,99075,99076,99078,99080,99082,99084,99086,99088],{"class":180,"line":769},[178,99077,98964],{"class":319},[178,99079,2472],{"class":699},[178,99081,1665],{"class":195},[178,99083,98969],{"class":319},[178,99085,2472],{"class":699},[178,99087,1665],{"class":195},[178,99089,34978],{"class":319},[178,99091,99092],{"class":180,"line":774},[178,99093,95643],{"class":188},[178,99095,99096],{"class":180,"line":780},[178,99097,99098],{"class":188},"array([[24, 23, 22, 21, 20, 19],\n",[178,99100,99101],{"class":180,"line":786},[178,99102,99103],{"class":188},"       [18, 17, 16, 15, 14, 13],\n",[178,99105,99106],{"class":180,"line":792},[178,99107,99108],{"class":188},"       [12, 11, 10,  9,  8,  7],\n",[178,99110,99111],{"class":180,"line":798},[178,99112,99113],{"class":188},"       [ 6,  5,  4,  3,  2,  1]])\n",[178,99115,99116],{"class":180,"line":804},[178,99117,95643],{"class":188},[19,99119,99120],{},"⑦修改元素",[154,99122,99124],{"className":690,"code":99123,"language":692,"meta":160,"style":160},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[70,99125,99126,99131,99149,99154],{"__ignoreMap":160},[178,99127,99128],{"class":180,"line":181},[178,99129,99130],{"class":2008},"#获取前两行和前两列\n",[178,99132,99133,99136,99138,99140,99142,99145,99147],{"class":180,"line":263},[178,99134,99135],{"class":319},"sub_a",[178,99137,330],{"class":699},[178,99139,98883],{"class":319},[178,99141,1669],{"class":195},[178,99143,99144],{"class":319},",:",[178,99146,1669],{"class":195},[178,99148,34978],{"class":319},[178,99150,99151],{"class":180,"line":274},[178,99152,99153],{"class":2008},"#修改sub_a第一个元素的值\n",[178,99155,99156,99159,99161,99163,99165,99167,99169],{"class":180,"line":354},[178,99157,99158],{"class":319},"sub_a[",[178,99160,2133],{"class":195},[178,99162,2318],{"class":319},[178,99164,2133],{"class":195},[178,99166,2879],{"class":319},[178,99168,330],{"class":699},[178,99170,99171],{"class":195},"100\n",[19,99173,99174],{},"⑧数组复制copy()",[154,99176,99178],{"className":690,"code":99177,"language":692,"meta":160,"style":160},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[70,99179,99180,99185,99195,99200],{"__ignoreMap":160},[178,99181,99182],{"class":180,"line":181},[178,99183,99184],{"class":2008},"#数组复制\n",[178,99186,99187,99190,99192],{"class":180,"line":263},[178,99188,99189],{"class":319},"copy_a",[178,99191,330],{"class":699},[178,99193,99194],{"class":319},"np.copy(sub_a)\n",[178,99196,99197],{"class":180,"line":274},[178,99198,99199],{"class":2008},"#修改copy_a后不影响原数组\n",[178,99201,99202,99205,99207,99209,99211,99213,99215],{"class":180,"line":354},[178,99203,99204],{"class":319},"copy_a[",[178,99206,2133],{"class":195},[178,99208,2318],{"class":319},[178,99210,2133],{"class":195},[178,99212,2879],{"class":319},[178,99214,330],{"class":699},[178,99216,99171],{"class":195},[19,99218,99219],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[1853,99221,99222],{},"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":160,"searchDepth":263,"depth":263,"links":99224},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98741,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99231,"title":99232,"body":99233,"description":25135,"extension":1880,"meta":99725,"navigation":721,"path":99726,"seo":99727,"stem":99728,"__hash__":99729},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99234,"toc":99717},[99235,99238,99242,99245,99248,99301,99304,99329,99332,99351,99371,99374,99390,99394,99440,99444,99486,99490,99493,99496,99499,99502,99505,99567,99627,99631,99634,99691,99695,99700,99709,99714],[10,99236,99232],{"id":99237},"_5改变数组的维度",[14,99239,99241],{"id":99240},"_51-使用reshape","5.1 使用reshape()",[19,99243,99244],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,99246,99247],{},"①一维数组转换为二维数组",[154,99249,99251],{"className":690,"code":99250,"language":692,"meta":160,"style":160},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[70,99252,99253,99269,99274,99279,99284],{"__ignoreMap":160},[178,99254,99255,99257,99259,99261,99263,99265,99267],{"class":180,"line":181},[178,99256,2178],{"class":319},[178,99258,330],{"class":699},[178,99260,94717],{"class":319},[178,99262,1665],{"class":195},[178,99264,2318],{"class":319},[178,99266,2463],{"class":195},[178,99268,863],{"class":319},[178,99270,99271],{"class":180,"line":263},[178,99272,99273],{"class":2008},"#将一维数组进行转换\n",[178,99275,99276],{"class":180,"line":274},[178,99277,99278],{"class":2008},"#注意点：元素个数不可以变\n",[178,99280,99281],{"class":180,"line":354},[178,99282,99283],{"class":2008},"#转换维度要保持一致，不一致就异常！！！\n",[178,99285,99286,99288,99290,99293,99295,99297,99299],{"class":180,"line":364},[178,99287,95021],{"class":319},[178,99289,330],{"class":699},[178,99291,99292],{"class":319},"a.reshape(",[178,99294,1669],{"class":195},[178,99296,2318],{"class":319},[178,99298,2284],{"class":195},[178,99300,863],{"class":319},[19,99302,99303],{},"②一维数组转换为三维数组",[154,99305,99307],{"className":690,"code":99306,"language":692,"meta":160,"style":160},"aaa=a.reshape(2,3,2)\n",[70,99308,99309],{"__ignoreMap":160},[178,99310,99311,99313,99315,99317,99319,99321,99323,99325,99327],{"class":180,"line":181},[178,99312,97236],{"class":319},[178,99314,330],{"class":699},[178,99316,99292],{"class":319},[178,99318,1669],{"class":195},[178,99320,2318],{"class":319},[178,99322,2021],{"class":195},[178,99324,2318],{"class":319},[178,99326,1669],{"class":195},[178,99328,863],{"class":319},[19,99330,99331],{},"③二维数组转化为一维数组",[154,99333,99335],{"className":690,"code":99334,"language":692,"meta":160,"style":160},"#知道元素个数：\naa.reshape(12)\n",[70,99336,99337,99342],{"__ignoreMap":160},[178,99338,99339],{"class":180,"line":181},[178,99340,99341],{"class":2008},"#知道元素个数：\n",[178,99343,99344,99347,99349],{"class":180,"line":263},[178,99345,99346],{"class":319},"aa.reshape(",[178,99348,2438],{"class":195},[178,99350,863],{"class":319},[154,99352,99354],{"className":690,"code":99353,"language":692,"meta":160,"style":160},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[70,99355,99356,99361],{"__ignoreMap":160},[178,99357,99358],{"class":180,"line":181},[178,99359,99360],{"class":2008},"#不知道元素个数，参数传递-1\n",[178,99362,99363,99365,99367,99369],{"class":180,"line":263},[178,99364,99346],{"class":319},[178,99366,2472],{"class":699},[178,99368,1665],{"class":195},[178,99370,863],{"class":319},[19,99372,99373],{},"④三维数组转换为一维数组",[154,99375,99377],{"className":690,"code":99376,"language":692,"meta":160,"style":160},"aaa.reshape(-1)\n",[70,99378,99379],{"__ignoreMap":160},[178,99380,99381,99384,99386,99388],{"class":180,"line":181},[178,99382,99383],{"class":319},"aaa.reshape(",[178,99385,2472],{"class":699},[178,99387,1665],{"class":195},[178,99389,863],{"class":319},[14,99391,99393],{"id":99392},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[154,99395,99397],{"className":690,"code":99396,"language":692,"meta":160,"style":160},"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",[70,99398,99399,99426,99431,99435],{"__ignoreMap":160},[178,99400,99401,99403,99405,99407,99409,99411,99413,99415,99417,99419,99421,99423],{"class":180,"line":181},[178,99402,95021],{"class":319},[178,99404,330],{"class":699},[178,99406,94717],{"class":319},[178,99408,1665],{"class":195},[178,99410,2318],{"class":319},[178,99412,2463],{"class":195},[178,99414,94722],{"class":319},[178,99416,1669],{"class":195},[178,99418,2318],{"class":319},[178,99420,2284],{"class":195},[178,99422,2369],{"class":319},[178,99424,99425],{"class":2008},"#转换为2行6列的数组\n",[178,99427,99428],{"class":180,"line":263},[178,99429,99430],{"class":319},"aa.revel()\n",[178,99432,99433],{"class":180,"line":274},[178,99434,95279],{"class":2008},[178,99436,99437],{"class":180,"line":354},[178,99438,99439],{"class":2008},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99441,99443],{"id":99442},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[154,99445,99447],{"className":690,"code":99446,"language":692,"meta":160,"style":160},"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",[70,99448,99449,99473,99478,99482],{"__ignoreMap":160},[178,99450,99451,99453,99455,99457,99459,99461,99463,99465,99467,99469,99471],{"class":180,"line":181},[178,99452,95021],{"class":319},[178,99454,330],{"class":699},[178,99456,94717],{"class":319},[178,99458,1665],{"class":195},[178,99460,2318],{"class":319},[178,99462,2463],{"class":195},[178,99464,94722],{"class":319},[178,99466,1669],{"class":195},[178,99468,2318],{"class":319},[178,99470,2284],{"class":195},[178,99472,863],{"class":319},[178,99474,99475],{"class":180,"line":263},[178,99476,99477],{"class":319},"aa.flatten()\n",[178,99479,99480],{"class":180,"line":274},[178,99481,95279],{"class":2008},[178,99483,99484],{"class":180,"line":354},[178,99485,99439],{"class":2008},[14,99487,99489],{"id":99488},"_54-使用resize","5.4 使用resize()",[19,99491,99492],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,99494,99495],{},"通过resize方法可以改变数组的维度",[19,99497,99498],{},"#resize修改数组维度",[19,99500,99501],{},"#以元组的形式指定形状",[19,99503,99504],{},"#改变的是原数组",[154,99506,99508],{"className":690,"code":99507,"language":692,"meta":160,"style":160},"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",[70,99509,99510,99526,99546,99559,99563],{"__ignoreMap":160},[178,99511,99512,99514,99516,99518,99520,99522,99524],{"class":180,"line":181},[178,99513,2178],{"class":319},[178,99515,330],{"class":699},[178,99517,94717],{"class":319},[178,99519,1665],{"class":195},[178,99521,2318],{"class":319},[178,99523,2463],{"class":195},[178,99525,863],{"class":319},[178,99527,99528,99531,99533,99535,99537,99539,99541,99543],{"class":180,"line":263},[178,99529,99530],{"class":319},"a.shape",[178,99532,330],{"class":699},[178,99534,944],{"class":319},[178,99536,1669],{"class":195},[178,99538,2318],{"class":319},[178,99540,2284],{"class":195},[178,99542,2369],{"class":319},[178,99544,99545],{"class":2008},"#改变了原数组\n",[178,99547,99548,99550,99552,99555,99557],{"class":180,"line":274},[178,99549,2178],{"class":319},[178,99551,330],{"class":699},[178,99553,99554],{"class":319},"resize((",[178,99556,2438],{"class":195},[178,99558,32239],{"class":319},[178,99560,99561],{"class":180,"line":354},[178,99562,95279],{"class":2008},[178,99564,99565],{"class":180,"line":364},[178,99566,99439],{"class":2008},[154,99568,99570],{"className":690,"code":99569,"language":692,"meta":160,"style":160},"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",[70,99571,99572,99585,99589,99593,99598,99603,99608,99613,99618,99623],{"__ignoreMap":160},[178,99573,99574,99577,99579,99581,99583],{"class":180,"line":181},[178,99575,99576],{"class":319},"a.resize((",[178,99578,2284],{"class":195},[178,99580,2318],{"class":319},[178,99582,1669],{"class":195},[178,99584,32239],{"class":319},[178,99586,99587],{"class":180,"line":263},[178,99588,95279],{"class":2008},[178,99590,99591],{"class":180,"line":274},[178,99592,95643],{"class":188},[178,99594,99595],{"class":180,"line":354},[178,99596,99597],{"class":188},"array([[ 1,  2],\n",[178,99599,99600],{"class":180,"line":364},[178,99601,99602],{"class":188},"       [ 3,  4],\n",[178,99604,99605],{"class":180,"line":740},[178,99606,99607],{"class":188},"       [ 5,  6],\n",[178,99609,99610],{"class":180,"line":746},[178,99611,99612],{"class":188},"       [ 7,  8],\n",[178,99614,99615],{"class":180,"line":752},[178,99616,99617],{"class":188},"       [ 9, 10],\n",[178,99619,99620],{"class":180,"line":757},[178,99621,99622],{"class":188},"       [11, 12]])\n",[178,99624,99625],{"class":180,"line":763},[178,99626,95643],{"class":188},[14,99628,99630],{"id":99629},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,99632,99633],{},"改变了原数组",[154,99635,99637],{"className":690,"code":99636,"language":692,"meta":160,"style":160},"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",[70,99638,99639,99655,99671,99675,99679,99683,99687],{"__ignoreMap":160},[178,99640,99641,99643,99645,99647,99649,99651,99653],{"class":180,"line":181},[178,99642,2178],{"class":319},[178,99644,330],{"class":699},[178,99646,94717],{"class":319},[178,99648,1665],{"class":195},[178,99650,2318],{"class":319},[178,99652,2463],{"class":195},[178,99654,863],{"class":319},[178,99656,99657,99659,99661,99663,99665,99667,99669],{"class":180,"line":263},[178,99658,99530],{"class":319},[178,99660,330],{"class":699},[178,99662,944],{"class":319},[178,99664,1669],{"class":195},[178,99666,2318],{"class":319},[178,99668,2284],{"class":195},[178,99670,863],{"class":319},[178,99672,99673],{"class":180,"line":274},[178,99674,95279],{"class":2008},[178,99676,99677],{"class":180,"line":354},[178,99678,95643],{"class":188},[178,99680,99681],{"class":180,"line":364},[178,99682,98901],{"class":188},[178,99684,99685],{"class":180,"line":740},[178,99686,98906],{"class":188},[178,99688,99689],{"class":180,"line":746},[178,99690,95643],{"class":188},[14,99692,99694],{"id":99693},"_56-重要比较","5.6 重要比较：",[19,99696,99697],{},[3269,99698],{"alt":160,"src":99699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,99701,99702,99703,99705,99706,99708],{},"口诀：NumPy 函数要么用 ",[70,99704,97676],{},"，要么用 ",[70,99707,554],{},"，创建结构用 shape，造数据用 size",[19,99710,99711],{},[3269,99712],{"alt":160,"src":99713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[1853,99715,99716],{},"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":160,"searchDepth":263,"depth":263,"links":99718},[99719,99720,99721,99722,99723,99724],{"id":99240,"depth":263,"text":99241},{"id":99392,"depth":263,"text":99393},{"id":99442,"depth":263,"text":99443},{"id":99488,"depth":263,"text":99489},{"id":99629,"depth":263,"text":99630},{"id":99693,"depth":263,"text":99694},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99232,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99731,"title":99732,"body":99733,"description":25135,"extension":1880,"meta":100805,"navigation":721,"path":100806,"seo":100807,"stem":100808,"__hash__":100809},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99734,"toc":100799},[99735,99738,99742,99745,99748,99751,99816,99819,99859,99862,99944,99947,99952,99974,99976,99981,99986,99989,99992,100147,100150,100352,100356,100359,100362,100430,100432,100437,100440,100443,100523,100527,100530,100532,100605,100607,100612,100614,100694,100698,100701,100704,100707,100710,100713,100716,100796],[10,99736,99732],{"id":99737},"_6数组的拼接",[14,99739,99741],{"id":99740},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,99743,99744],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,99746,99747],{},"函数内部传两个数列构成的数列或者元组",[19,99749,99750],{},"①一维数组的拼接",[154,99752,99754],{"className":690,"code":99753,"language":692,"meta":160,"style":160},"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",[70,99755,99756,99776,99796,99801,99806,99811],{"__ignoreMap":160},[178,99757,99758,99760,99762,99764,99766,99768,99770,99772,99774],{"class":180,"line":181},[178,99759,2178],{"class":319},[178,99761,330],{"class":699},[178,99763,94739],{"class":319},[178,99765,1665],{"class":195},[178,99767,2318],{"class":319},[178,99769,1669],{"class":195},[178,99771,2318],{"class":319},[178,99773,2021],{"class":195},[178,99775,6428],{"class":319},[178,99777,99778,99780,99782,99784,99786,99788,99790,99792,99794],{"class":180,"line":263},[178,99779,2203],{"class":319},[178,99781,330],{"class":699},[178,99783,94739],{"class":319},[178,99785,2233],{"class":195},[178,99787,2318],{"class":319},[178,99789,2259],{"class":195},[178,99791,2318],{"class":319},[178,99793,2284],{"class":195},[178,99795,6428],{"class":319},[178,99797,99798],{"class":180,"line":274},[178,99799,99800],{"class":2008},"#调用concatenate进行数组拼接\n",[178,99802,99803],{"class":180,"line":354},[178,99804,99805],{"class":319},"np.concatenate((a,b))\n",[178,99807,99808],{"class":180,"line":364},[178,99809,99810],{"class":2008},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[178,99812,99813],{"class":180,"line":740},[178,99814,99815],{"class":2008},"#np.concatenate([a,b])\n",[19,99817,99818],{},"②一维多个数组拼接",[154,99820,99822],{"className":690,"code":99821,"language":692,"meta":160,"style":160},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[70,99823,99824,99829,99849,99854],{"__ignoreMap":160},[178,99825,99826],{"class":180,"line":181},[178,99827,99828],{"class":2008},"#也可以多个数组进行拼接\n",[178,99830,99831,99833,99835,99837,99839,99841,99843,99845,99847],{"class":180,"line":263},[178,99832,2228],{"class":319},[178,99834,330],{"class":699},[178,99836,94739],{"class":319},[178,99838,2386],{"class":195},[178,99840,2318],{"class":319},[178,99842,2412],{"class":195},[178,99844,2318],{"class":319},[178,99846,2463],{"class":195},[178,99848,6428],{"class":319},[178,99850,99851],{"class":180,"line":274},[178,99852,99853],{"class":319},"c\n",[178,99855,99856],{"class":180,"line":354},[178,99857,99858],{"class":319},"np.concatenate((a,b,c))\n",[19,99860,99861],{},"③二维数组拼接",[154,99863,99865],{"className":690,"code":99864,"language":692,"meta":160,"style":160},"#二维数组使用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",[70,99866,99867,99872,99896,99921,99926,99931],{"__ignoreMap":160},[178,99868,99869],{"class":180,"line":181},[178,99870,99871],{"class":2008},"#二维数组使用concatenate进行拼接\n",[178,99873,99874,99876,99878,99880,99882,99884,99886,99888,99890,99892,99894],{"class":180,"line":263},[178,99875,95021],{"class":319},[178,99877,330],{"class":699},[178,99879,94717],{"class":319},[178,99881,1665],{"class":195},[178,99883,2318],{"class":319},[178,99885,2463],{"class":195},[178,99887,94722],{"class":319},[178,99889,2021],{"class":195},[178,99891,2318],{"class":319},[178,99893,2233],{"class":195},[178,99895,863],{"class":319},[178,99897,99898,99901,99903,99905,99907,99909,99911,99913,99915,99917,99919],{"class":180,"line":274},[178,99899,99900],{"class":319},"bb",[178,99902,330],{"class":699},[178,99904,94717],{"class":319},[178,99906,2277],{"class":195},[178,99908,2318],{"class":319},[178,99910,2582],{"class":195},[178,99912,94722],{"class":319},[178,99914,2021],{"class":195},[178,99916,2318],{"class":319},[178,99918,2233],{"class":195},[178,99920,863],{"class":319},[178,99922,99923],{"class":180,"line":354},[178,99924,99925],{"class":2008},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[178,99927,99928],{"class":180,"line":364},[178,99929,99930],{"class":2008},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[178,99932,99933,99936,99938,99940,99942],{"class":180,"line":740},[178,99934,99935],{"class":319},"np.concatenate((aa,bb),",[178,99937,49246],{"class":6985},[178,99939,330],{"class":699},[178,99941,2133],{"class":195},[178,99943,863],{"class":319},[19,99945,99946],{},"结果：",[19,99948,99949],{},[3269,99950],{"alt":160,"src":99951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[154,99953,99955],{"className":690,"code":99954,"language":692,"meta":160,"style":160},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[70,99956,99957,99962],{"__ignoreMap":160},[178,99958,99959],{"class":180,"line":181},[178,99960,99961],{"class":2008},"#指定axis为1进行拼接\n",[178,99963,99964,99966,99968,99970,99972],{"class":180,"line":263},[178,99965,99935],{"class":319},[178,99967,49246],{"class":6985},[178,99969,330],{"class":699},[178,99971,1665],{"class":195},[178,99973,863],{"class":319},[19,99975,99946],{},[19,99977,99978],{},[3269,99979],{"alt":160,"src":99980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,99982,99983],{},[2093,99984,99985],{},"二维数组总结：0竖着方向，1横着方向",[19,99987,99988],{},"④三维数组拼接",[19,99990,99991],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[154,99993,99995],{"className":690,"code":99994,"language":692,"meta":160,"style":160},"#两个三行六列\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",[70,99996,99997,100002,100030,100060,100065,100082,100087,100092,100097,100114,100119,100124,100129,100142],{"__ignoreMap":160},[178,99998,99999],{"class":180,"line":181},[178,100000,100001],{"class":2008},"#两个三行六列\n",[178,100003,100004,100006,100008,100010,100012,100014,100016,100018,100020,100022,100024,100026,100028],{"class":180,"line":263},[178,100005,97236],{"class":319},[178,100007,330],{"class":699},[178,100009,94717],{"class":319},[178,100011,1665],{"class":195},[178,100013,2318],{"class":319},[178,100015,2265],{"class":195},[178,100017,94722],{"class":319},[178,100019,1669],{"class":195},[178,100021,2318],{"class":319},[178,100023,2021],{"class":195},[178,100025,2318],{"class":319},[178,100027,2284],{"class":195},[178,100029,863],{"class":319},[178,100031,100032,100035,100037,100039,100041,100043,100046,100048,100050,100052,100054,100056,100058],{"class":180,"line":274},[178,100033,100034],{"class":319},"bbb",[178,100036,330],{"class":699},[178,100038,94717],{"class":319},[178,100040,2277],{"class":195},[178,100042,2318],{"class":319},[178,100044,100045],{"class":195},"137",[178,100047,94722],{"class":319},[178,100049,1669],{"class":195},[178,100051,2318],{"class":319},[178,100053,2021],{"class":195},[178,100055,2318],{"class":319},[178,100057,2284],{"class":195},[178,100059,863],{"class":319},[178,100061,100062],{"class":180,"line":354},[178,100063,100064],{"class":2008},"#axis=0\n",[178,100066,100067,100069,100071,100074,100076,100078,100080],{"class":180,"line":364},[178,100068,2635],{"class":319},[178,100070,330],{"class":699},[178,100072,100073],{"class":319},"np.concatenate((aaa,bbb),",[178,100075,49246],{"class":6985},[178,100077,330],{"class":699},[178,100079,2133],{"class":195},[178,100081,863],{"class":319},[178,100083,100084],{"class":180,"line":740},[178,100085,100086],{"class":319},"s.shape\n",[178,100088,100089],{"class":180,"line":746},[178,100090,100091],{"class":2008},"#输出：(4,3,6)\n",[178,100093,100094],{"class":180,"line":752},[178,100095,100096],{"class":2008},"#axis=1\n",[178,100098,100099,100102,100104,100106,100108,100110,100112],{"class":180,"line":757},[178,100100,100101],{"class":319},"ss",[178,100103,330],{"class":699},[178,100105,100073],{"class":319},[178,100107,49246],{"class":6985},[178,100109,330],{"class":699},[178,100111,1665],{"class":195},[178,100113,863],{"class":319},[178,100115,100116],{"class":180,"line":763},[178,100117,100118],{"class":319},"ss.shape\n",[178,100120,100121],{"class":180,"line":769},[178,100122,100123],{"class":2008},"#输出：(2,6,6)\n",[178,100125,100126],{"class":180,"line":774},[178,100127,100128],{"class":2008},"#axis=2\n",[178,100130,100131,100133,100135,100137,100139],{"class":180,"line":780},[178,100132,100073],{"class":319},[178,100134,49246],{"class":6985},[178,100136,330],{"class":699},[178,100138,1669],{"class":195},[178,100140,100141],{"class":319},").shape\n",[178,100143,100144],{"class":180,"line":786},[178,100145,100146],{"class":2008},"#输出：（2，3，12）\n",[19,100148,100149],{},"⑤四维数组拼接",[154,100151,100153],{"className":690,"code":100152,"language":692,"meta":160,"style":160},"#两个三行六列\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",[70,100154,100155,100159,100187,100215,100240,100266,100270,100283,100288,100292,100304,100309,100313,100325,100330,100335,100347],{"__ignoreMap":160},[178,100156,100157],{"class":180,"line":181},[178,100158,100001],{"class":2008},[178,100160,100161,100163,100165,100167,100169,100171,100173,100175,100177,100179,100181,100183,100185],{"class":180,"line":263},[178,100162,97236],{"class":319},[178,100164,330],{"class":699},[178,100166,94717],{"class":319},[178,100168,1665],{"class":195},[178,100170,2318],{"class":319},[178,100172,2265],{"class":195},[178,100174,94722],{"class":319},[178,100176,1669],{"class":195},[178,100178,2318],{"class":319},[178,100180,2021],{"class":195},[178,100182,2318],{"class":319},[178,100184,2284],{"class":195},[178,100186,863],{"class":319},[178,100188,100189,100191,100193,100195,100197,100199,100201,100203,100205,100207,100209,100211,100213],{"class":180,"line":274},[178,100190,100034],{"class":319},[178,100192,330],{"class":699},[178,100194,94717],{"class":319},[178,100196,2277],{"class":195},[178,100198,2318],{"class":319},[178,100200,100045],{"class":195},[178,100202,94722],{"class":319},[178,100204,1669],{"class":195},[178,100206,2318],{"class":319},[178,100208,2021],{"class":195},[178,100210,2318],{"class":319},[178,100212,2284],{"class":195},[178,100214,863],{"class":319},[178,100216,100217,100220,100222,100224,100226,100228,100230,100232,100234,100236,100238],{"class":180,"line":354},[178,100218,100219],{"class":319},"aaaa",[178,100221,330],{"class":699},[178,100223,99383],{"class":319},[178,100225,1669],{"class":195},[178,100227,2318],{"class":319},[178,100229,2021],{"class":195},[178,100231,2318],{"class":319},[178,100233,2021],{"class":195},[178,100235,2318],{"class":319},[178,100237,1669],{"class":195},[178,100239,863],{"class":319},[178,100241,100242,100245,100247,100250,100252,100254,100256,100258,100260,100262,100264],{"class":180,"line":364},[178,100243,100244],{"class":319},"bbbb",[178,100246,330],{"class":699},[178,100248,100249],{"class":319},"bbb.reshape(",[178,100251,1669],{"class":195},[178,100253,2318],{"class":319},[178,100255,2021],{"class":195},[178,100257,2318],{"class":319},[178,100259,2021],{"class":195},[178,100261,2318],{"class":319},[178,100263,1669],{"class":195},[178,100265,863],{"class":319},[178,100267,100268],{"class":180,"line":740},[178,100269,100064],{"class":2008},[178,100271,100272,100275,100277,100279,100281],{"class":180,"line":746},[178,100273,100274],{"class":319},"np.concatenate((aaaa,bbbb),",[178,100276,49246],{"class":6985},[178,100278,330],{"class":699},[178,100280,2133],{"class":195},[178,100282,100141],{"class":319},[178,100284,100285],{"class":180,"line":752},[178,100286,100287],{"class":2008},"#结果：（4，3，3，2）\n",[178,100289,100290],{"class":180,"line":757},[178,100291,100096],{"class":2008},[178,100293,100294,100296,100298,100300,100302],{"class":180,"line":763},[178,100295,100274],{"class":319},[178,100297,49246],{"class":6985},[178,100299,330],{"class":699},[178,100301,1665],{"class":195},[178,100303,100141],{"class":319},[178,100305,100306],{"class":180,"line":769},[178,100307,100308],{"class":2008},"#结果：（2，6，3，2）\n",[178,100310,100311],{"class":180,"line":774},[178,100312,100128],{"class":2008},[178,100314,100315,100317,100319,100321,100323],{"class":180,"line":780},[178,100316,100274],{"class":319},[178,100318,49246],{"class":6985},[178,100320,330],{"class":699},[178,100322,1669],{"class":195},[178,100324,100141],{"class":319},[178,100326,100327],{"class":180,"line":786},[178,100328,100329],{"class":2008},"#结果：（2，3，6，2）\n",[178,100331,100332],{"class":180,"line":792},[178,100333,100334],{"class":2008},"#axis=3\n",[178,100336,100337,100339,100341,100343,100345],{"class":180,"line":798},[178,100338,100274],{"class":319},[178,100340,49246],{"class":6985},[178,100342,330],{"class":699},[178,100344,2021],{"class":195},[178,100346,100141],{"class":319},[178,100348,100349],{"class":180,"line":804},[178,100350,100351],{"class":2008},"#结果：（2，3，3，4）\n",[14,100353,100355],{"id":100354},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,100357,100358],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,100360,100361],{},"①二维数组",[154,100363,100365],{"className":690,"code":100364,"language":692,"meta":160,"style":160},"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",[70,100366,100367,100391,100415,100420,100425],{"__ignoreMap":160},[178,100368,100369,100371,100373,100375,100377,100379,100381,100383,100385,100387,100389],{"class":180,"line":181},[178,100370,95021],{"class":319},[178,100372,330],{"class":699},[178,100374,94717],{"class":319},[178,100376,1665],{"class":195},[178,100378,2318],{"class":319},[178,100380,2463],{"class":195},[178,100382,94722],{"class":319},[178,100384,2021],{"class":195},[178,100386,2318],{"class":319},[178,100388,2233],{"class":195},[178,100390,863],{"class":319},[178,100392,100393,100395,100397,100399,100401,100403,100405,100407,100409,100411,100413],{"class":180,"line":263},[178,100394,99900],{"class":319},[178,100396,330],{"class":699},[178,100398,94717],{"class":319},[178,100400,2277],{"class":195},[178,100402,2318],{"class":319},[178,100404,2582],{"class":195},[178,100406,94722],{"class":319},[178,100408,2021],{"class":195},[178,100410,2318],{"class":319},[178,100412,2233],{"class":195},[178,100414,863],{"class":319},[178,100416,100417],{"class":180,"line":274},[178,100418,100419],{"class":319},"np.hstack((aa,bb))\n",[178,100421,100422],{"class":180,"line":354},[178,100423,100424],{"class":2008},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[178,100426,100427],{"class":180,"line":364},[178,100428,100429],{"class":2008},"#np.hstack([aa,bb])\n",[19,100431,99946],{},[19,100433,100434],{},[3269,100435],{"alt":160,"src":100436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,100438,100439],{},"等效于concatenate()函数中axis=1时的情况",[19,100441,100442],{},"②三维数组",[154,100444,100446],{"className":690,"code":100445,"language":692,"meta":160,"style":160},"#两个三行六列\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",[70,100447,100448,100452,100480,100508,100513,100518],{"__ignoreMap":160},[178,100449,100450],{"class":180,"line":181},[178,100451,100001],{"class":2008},[178,100453,100454,100456,100458,100460,100462,100464,100466,100468,100470,100472,100474,100476,100478],{"class":180,"line":263},[178,100455,97236],{"class":319},[178,100457,330],{"class":699},[178,100459,94717],{"class":319},[178,100461,1665],{"class":195},[178,100463,2318],{"class":319},[178,100465,2265],{"class":195},[178,100467,94722],{"class":319},[178,100469,1669],{"class":195},[178,100471,2318],{"class":319},[178,100473,2021],{"class":195},[178,100475,2318],{"class":319},[178,100477,2284],{"class":195},[178,100479,863],{"class":319},[178,100481,100482,100484,100486,100488,100490,100492,100494,100496,100498,100500,100502,100504,100506],{"class":180,"line":274},[178,100483,100034],{"class":319},[178,100485,330],{"class":699},[178,100487,94717],{"class":319},[178,100489,2277],{"class":195},[178,100491,2318],{"class":319},[178,100493,100045],{"class":195},[178,100495,94722],{"class":319},[178,100497,1669],{"class":195},[178,100499,2318],{"class":319},[178,100501,2021],{"class":195},[178,100503,2318],{"class":319},[178,100505,2284],{"class":195},[178,100507,863],{"class":319},[178,100509,100510],{"class":180,"line":354},[178,100511,100512],{"class":2008},"#使用hstack\n",[178,100514,100515],{"class":180,"line":364},[178,100516,100517],{"class":319},"np.hstack((aaa,bbb)).shape\n",[178,100519,100520],{"class":180,"line":740},[178,100521,100522],{"class":2008},"#输出：（2，6，6）\n",[14,100524,100526],{"id":100525},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,100528,100529],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,100531,100361],{},[154,100533,100535],{"className":690,"code":100534,"language":692,"meta":160,"style":160},"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",[70,100536,100537,100561,100585,100590,100595,100600],{"__ignoreMap":160},[178,100538,100539,100541,100543,100545,100547,100549,100551,100553,100555,100557,100559],{"class":180,"line":181},[178,100540,95021],{"class":319},[178,100542,330],{"class":699},[178,100544,94717],{"class":319},[178,100546,1665],{"class":195},[178,100548,2318],{"class":319},[178,100550,2463],{"class":195},[178,100552,94722],{"class":319},[178,100554,2021],{"class":195},[178,100556,2318],{"class":319},[178,100558,2233],{"class":195},[178,100560,863],{"class":319},[178,100562,100563,100565,100567,100569,100571,100573,100575,100577,100579,100581,100583],{"class":180,"line":263},[178,100564,99900],{"class":319},[178,100566,330],{"class":699},[178,100568,94717],{"class":319},[178,100570,2277],{"class":195},[178,100572,2318],{"class":319},[178,100574,2582],{"class":195},[178,100576,94722],{"class":319},[178,100578,2021],{"class":195},[178,100580,2318],{"class":319},[178,100582,2233],{"class":195},[178,100584,863],{"class":319},[178,100586,100587],{"class":180,"line":274},[178,100588,100589],{"class":2008},"#vstack 垂直方向进行堆叠\n",[178,100591,100592],{"class":180,"line":354},[178,100593,100594],{"class":319},"np.vstack((aa,bb))\n",[178,100596,100597],{"class":180,"line":364},[178,100598,100599],{"class":2008},"#与hstack传的参数类似，等价于：\n",[178,100601,100602],{"class":180,"line":740},[178,100603,100604],{"class":319},"np.vstack([aa,bb])\n",[19,100606,99946],{},[19,100608,100609],{},[3269,100610],{"alt":160,"src":100611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,100613,100442],{},[154,100615,100617],{"className":690,"code":100616,"language":692,"meta":160,"style":160},"#两个三行六列\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",[70,100618,100619,100623,100651,100679,100684,100689],{"__ignoreMap":160},[178,100620,100621],{"class":180,"line":181},[178,100622,100001],{"class":2008},[178,100624,100625,100627,100629,100631,100633,100635,100637,100639,100641,100643,100645,100647,100649],{"class":180,"line":263},[178,100626,97236],{"class":319},[178,100628,330],{"class":699},[178,100630,94717],{"class":319},[178,100632,1665],{"class":195},[178,100634,2318],{"class":319},[178,100636,2265],{"class":195},[178,100638,94722],{"class":319},[178,100640,1669],{"class":195},[178,100642,2318],{"class":319},[178,100644,2021],{"class":195},[178,100646,2318],{"class":319},[178,100648,2284],{"class":195},[178,100650,863],{"class":319},[178,100652,100653,100655,100657,100659,100661,100663,100665,100667,100669,100671,100673,100675,100677],{"class":180,"line":274},[178,100654,100034],{"class":319},[178,100656,330],{"class":699},[178,100658,94717],{"class":319},[178,100660,2277],{"class":195},[178,100662,2318],{"class":319},[178,100664,100045],{"class":195},[178,100666,94722],{"class":319},[178,100668,1669],{"class":195},[178,100670,2318],{"class":319},[178,100672,2021],{"class":195},[178,100674,2318],{"class":319},[178,100676,2284],{"class":195},[178,100678,863],{"class":319},[178,100680,100681],{"class":180,"line":354},[178,100682,100683],{"class":2008},"#使用vstack\n",[178,100685,100686],{"class":180,"line":364},[178,100687,100688],{"class":319},"np.vstack((aaa,bbb)).shape\n",[178,100690,100691],{"class":180,"line":740},[178,100692,100693],{"class":2008},"#输出：（4，3，6）\n",[14,100695,100697],{"id":100696},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,100699,100700],{},"该方法是三维数组特有的方法",[19,100702,100703],{},"也就是说",[19,100705,100706],{},"一维数组拼接方法用：concatenate()",[19,100708,100709],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,100711,100712],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,100714,100715],{},"四维数组及多维数组只能用concatenate进行拼接",[154,100717,100719],{"className":690,"code":100718,"language":692,"meta":160,"style":160},"#两个三行六列\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",[70,100720,100721,100725,100753,100781,100786,100791],{"__ignoreMap":160},[178,100722,100723],{"class":180,"line":181},[178,100724,100001],{"class":2008},[178,100726,100727,100729,100731,100733,100735,100737,100739,100741,100743,100745,100747,100749,100751],{"class":180,"line":263},[178,100728,97236],{"class":319},[178,100730,330],{"class":699},[178,100732,94717],{"class":319},[178,100734,1665],{"class":195},[178,100736,2318],{"class":319},[178,100738,2265],{"class":195},[178,100740,94722],{"class":319},[178,100742,1669],{"class":195},[178,100744,2318],{"class":319},[178,100746,2021],{"class":195},[178,100748,2318],{"class":319},[178,100750,2284],{"class":195},[178,100752,863],{"class":319},[178,100754,100755,100757,100759,100761,100763,100765,100767,100769,100771,100773,100775,100777,100779],{"class":180,"line":274},[178,100756,100034],{"class":319},[178,100758,330],{"class":699},[178,100760,94717],{"class":319},[178,100762,2277],{"class":195},[178,100764,2318],{"class":319},[178,100766,100045],{"class":195},[178,100768,94722],{"class":319},[178,100770,1669],{"class":195},[178,100772,2318],{"class":319},[178,100774,2021],{"class":195},[178,100776,2318],{"class":319},[178,100778,2284],{"class":195},[178,100780,863],{"class":319},[178,100782,100783],{"class":180,"line":354},[178,100784,100785],{"class":2008},"#使用dstack\n",[178,100787,100788],{"class":180,"line":364},[178,100789,100790],{"class":319},"np.dstack((aaa,bbb)).shape\n",[178,100792,100793],{"class":180,"line":740},[178,100794,100795],{"class":2008},"#结果：（2，3，12）\n",[1853,100797,100798],{},"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":160,"searchDepth":263,"depth":263,"links":100800},[100801,100802,100803,100804],{"id":99740,"depth":263,"text":99741},{"id":100354,"depth":263,"text":100355},{"id":100525,"depth":263,"text":100526},{"id":100696,"depth":263,"text":100697},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99732,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":100811,"title":100812,"body":100813,"description":25135,"extension":1880,"meta":101088,"navigation":721,"path":101089,"seo":101090,"stem":101091,"__hash__":101092},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":100814,"toc":101086},[100815,100818,100821,100915,100918,100921,100924,100927,100930,100933,100936,100939,101083],[10,100816,100812],{"id":100817},"_7数组转置",[19,100819,100820],{},"使用transpose()函数",[154,100822,100824],{"className":690,"code":100823,"language":692,"meta":160,"style":160},"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",[70,100825,100826,100836,100860,100865,100870,100875,100880,100888,100892,100896,100901,100906,100911],{"__ignoreMap":160},[178,100827,100828,100830,100832,100834],{"class":180,"line":181},[178,100829,700],{"class":699},[178,100831,710],{"class":319},[178,100833,713],{"class":699},[178,100835,716],{"class":319},[178,100837,100838,100840,100842,100844,100846,100848,100850,100852,100854,100856,100858],{"class":180,"line":263},[178,100839,2178],{"class":319},[178,100841,330],{"class":699},[178,100843,33452],{"class":319},[178,100845,1665],{"class":195},[178,100847,2318],{"class":319},[178,100849,2463],{"class":195},[178,100851,94722],{"class":319},[178,100853,2233],{"class":195},[178,100855,2318],{"class":319},[178,100857,2021],{"class":195},[178,100859,863],{"class":319},[178,100861,100862],{"class":180,"line":274},[178,100863,100864],{"class":2008},"#二维数组转置\n",[178,100866,100867],{"class":180,"line":354},[178,100868,100869],{"class":2008},"#调用transpose()函数\n",[178,100871,100872],{"class":180,"line":364},[178,100873,100874],{"class":319},"a.transpose()\n",[178,100876,100877],{"class":180,"line":740},[178,100878,100879],{"class":2008},"#对于二维数组也可以采用.T来实现\n",[178,100881,100882,100885],{"class":180,"line":746},[178,100883,100884],{"class":319},"a.T",[178,100886,100887],{"class":2008},"#与上述代码一样\n",[178,100889,100890],{"class":180,"line":752},[178,100891,95279],{"class":2008},[178,100893,100894],{"class":180,"line":757},[178,100895,95643],{"class":188},[178,100897,100898],{"class":180,"line":763},[178,100899,100900],{"class":188},"array([[ 1,  4,  7, 10],\n",[178,100902,100903],{"class":180,"line":769},[178,100904,100905],{"class":188},"       [ 2,  5,  8, 11],\n",[178,100907,100908],{"class":180,"line":774},[178,100909,100910],{"class":188},"       [ 3,  6,  9, 12]])\n",[178,100912,100913],{"class":180,"line":780},[178,100914,95643],{"class":188},[19,100916,100917],{},"也可以使用np.transpose()的形式",[19,100919,100920],{},"#多维数组进行转置 np.transpose()",[19,100922,100923],{},"#对二维数组也可以使用np.transpose()进行转置",[19,100925,100926],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,100928,100929],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,100931,100932],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,100934,100935],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,100937,100938],{},"四维及以上的数组也是一样的道理",[154,100940,100942],{"className":690,"code":100941,"language":692,"meta":160,"style":160},"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",[70,100943,100944,100972,100977,100982,100987,101005,101010,101042,101047,101052,101057,101078],{"__ignoreMap":160},[178,100945,100946,100948,100950,100952,100954,100956,100958,100960,100962,100964,100966,100968,100970],{"class":180,"line":181},[178,100947,2760],{"class":319},[178,100949,330],{"class":699},[178,100951,94717],{"class":319},[178,100953,1665],{"class":195},[178,100955,2318],{"class":319},[178,100957,2265],{"class":195},[178,100959,94722],{"class":319},[178,100961,2021],{"class":195},[178,100963,2318],{"class":319},[178,100965,2284],{"class":195},[178,100967,2318],{"class":319},[178,100969,1669],{"class":195},[178,100971,863],{"class":319},[178,100973,100974],{"class":180,"line":263},[178,100975,100976],{"class":319},"x.shape\n",[178,100978,100979],{"class":180,"line":274},[178,100980,100981],{"class":2008},"#结果：（3,6,2）\n",[178,100983,100984],{"class":180,"line":354},[178,100985,100986],{"class":2008},"#使用np.transpose()进行转置 变为(2,6,3)\n",[178,100988,100989,100992,100994,100996,100998,101000,101002],{"class":180,"line":364},[178,100990,100991],{"class":319},"np.transpose(x,(",[178,100993,1669],{"class":195},[178,100995,2318],{"class":319},[178,100997,1665],{"class":195},[178,100999,2318],{"class":319},[178,101001,2133],{"class":195},[178,101003,101004],{"class":319},")).shape\n",[178,101006,101007],{"class":180,"line":740},[178,101008,101009],{"class":2008},"#结果：(2,6,3)\n",[178,101011,101012,101014,101016,101018,101020,101022,101024,101026,101028,101030,101032,101034,101036,101038,101040],{"class":180,"line":746},[178,101013,100219],{"class":319},[178,101015,330],{"class":699},[178,101017,94717],{"class":319},[178,101019,1665],{"class":195},[178,101021,2318],{"class":319},[178,101023,2265],{"class":195},[178,101025,94722],{"class":319},[178,101027,2021],{"class":195},[178,101029,2318],{"class":319},[178,101031,1669],{"class":195},[178,101033,2318],{"class":319},[178,101035,1665],{"class":195},[178,101037,2318],{"class":319},[178,101039,2284],{"class":195},[178,101041,863],{"class":319},[178,101043,101044],{"class":180,"line":752},[178,101045,101046],{"class":319},"aaaa.shape\n",[178,101048,101049],{"class":180,"line":757},[178,101050,101051],{"class":2008},"#结果：（3，2，1，6）\n",[178,101053,101054],{"class":180,"line":763},[178,101055,101056],{"class":2008},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[178,101058,101059,101062,101064,101066,101068,101070,101072,101074,101076],{"class":180,"line":769},[178,101060,101061],{"class":319},"np.transpose(aaaa,(",[178,101063,1665],{"class":195},[178,101065,2318],{"class":319},[178,101067,1669],{"class":195},[178,101069,2318],{"class":319},[178,101071,2133],{"class":195},[178,101073,2318],{"class":319},[178,101075,2021],{"class":195},[178,101077,101004],{"class":319},[178,101079,101080],{"class":180,"line":774},[178,101081,101082],{"class":2008},"#结果：(2,1,3,6)\n",[1853,101084,101085],{},"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":160,"searchDepth":263,"depth":263,"links":101087},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":100812,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101094,"title":101095,"body":101096,"description":25135,"extension":1880,"meta":101830,"navigation":721,"path":101831,"seo":101832,"stem":101833,"__hash__":101834},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101097,"toc":101828},[101098,101101,101104,101107,101110,101113,101116,101119,101122,101231,101234,101237,101825],[10,101099,101095],{"id":101100},"_8数组分割",[19,101102,101103],{},"split分割",[19,101105,101106],{},"numpy.split(ary,indics_or_sections,axis)",[19,101108,101109],{},"解释：",[19,101111,101112],{},"ary:被分割的数组",[19,101114,101115],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,101117,101118],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,101120,101121],{},"①一维数组的分割",[154,101123,101125],{"className":690,"code":101124,"language":692,"meta":160,"style":160},"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",[70,101126,101127,101143,101148,101157,101161,101166,101174,101178,101183,101188,101201,101205,101210,101222,101226],{"__ignoreMap":160},[178,101128,101129,101131,101133,101135,101137,101139,101141],{"class":180,"line":181},[178,101130,2178],{"class":319},[178,101132,330],{"class":699},[178,101134,94717],{"class":319},[178,101136,1665],{"class":195},[178,101138,2318],{"class":319},[178,101140,2360],{"class":195},[178,101142,863],{"class":319},[178,101144,101145],{"class":180,"line":263},[178,101146,101147],{"class":2008},"#如果传入整数，必须能够平分，否则会报错\n",[178,101149,101150,101153,101155],{"class":180,"line":274},[178,101151,101152],{"class":319},"np.split(a,",[178,101154,1669],{"class":195},[178,101156,863],{"class":319},[178,101158,101159],{"class":180,"line":354},[178,101160,95279],{"class":2008},[178,101162,101163],{"class":180,"line":364},[178,101164,101165],{"class":2008},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[178,101167,101168,101170,101172],{"class":180,"line":740},[178,101169,101152],{"class":319},[178,101171,2233],{"class":195},[178,101173,863],{"class":319},[178,101175,101176],{"class":180,"line":746},[178,101177,95279],{"class":2008},[178,101179,101180],{"class":180,"line":752},[178,101181,101182],{"class":2008},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[178,101184,101185],{"class":180,"line":757},[178,101186,101187],{"class":2008},"#传入数组\n",[178,101189,101190,101193,101195,101197,101199],{"class":180,"line":763},[178,101191,101192],{"class":319},"np.split(a,[",[178,101194,2021],{"class":195},[178,101196,2318],{"class":319},[178,101198,2259],{"class":195},[178,101200,6428],{"class":319},[178,101202,101203],{"class":180,"line":769},[178,101204,95279],{"class":2008},[178,101206,101207],{"class":180,"line":774},[178,101208,101209],{"class":2008},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[178,101211,101212,101214,101216,101218,101220],{"class":180,"line":780},[178,101213,101192],{"class":319},[178,101215,2259],{"class":195},[178,101217,2318],{"class":319},[178,101219,2309],{"class":195},[178,101221,6428],{"class":319},[178,101223,101224],{"class":180,"line":786},[178,101225,95279],{"class":2008},[178,101227,101228],{"class":180,"line":792},[178,101229,101230],{"class":2008},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,101232,101233],{},"②二维数组的分割",[19,101235,101236],{},"使用split()",[154,101238,101240],{"className":690,"code":101239,"language":692,"meta":160,"style":160},"#二维数组分割\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",[70,101241,101242,101247,101271,101276,101285,101289,101293,101298,101303,101308,101313,101318,101323,101328,101332,101345,101349,101353,101357,101361,101365,101370,101375,101380,101384,101389,101405,101409,101413,101418,101423,101428,101433,101438,101443,101448,101453,101458,101463,101468,101473,101478,101483,101488,101493,101498,101503,101507,101511,101531,101535,101539,101544,101549,101554,101559,101564,101569,101574,101579,101584,101589,101594,101599,101604,101609,101614,101619,101624,101629,101633,101638,101647,101651,101655,101659,101663,101667,101671,101675,101679,101683,101692,101696,101700,101704,101708,101712,101716,101720,101724,101728,101732,101736,101740,101744,101748,101752,101756,101760,101764,101768,101772,101776,101789,101793,101797,101801,101805,101809,101813,101817,101821],{"__ignoreMap":160},[178,101243,101244],{"class":180,"line":181},[178,101245,101246],{"class":2008},"#二维数组分割\n",[178,101248,101249,101251,101253,101255,101257,101259,101261,101263,101265,101267,101269],{"class":180,"line":263},[178,101250,95021],{"class":319},[178,101252,330],{"class":699},[178,101254,94717],{"class":319},[178,101256,1665],{"class":195},[178,101258,2318],{"class":319},[178,101260,2265],{"class":195},[178,101262,94722],{"class":319},[178,101264,2284],{"class":195},[178,101266,2318],{"class":319},[178,101268,2284],{"class":195},[178,101270,863],{"class":319},[178,101272,101273],{"class":180,"line":274},[178,101274,101275],{"class":2008},"#默认axis=0  传入整数平均分,按行来的\n",[178,101277,101278,101281,101283],{"class":180,"line":354},[178,101279,101280],{"class":319},"np.split(aa,",[178,101282,2021],{"class":195},[178,101284,863],{"class":319},[178,101286,101287],{"class":180,"line":364},[178,101288,97477],{"class":2008},[178,101290,101291],{"class":180,"line":740},[178,101292,95643],{"class":188},[178,101294,101295],{"class":180,"line":746},[178,101296,101297],{"class":188},"[array([[ 1,  2,  3,  4,  5,  6],\n",[178,101299,101300],{"class":180,"line":752},[178,101301,101302],{"class":188},"        [ 7,  8,  9, 10, 11, 12]]),\n",[178,101304,101305],{"class":180,"line":757},[178,101306,101307],{"class":188}," array([[13, 14, 15, 16, 17, 18],\n",[178,101309,101310],{"class":180,"line":763},[178,101311,101312],{"class":188},"        [19, 20, 21, 22, 23, 24]]),\n",[178,101314,101315],{"class":180,"line":769},[178,101316,101317],{"class":188}," array([[25, 26, 27, 28, 29, 30],\n",[178,101319,101320],{"class":180,"line":774},[178,101321,101322],{"class":188},"        [31, 32, 33, 34, 35, 36]])]\n",[178,101324,101325],{"class":180,"line":780},[178,101326,101327],{"class":188}," '''\n",[178,101329,101330],{"class":180,"line":786},[178,101331,101187],{"class":2008},[178,101333,101334,101337,101339,101341,101343],{"class":180,"line":792},[178,101335,101336],{"class":319},"np.split(aa,[",[178,101338,1669],{"class":195},[178,101340,2318],{"class":319},[178,101342,2259],{"class":195},[178,101344,6428],{"class":319},[178,101346,101347],{"class":180,"line":798},[178,101348,97477],{"class":2008},[178,101350,101351],{"class":180,"line":804},[178,101352,95643],{"class":188},[178,101354,101355],{"class":180,"line":810},[178,101356,101297],{"class":188},[178,101358,101359],{"class":180,"line":816},[178,101360,101302],{"class":188},[178,101362,101363],{"class":180,"line":822},[178,101364,101307],{"class":188},[178,101366,101367],{"class":180,"line":827},[178,101368,101369],{"class":188},"        [19, 20, 21, 22, 23, 24],\n",[178,101371,101372],{"class":180,"line":832},[178,101373,101374],{"class":188},"        [25, 26, 27, 28, 29, 30]]),\n",[178,101376,101377],{"class":180,"line":850},[178,101378,101379],{"class":188}," array([[31, 32, 33, 34, 35, 36]])]\n",[178,101381,101382],{"class":180,"line":866},[178,101383,95643],{"class":188},[178,101385,101386],{"class":180,"line":877},[178,101387,101388],{"class":2008},"#axis=1 按照列来分\n",[178,101390,101391,101393,101395,101397,101399,101401,101403],{"class":180,"line":882},[178,101392,101280],{"class":319},[178,101394,2021],{"class":195},[178,101396,2318],{"class":319},[178,101398,49246],{"class":6985},[178,101400,330],{"class":699},[178,101402,1665],{"class":195},[178,101404,863],{"class":319},[178,101406,101407],{"class":180,"line":898},[178,101408,97477],{"class":2008},[178,101410,101411],{"class":180,"line":914},[178,101412,95643],{"class":188},[178,101414,101415],{"class":180,"line":919},[178,101416,101417],{"class":188},"[array([[ 1,  2],\n",[178,101419,101420],{"class":180,"line":935},[178,101421,101422],{"class":188},"        [ 7,  8],\n",[178,101424,101425],{"class":180,"line":952},[178,101426,101427],{"class":188},"        [13, 14],\n",[178,101429,101430],{"class":180,"line":966},[178,101431,101432],{"class":188},"        [19, 20],\n",[178,101434,101435],{"class":180,"line":980},[178,101436,101437],{"class":188},"        [25, 26],\n",[178,101439,101440],{"class":180,"line":985},[178,101441,101442],{"class":188},"        [31, 32]]),\n",[178,101444,101445],{"class":180,"line":1008},[178,101446,101447],{"class":188}," array([[ 3,  4],\n",[178,101449,101450],{"class":180,"line":1014},[178,101451,101452],{"class":188},"        [ 9, 10],\n",[178,101454,101455],{"class":180,"line":1019},[178,101456,101457],{"class":188},"        [15, 16],\n",[178,101459,101460],{"class":180,"line":1033},[178,101461,101462],{"class":188},"        [21, 22],\n",[178,101464,101465],{"class":180,"line":1046},[178,101466,101467],{"class":188},"        [27, 28],\n",[178,101469,101470],{"class":180,"line":1059},[178,101471,101472],{"class":188},"        [33, 34]]),\n",[178,101474,101475],{"class":180,"line":1072},[178,101476,101477],{"class":188}," array([[ 5,  6],\n",[178,101479,101480],{"class":180,"line":1077},[178,101481,101482],{"class":188},"        [11, 12],\n",[178,101484,101485],{"class":180,"line":1082},[178,101486,101487],{"class":188},"        [17, 18],\n",[178,101489,101490],{"class":180,"line":1099},[178,101491,101492],{"class":188},"        [23, 24],\n",[178,101494,101495],{"class":180,"line":9806},[178,101496,101497],{"class":188},"        [29, 30],\n",[178,101499,101500],{"class":180,"line":9818},[178,101501,101502],{"class":188},"        [35, 36]])]\n",[178,101504,101505],{"class":180,"line":11477},[178,101506,101327],{"class":188},[178,101508,101509],{"class":180,"line":11502},[178,101510,101187],{"class":2008},[178,101512,101513,101515,101517,101519,101521,101523,101525,101527,101529],{"class":180,"line":11525},[178,101514,101336],{"class":319},[178,101516,1665],{"class":195},[178,101518,2318],{"class":319},[178,101520,1669],{"class":195},[178,101522,43341],{"class":319},[178,101524,49246],{"class":6985},[178,101526,330],{"class":699},[178,101528,1665],{"class":195},[178,101530,863],{"class":319},[178,101532,101533],{"class":180,"line":11549},[178,101534,95279],{"class":2008},[178,101536,101537],{"class":180,"line":11554},[178,101538,95643],{"class":188},[178,101540,101541],{"class":180,"line":11559},[178,101542,101543],{"class":188},"[array([[ 1],\n",[178,101545,101546],{"class":180,"line":11564},[178,101547,101548],{"class":188},"        [ 7],\n",[178,101550,101551],{"class":180,"line":11573},[178,101552,101553],{"class":188},"        [13],\n",[178,101555,101556],{"class":180,"line":11578},[178,101557,101558],{"class":188},"        [19],\n",[178,101560,101561],{"class":180,"line":11584},[178,101562,101563],{"class":188},"        [25],\n",[178,101565,101566],{"class":180,"line":11605},[178,101567,101568],{"class":188},"        [31]]),\n",[178,101570,101571],{"class":180,"line":11611},[178,101572,101573],{"class":188}," array([[ 2],\n",[178,101575,101576],{"class":180,"line":11625},[178,101577,101578],{"class":188},"        [ 8],\n",[178,101580,101581],{"class":180,"line":11631},[178,101582,101583],{"class":188},"        [14],\n",[178,101585,101586],{"class":180,"line":11658},[178,101587,101588],{"class":188},"        [20],\n",[178,101590,101591],{"class":180,"line":11667},[178,101592,101593],{"class":188},"        [26],\n",[178,101595,101596],{"class":180,"line":11673},[178,101597,101598],{"class":188},"        [32]]),\n",[178,101600,101601],{"class":180,"line":11681},[178,101602,101603],{"class":188}," array([[ 3,  4,  5,  6],\n",[178,101605,101606],{"class":180,"line":11686},[178,101607,101608],{"class":188},"        [ 9, 10, 11, 12],\n",[178,101610,101611],{"class":180,"line":18362},[178,101612,101613],{"class":188},"        [15, 16, 17, 18],\n",[178,101615,101616],{"class":180,"line":18368},[178,101617,101618],{"class":188},"        [21, 22, 23, 24],\n",[178,101620,101621],{"class":180,"line":18391},[178,101622,101623],{"class":188},"        [27, 28, 29, 30],\n",[178,101625,101626],{"class":180,"line":18397},[178,101627,101628],{"class":188},"        [33, 34, 35, 36]])]\n",[178,101630,101631],{"class":180,"line":18420},[178,101632,95643],{"class":188},[178,101634,101635],{"class":180,"line":18434},[178,101636,101637],{"class":2008},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[178,101639,101640,101643,101645],{"class":180,"line":18454},[178,101641,101642],{"class":319},"np.vsplit(aa,",[178,101644,2021],{"class":195},[178,101646,863],{"class":319},[178,101648,101649],{"class":180,"line":18460},[178,101650,95279],{"class":2008},[178,101652,101653],{"class":180,"line":18471},[178,101654,95643],{"class":188},[178,101656,101657],{"class":180,"line":18494},[178,101658,101297],{"class":188},[178,101660,101661],{"class":180,"line":18516},[178,101662,101302],{"class":188},[178,101664,101665],{"class":180,"line":18521},[178,101666,101307],{"class":188},[178,101668,101669],{"class":180,"line":18527},[178,101670,101312],{"class":188},[178,101672,101673],{"class":180,"line":18541},[178,101674,101317],{"class":188},[178,101676,101677],{"class":180,"line":18554},[178,101678,101322],{"class":188},[178,101680,101681],{"class":180,"line":18559},[178,101682,95643],{"class":188},[178,101684,101685,101688,101690],{"class":180,"line":18573},[178,101686,101687],{"class":319},"np.hsplit(aa,",[178,101689,2021],{"class":195},[178,101691,863],{"class":319},[178,101693,101694],{"class":180,"line":18578},[178,101695,95279],{"class":2008},[178,101697,101698],{"class":180,"line":18584},[178,101699,95643],{"class":188},[178,101701,101702],{"class":180,"line":18589},[178,101703,101417],{"class":188},[178,101705,101706],{"class":180,"line":18603},[178,101707,101422],{"class":188},[178,101709,101710],{"class":180,"line":18608},[178,101711,101427],{"class":188},[178,101713,101714],{"class":180,"line":18613},[178,101715,101432],{"class":188},[178,101717,101718],{"class":180,"line":18627},[178,101719,101437],{"class":188},[178,101721,101722],{"class":180,"line":18639},[178,101723,101442],{"class":188},[178,101725,101726],{"class":180,"line":18644},[178,101727,101447],{"class":188},[178,101729,101730],{"class":180,"line":18657},[178,101731,101452],{"class":188},[178,101733,101734],{"class":180,"line":18662},[178,101735,101457],{"class":188},[178,101737,101738],{"class":180,"line":18667},[178,101739,101462],{"class":188},[178,101741,101742],{"class":180,"line":18672},[178,101743,101467],{"class":188},[178,101745,101746],{"class":180,"line":18685},[178,101747,101472],{"class":188},[178,101749,101750],{"class":180,"line":18690},[178,101751,101477],{"class":188},[178,101753,101754],{"class":180,"line":34365},[178,101755,101482],{"class":188},[178,101757,101758],{"class":180,"line":34371},[178,101759,101487],{"class":188},[178,101761,101762],{"class":180,"line":34377},[178,101763,101492],{"class":188},[178,101765,101766],{"class":180,"line":34383},[178,101767,101497],{"class":188},[178,101769,101770],{"class":180,"line":34389},[178,101771,101502],{"class":188},[178,101773,101774],{"class":180,"line":34400},[178,101775,95643],{"class":188},[178,101777,101778,101781,101783,101785,101787],{"class":180,"line":34406},[178,101779,101780],{"class":319},"np.vsplit(aa,[",[178,101782,1669],{"class":195},[178,101784,2318],{"class":319},[178,101786,2259],{"class":195},[178,101788,6428],{"class":319},[178,101790,101791],{"class":180,"line":34426},[178,101792,95279],{"class":2008},[178,101794,101795],{"class":180,"line":34432},[178,101796,95643],{"class":188},[178,101798,101799],{"class":180,"line":34443},[178,101800,101297],{"class":188},[178,101802,101803],{"class":180,"line":34449},[178,101804,101302],{"class":188},[178,101806,101807],{"class":180,"line":34455},[178,101808,101307],{"class":188},[178,101810,101811],{"class":180,"line":34461},[178,101812,101369],{"class":188},[178,101814,101815],{"class":180,"line":34467},[178,101816,101374],{"class":188},[178,101818,101819],{"class":180,"line":34473},[178,101820,101379],{"class":188},[178,101822,101823],{"class":180,"line":34479},[178,101824,101327],{"class":188},[1853,101826,101827],{},"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":160,"searchDepth":263,"depth":263,"links":101829},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101095,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":101836,"title":101837,"body":101838,"description":25135,"extension":1880,"meta":102332,"navigation":721,"path":102333,"seo":102334,"stem":102335,"__hash__":102336},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":101839,"toc":102323},[101840,101843,101846,101871,101875,101934,101986,101990,101992,102028,102082,102084,102122,102193,102197,102202,102206,102209,102242,102245,102249,102252,102255,102258,102261,102266,102270,102273,102276,102279,102282,102287,102291,102296,102299,102320],[10,101841,101837],{"id":101842},"_9数学函数",[19,101844,101845],{},"补充回顾：python的列表推导式",[154,101847,101849],{"className":690,"code":101848,"language":692,"meta":160,"style":160},"[1\u002Fi for i in a]\n",[70,101850,101851],{"__ignoreMap":160},[178,101852,101853,101855,101857,101859,101862,101864,101866,101868],{"class":180,"line":181},[178,101854,2830],{"class":319},[178,101856,1665],{"class":195},[178,101858,2524],{"class":699},[178,101860,101861],{"class":319},"i ",[178,101863,1474],{"class":699},[178,101865,11199],{"class":319},[178,101867,994],{"class":699},[178,101869,101870],{"class":319}," a]\n",[14,101872,101874],{"id":101873},"_91-求倒数","9.1 求倒数",[154,101876,101878],{"className":690,"code":101877,"language":692,"meta":160,"style":160},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[70,101879,101880,101885,101913,101925],{"__ignoreMap":160},[178,101881,101882],{"class":180,"line":181},[178,101883,101884],{"class":2008},"#数组求倒数\n",[178,101886,101887,101889,101891,101893,101895,101897,101899,101901,101903,101905,101907,101909,101911],{"class":180,"line":263},[178,101888,2178],{"class":319},[178,101890,330],{"class":699},[178,101892,2830],{"class":319},[178,101894,1665],{"class":195},[178,101896,2318],{"class":319},[178,101898,1669],{"class":195},[178,101900,2318],{"class":319},[178,101902,2021],{"class":195},[178,101904,2318],{"class":319},[178,101906,2233],{"class":195},[178,101908,2318],{"class":319},[178,101910,2259],{"class":195},[178,101912,34978],{"class":319},[178,101914,101915,101917,101919,101922],{"class":180,"line":274},[178,101916,2203],{"class":319},[178,101918,330],{"class":699},[178,101920,101921],{"class":319},"np.array(a)",[178,101923,101924],{"class":2008},"#将列表转换为数组\n",[178,101926,101927,101929,101931],{"class":180,"line":354},[178,101928,1665],{"class":195},[178,101930,2524],{"class":699},[178,101932,101933],{"class":319},"b\n",[154,101935,101937],{"className":690,"code":101936,"language":692,"meta":160,"style":160},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[70,101938,101939,101967,101976,101981],{"__ignoreMap":160},[178,101940,101941,101943,101945,101947,101949,101951,101953,101955,101957,101959,101961,101963,101965],{"class":180,"line":181},[178,101942,2178],{"class":319},[178,101944,330],{"class":699},[178,101946,2830],{"class":319},[178,101948,1665],{"class":195},[178,101950,2318],{"class":319},[178,101952,1669],{"class":195},[178,101954,2318],{"class":319},[178,101956,2021],{"class":195},[178,101958,2318],{"class":319},[178,101960,2233],{"class":195},[178,101962,2318],{"class":319},[178,101964,2259],{"class":195},[178,101966,34978],{"class":319},[178,101968,101969,101971,101973],{"class":180,"line":263},[178,101970,2203],{"class":319},[178,101972,330],{"class":699},[178,101974,101975],{"class":319},"np.array(a)\n",[178,101977,101978],{"class":180,"line":274},[178,101979,101980],{"class":2008},"#调用numpy中的函数reciprocal()\n",[178,101982,101983],{"class":180,"line":354},[178,101984,101985],{"class":319},"np.reciprocal(b)\n",[14,101987,101989],{"id":101988},"_92-求平方","9.2 求平方",[19,101991,96245],{},[154,101993,101995],{"className":690,"code":101994,"language":692,"meta":160,"style":160},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[70,101996,101997,102002,102007,102023],{"__ignoreMap":160},[178,101998,101999],{"class":180,"line":181},[178,102000,102001],{"class":2008},"#square()，求平方\n",[178,102003,102004],{"class":180,"line":263},[178,102005,102006],{"class":2008},"#一维数组\n",[178,102008,102009,102011,102013,102015,102017,102019,102021],{"class":180,"line":274},[178,102010,2178],{"class":319},[178,102012,330],{"class":699},[178,102014,94717],{"class":319},[178,102016,1665],{"class":195},[178,102018,2318],{"class":319},[178,102020,2386],{"class":195},[178,102022,863],{"class":319},[178,102024,102025],{"class":180,"line":354},[178,102026,102027],{"class":319},"np.square(a)\n",[154,102029,102031],{"className":690,"code":102030,"language":692,"meta":160,"style":160},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[70,102032,102033,102038,102043,102064],{"__ignoreMap":160},[178,102034,102035],{"class":180,"line":181},[178,102036,102037],{"class":2008},"#或者通过循环遍历的形式来计算\n",[178,102039,102040],{"class":180,"line":263},[178,102041,102042],{"class":2008},"#这是一个列表\n",[178,102044,102045,102048,102050,102052,102054,102056,102058,102061],{"class":180,"line":274},[178,102046,102047],{"class":319},"[i",[178,102049,2395],{"class":699},[178,102051,101861],{"class":319},[178,102053,1474],{"class":699},[178,102055,11199],{"class":319},[178,102057,994],{"class":699},[178,102059,102060],{"class":319}," a]",[178,102062,102063],{"class":2008},"#这个求完之后在数列当中\n",[178,102065,102066,102069,102071,102073,102075,102077,102079],{"class":180,"line":354},[178,102067,102068],{"class":319},"np.array([i",[178,102070,2395],{"class":699},[178,102072,101861],{"class":319},[178,102074,1474],{"class":699},[178,102076,11199],{"class":319},[178,102078,994],{"class":699},[178,102080,102081],{"class":319}," a])\n",[19,102083,95006],{},[154,102085,102087],{"className":690,"code":102086,"language":692,"meta":160,"style":160},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[70,102088,102089,102093,102117],{"__ignoreMap":160},[178,102090,102091],{"class":180,"line":181},[178,102092,95016],{"class":2008},[178,102094,102095,102097,102099,102101,102103,102105,102107,102109,102111,102113,102115],{"class":180,"line":263},[178,102096,95021],{"class":319},[178,102098,330],{"class":699},[178,102100,94717],{"class":319},[178,102102,1665],{"class":195},[178,102104,2318],{"class":319},[178,102106,2463],{"class":195},[178,102108,94722],{"class":319},[178,102110,2233],{"class":195},[178,102112,2318],{"class":319},[178,102114,2021],{"class":195},[178,102116,863],{"class":319},[178,102118,102119],{"class":180,"line":274},[178,102120,102121],{"class":319},"np.square(aa)\n",[154,102123,102125],{"className":690,"code":102124,"language":692,"meta":160,"style":160},"#传统的方式\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",[70,102126,102127,102132,102141,102157,102173,102188],{"__ignoreMap":160},[178,102128,102129],{"class":180,"line":181},[178,102130,102131],{"class":2008},"#传统的方式\n",[178,102133,102134,102136,102138],{"class":180,"line":263},[178,102135,99900],{"class":319},[178,102137,330],{"class":699},[178,102139,102140],{"class":319},"np.empty_like(aa)\n",[178,102142,102143,102145,102147,102149,102151,102153,102155],{"class":180,"line":274},[178,102144,1474],{"class":699},[178,102146,11199],{"class":319},[178,102148,994],{"class":699},[178,102150,997],{"class":195},[178,102152,944],{"class":319},[178,102154,2233],{"class":195},[178,102156,1005],{"class":319},[178,102158,102159,102161,102163,102165,102167,102169,102171],{"class":180,"line":354},[178,102160,988],{"class":699},[178,102162,11261],{"class":319},[178,102164,994],{"class":699},[178,102166,997],{"class":195},[178,102168,944],{"class":319},[178,102170,2021],{"class":195},[178,102172,1005],{"class":319},[178,102174,102175,102178,102180,102183,102185],{"class":180,"line":364},[178,102176,102177],{"class":319},"        bb[i,j]",[178,102179,330],{"class":699},[178,102181,102182],{"class":319},"aa[i,j]",[178,102184,2395],{"class":699},[178,102186,102187],{"class":319},"aa[i,j]\n",[178,102189,102190],{"class":180,"line":740},[178,102191,102192],{"class":319},"bb\n",[14,102194,102196],{"id":102195},"_93-求各元素的符号","9.3 求各元素的符号",[19,102198,102199],{},[3269,102200],{"alt":160,"src":102201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102203,102205],{"id":102204},"_94-modf函数","9.4 modf函数",[19,102207,102208],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[154,102210,102212],{"className":690,"code":102211,"language":692,"meta":160,"style":160},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[70,102213,102214,102237],{"__ignoreMap":160},[178,102215,102216,102218,102220,102222,102224,102226,102228,102230,102232,102235],{"class":180,"line":181},[178,102217,2178],{"class":319},[178,102219,330],{"class":699},[178,102221,94717],{"class":319},[178,102223,2472],{"class":699},[178,102225,2386],{"class":195},[178,102227,2318],{"class":319},[178,102229,2386],{"class":195},[178,102231,2318],{"class":319},[178,102233,102234],{"class":195},"0.3",[178,102236,863],{"class":319},[178,102238,102239],{"class":180,"line":263},[178,102240,102241],{"class":319},"np.modf(a)\n",[19,102243,102244],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102246,102248],{"id":102247},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,102250,102251],{},"np.cell()",[19,102253,102254],{},"np.floor()",[19,102256,102257],{},"np.rint()",[19,102259,102260],{},"对各元素分别向上取整、向下取整、四舍五入",[19,102262,102263],{},[3269,102264],{"alt":160,"src":102265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102267,102269],{"id":102268},"_96-around函数","9.6 around()函数",[19,102271,102272],{},"around()函数也可以实现对数的小数位数进行操作",[19,102274,102275],{},"其中的参数：",[19,102277,102278],{},"1.要传的数组",[19,102280,102281],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,102283,102284],{},[3269,102285],{"alt":160,"src":102286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102288,102290],{"id":102289},"_97-三角函数","9.7 三角函数",[19,102292,102293],{},[3269,102294],{"alt":160,"src":102295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,102297,102298],{},"引入图像模块非常重要",[154,102300,102302],{"className":690,"code":102301,"language":692,"meta":160,"style":160},"from matplotlib import pyplot as plt\n",[70,102303,102304],{"__ignoreMap":160},[178,102305,102306,102308,102311,102313,102316,102318],{"class":180,"line":181},[178,102307,32479],{"class":699},[178,102309,102310],{"class":319}," matplotlib ",[178,102312,700],{"class":699},[178,102314,102315],{"class":319}," pyplot ",[178,102317,713],{"class":699},[178,102319,33173],{"class":319},[1853,102321,102322],{},"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":160,"searchDepth":263,"depth":263,"links":102324},[102325,102326,102327,102328,102329,102330,102331],{"id":101873,"depth":263,"text":101874},{"id":101988,"depth":263,"text":101989},{"id":102195,"depth":263,"text":102196},{"id":102204,"depth":263,"text":102205},{"id":102247,"depth":263,"text":102248},{"id":102268,"depth":263,"text":102269},{"id":102289,"depth":263,"text":102290},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":101837,"description":25135},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102338,"title":102339,"body":102340,"description":25135,"extension":1880,"meta":102344,"navigation":721,"path":102345,"seo":102346,"stem":102347,"__hash__":102348},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102341,"toc":102342},[],{"title":160,"searchDepth":263,"depth":263,"links":102343},[],{"category":52152},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102339,"description":25135},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102350,"title":102351,"body":102352,"description":160,"extension":1880,"meta":104279,"navigation":721,"path":104280,"seo":104281,"stem":104282,"__hash__":104283},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102353,"toc":104255},[102354,102357,102359,102362,102365,102371,102374,102397,102400,102433,102436,102477,102479,102481,102573,102576,102620,102623,102637,102640,102654,102657,102660,102701,102703,102737,102739,102742,102748,102753,102771,102775,102778,102838,102841,102858,102862,102865,102894,102903,102909,102913,102916,102922,102933,102935,102938,102967,102970,103231,103233,103236,103247,103250,103253,103273,103279,103282,103300,103303,103306,103320,103328,103331,103356,103362,103364,103367,103377,103389,103409,103418,103437,103447,103471,103484,103497,103502,103543,103560,103585,103597,103616,103622,103667,103684,103701,103714,103730,103736,103748,103757,103792,103813,103838,103851,103875,103890,103915,103918,103939,103948,103950,103961,103963,103966,103972,103984,103991,103993,103996,104008,104011,104025,104028,104038,104048,104051,104089,104092,104094,104100,104103,104117,104121,104124,104155,104159,104161,104182,104190,104193,104199,104205,104208,104211,104238,104240,104243,104249,104252],[10,102355,102351],{"id":102356},"_1环境安装与第一个-mujoco-程序",[14,102358,17],{"id":16},[19,102360,102361],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,102363,102364],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[154,102366,102369],{"className":102367,"code":102368,"language":159,"meta":160},[157],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[70,102370,102368],{"__ignoreMap":160},[19,102372,102373],{},"需要掌握:",[26,102375,102376,102379,102382,102387,102392],{},[29,102377,102378],{},"Fedora 44 下 MuJoCo 的系统依赖",[29,102380,102381],{},"Python 虚拟环境创建",[29,102383,102384],{},[70,102385,102386],{},"mujoco.MjModel",[29,102388,102389],{},[70,102390,102391],{},"mujoco.MjData",[29,102393,102394],{},[70,102395,102396],{},"mujoco.mj_step(model, data)",[19,102398,102399],{},"MuJoCo 中最重要的两个对象:",[45,102401,102402,102411],{},[48,102403,102404],{},[51,102405,102406,102409],{},[54,102407,102408],{"align":56},"对象",[54,102410,573],{"align":56},[62,102412,102413,102423],{},[51,102414,102415,102420],{},[67,102416,102417],{"align":56},[70,102418,102419],{},"MjModel",[67,102421,102422],{"align":56},"模型结构，来自 XML，基本不随时间变化",[51,102424,102425,102430],{},[67,102426,102427],{"align":56},[70,102428,102429],{},"MjData",[67,102431,102432],{"align":56},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,102434,102435],{},"可以先用一个类比理解：",[45,102437,102438,102448],{},[48,102439,102440],{},[51,102441,102442,102445],{},[54,102443,102444],{"align":56},"类比",[54,102446,102447],{"align":56},"MuJoCo 对象",[62,102449,102450,102459,102468],{},[51,102451,102452,102455],{},[67,102453,102454],{"align":56},"游戏地图和角色配置",[67,102456,102457],{"align":56},[70,102458,102419],{},[51,102460,102461,102464],{},[67,102462,102463],{"align":56},"游戏运行到当前帧的状态",[67,102465,102466],{"align":56},[70,102467,102429],{},[51,102469,102470,102473],{},[67,102471,102472],{"align":56},"前进一帧",[67,102474,102475],{"align":56},[70,102476,102396],{},[14,102478,166],{"id":165},[19,102480,169],{},[154,102482,102484],{"className":172,"code":102483,"language":174,"meta":160,"style":160},"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",[70,102485,102486,102498,102511,102523,102533,102543,102562],{"__ignoreMap":160},[178,102487,102488,102490,102492,102494,102496],{"class":180,"line":181},[178,102489,185],{"class":184},[178,102491,189],{"class":188},[178,102493,192],{"class":188},[178,102495,196],{"class":195},[178,102497,26432],{"class":195},[178,102499,102500,102503,102506,102509],{"class":180,"line":263},[178,102501,102502],{"class":188},"  python3",[178,102504,102505],{"class":188}," python3-pip",[178,102507,102508],{"class":188}," python3-virtualenv",[178,102510,26432],{"class":195},[178,102512,102513,102516,102519,102521],{"class":180,"line":274},[178,102514,102515],{"class":188},"  mesa-libGL",[178,102517,102518],{"class":188}," mesa-libGLU",[178,102520,202],{"class":188},[178,102522,26432],{"class":195},[178,102524,102525,102528,102531],{"class":180,"line":354},[178,102526,102527],{"class":188},"  libglvnd-glx",[178,102529,102530],{"class":188}," libglvnd-opengl",[178,102532,26432],{"class":195},[178,102534,102535,102538,102541],{"class":180,"line":364},[178,102536,102537],{"class":188},"  glfw",[178,102539,102540],{"class":188}," glfw-devel",[178,102542,26432],{"class":195},[178,102544,102545,102548,102551,102554,102557,102560],{"class":180,"line":740},[178,102546,102547],{"class":188},"  libX11",[178,102549,102550],{"class":188}," libXcursor",[178,102552,102553],{"class":188}," libXi",[178,102555,102556],{"class":188}," libXinerama",[178,102558,102559],{"class":188}," libXrandr",[178,102561,26432],{"class":195},[178,102563,102564,102567,102570],{"class":180,"line":746},[178,102565,102566],{"class":188},"  gcc",[178,102568,102569],{"class":188}," gcc-c++",[178,102571,102572],{"class":188}," make\n",[19,102574,102575],{},"创建 Python 环境:",[154,102577,102579],{"className":172,"code":102578,"language":174,"meta":160,"style":160},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[70,102580,102581,102595,102603],{"__ignoreMap":160},[178,102582,102583,102586,102589,102592],{"class":180,"line":181},[178,102584,102585],{"class":184},"python3",[178,102587,102588],{"class":195}," -m",[178,102590,102591],{"class":188}," venv",[178,102593,102594],{"class":188}," .venv\n",[178,102596,102597,102600],{"class":180,"line":263},[178,102598,102599],{"class":195},"source",[178,102601,102602],{"class":188}," .venv\u002Fbin\u002Factivate\n",[178,102604,102605,102607,102609,102612,102614,102617],{"class":180,"line":274},[178,102606,692],{"class":184},[178,102608,102588],{"class":195},[178,102610,102611],{"class":188}," pip",[178,102613,192],{"class":188},[178,102615,102616],{"class":195}," --upgrade",[178,102618,102619],{"class":188}," pip\n",[19,102621,102622],{},"pip 安装:",[154,102624,102625],{"className":172,"code":214,"language":174,"meta":160,"style":160},[70,102626,102627],{"__ignoreMap":160},[178,102628,102629,102631,102633,102635],{"class":180,"line":181},[178,102630,221],{"class":184},[178,102632,192],{"class":188},[178,102634,226],{"class":188},[178,102636,229],{"class":188},[19,102638,102639],{},"安装完成后，先做最小检查：",[154,102641,102643],{"className":172,"code":102642,"language":174,"meta":160,"style":160},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[70,102644,102645],{"__ignoreMap":160},[178,102646,102647,102649,102651],{"class":180,"line":181},[178,102648,692],{"class":184},[178,102650,32104],{"class":195},[178,102652,102653],{"class":188}," \"import mujoco; print(mujoco.__version__)\"\n",[19,102655,102656],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,102658,102659],{},"conda 安装:",[154,102661,102663],{"className":172,"code":102662,"language":174,"meta":160,"style":160},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[70,102664,102665,102682,102691],{"__ignoreMap":160},[178,102666,102667,102669,102671,102673,102676,102678,102680],{"class":180,"line":181},[178,102668,242],{"class":184},[178,102670,245],{"class":188},[178,102672,248],{"class":195},[178,102674,102675],{"class":188}," mujoco-study",[178,102677,254],{"class":188},[178,102679,257],{"class":195},[178,102681,260],{"class":195},[178,102683,102684,102686,102688],{"class":180,"line":263},[178,102685,242],{"class":184},[178,102687,268],{"class":188},[178,102689,102690],{"class":188}," mujoco-study\n",[178,102692,102693,102695,102697,102699],{"class":180,"line":274},[178,102694,221],{"class":184},[178,102696,192],{"class":188},[178,102698,226],{"class":188},[178,102700,229],{"class":188},[19,102702,285],{},[26,102704,102705,102711,102719,102727],{},[29,102706,102707,102708,297],{},"不要安装 ",[70,102709,102710],{},"mujoco-py",[29,102712,102713,102714,404,102716,102718],{},"如果旧项目里同时安装了 ",[70,102715,102710],{},[70,102717,324],{},"，建议新建干净虚拟环境。",[29,102720,102721,102723,102724,297],{},[70,102722,296],{}," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[70,102725,102726],{},"~\u002F.mujoco\u002Fmujoco210",[29,102728,102729,102730,1815,102733,102736],{},"离屏渲染可能涉及 OpenGL 后端，",[70,102731,102732],{},"MUJOCO_GL=egl",[70,102734,102735],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,102738,304],{"id":303},[19,102740,102741],{},"MuJoCo 的基本执行流程:",[154,102743,102746],{"className":102744,"code":102745,"language":159,"meta":160},[157],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[70,102747,102745],{"__ignoreMap":160},[19,102749,102750,102752],{},[70,102751,102419],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,102754,102755,102757,102758,1258,102761,1258,102763,1258,102766,1258,102769,297],{},[70,102756,102429],{}," 存放仿真运行时状态，例如 ",[70,102759,102760],{},"data.time",[70,102762,1810],{},[70,102764,102765],{},"data.qvel",[70,102767,102768],{},"data.ctrl",[70,102770,1515],{},[387,102772,102774],{"id":102773},"xml-是什么","XML 是什么",[19,102776,102777],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[154,102779,102781],{"className":310,"code":102780,"language":312,"meta":160,"style":160},"\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",[70,102782,102783,102803,102830],{"__ignoreMap":160},[178,102784,102785,102787,102789,102791,102793,102795,102797,102799,102801],{"class":180,"line":181},[178,102786,320],{"class":319},[178,102788,376],{"class":323},[178,102790,426],{"class":184},[178,102792,330],{"class":319},[178,102794,431],{"class":188},[178,102796,434],{"class":184},[178,102798,330],{"class":319},[178,102800,439],{"class":188},[178,102802,336],{"class":319},[178,102804,102805,102807,102809,102811,102813,102816,102818,102820,102822,102824,102826,102828],{"class":180,"line":263},[178,102806,341],{"class":319},[178,102808,380],{"class":323},[178,102810,426],{"class":184},[178,102812,330],{"class":319},[178,102814,102815],{"class":188},"\"box_geom\"",[178,102817,467],{"class":184},[178,102819,330],{"class":319},[178,102821,431],{"class":188},[178,102823,474],{"class":184},[178,102825,330],{"class":319},[178,102827,479],{"class":188},[178,102829,458],{"class":319},[178,102831,102832,102834,102836],{"class":180,"line":274},[178,102833,367],{"class":319},[178,102835,376],{"class":323},[178,102837,336],{"class":319},[19,102839,102840],{},"这段意思是：",[26,102842,102843,102849,102855],{},[29,102844,102845,102846,102848],{},"创建一个叫 ",[70,102847,500],{}," 的刚体。",[29,102850,102851,102852,102854],{},"它初始放在 ",[70,102853,507],{},"，也就是 z 轴高度为 1。",[29,102856,102857],{},"它里面有一个盒子形状的几何体。",[387,102859,102861],{"id":102860},"timestep-是什么","timestep 是什么",[19,102863,102864],{},"XML 里的：",[154,102866,102868],{"className":310,"code":102867,"language":312,"meta":160,"style":160},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[70,102869,102870],{"__ignoreMap":160},[178,102871,102872,102874,102876,102879,102881,102884,102887,102889,102892],{"class":180,"line":181},[178,102873,320],{"class":319},[178,102875,70886],{"class":323},[178,102877,102878],{"class":184}," timestep",[178,102880,330],{"class":319},[178,102882,102883],{"class":188},"\"0.01\"",[178,102885,102886],{"class":184}," gravity",[178,102888,330],{"class":319},[178,102890,102891],{"class":188},"\"0 0 -9.81\"",[178,102893,458],{"class":319},[19,102895,102896,102897,102899,102900,102902],{},"表示每调用一次 ",[70,102898,1818],{},"，仿真时间前进 ",[70,102901,40718],{}," 秒。循环 100 次，大约就是 1 秒：",[154,102904,102907],{"className":102905,"code":102906,"language":159,"meta":160},[157],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[70,102908,102906],{"__ignoreMap":160},[387,102910,102912],{"id":102911},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,102914,102915],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[154,102917,102920],{"className":102918,"code":102919,"language":159,"meta":160},[157],"x y z qw qx qy qz\n",[70,102921,102919],{"__ignoreMap":160},[19,102923,102924,102925,102928,102929,102932],{},"表示一个自由刚体的位置和姿态。其中 ",[70,102926,102927],{},"x y z"," 是位置，",[70,102930,102931],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,102934,687],{"id":686},[19,102936,102937],{},"新建文件:",[154,102939,102941],{"className":172,"code":102940,"language":174,"meta":160,"style":160},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[70,102942,102943,102953,102960],{"__ignoreMap":160},[178,102944,102945,102948,102950],{"class":180,"line":181},[178,102946,102947],{"class":184},"mkdir",[178,102949,30963],{"class":195},[178,102951,102952],{"class":188}," mujoco_tutorial\n",[178,102954,102955,102958],{"class":180,"line":263},[178,102956,102957],{"class":195},"cd",[178,102959,102952],{"class":188},[178,102961,102962,102964],{"class":180,"line":274},[178,102963,1115],{"class":184},[178,102965,102966],{"class":188}," ch1_first_sim.py\n",[19,102968,102969],{},"写入:",[154,102971,102973],{"className":690,"code":102972,"language":692,"meta":160,"style":160},"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",[70,102974,102975,102981,102985,102989,102997,103002,103006,103010,103014,103019,103023,103028,103033,103038,103042,103046,103050,103054,103058,103062,103074,103086,103094,103098,103110,103122,103134,103145,103157,103161,103177,103181,103185,103196,103207,103211,103215,103227],{"__ignoreMap":160},[178,102976,102977,102979],{"class":180,"line":181},[178,102978,700],{"class":699},[178,102980,703],{"class":319},[178,102982,102983],{"class":180,"line":263},[178,102984,722],{"emptyLinePlaceholder":721},[178,102986,102987],{"class":180,"line":274},[178,102988,722],{"emptyLinePlaceholder":721},[178,102990,102991,102993,102995],{"class":180,"line":354},[178,102992,731],{"class":195},[178,102994,734],{"class":699},[178,102996,737],{"class":188},[178,102998,102999],{"class":180,"line":364},[178,103000,103001],{"class":188},"\u003Cmujoco model=\"first_sim\">\n",[178,103003,103004],{"class":180,"line":740},[178,103005,749],{"class":188},[178,103007,103008],{"class":180,"line":746},[178,103009,722],{"emptyLinePlaceholder":721},[178,103011,103012],{"class":180,"line":752},[178,103013,760],{"class":188},[178,103015,103016],{"class":180,"line":757},[178,103017,103018],{"class":188},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[178,103020,103021],{"class":180,"line":763},[178,103022,722],{"emptyLinePlaceholder":721},[178,103024,103025],{"class":180,"line":769},[178,103026,103027],{"class":188},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[178,103029,103030],{"class":180,"line":774},[178,103031,103032],{"class":188},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[178,103034,103035],{"class":180,"line":780},[178,103036,103037],{"class":188},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[178,103039,103040],{"class":180,"line":786},[178,103041,801],{"class":188},[178,103043,103044],{"class":180,"line":792},[178,103045,807],{"class":188},[178,103047,103048],{"class":180,"line":798},[178,103049,813],{"class":188},[178,103051,103052],{"class":180,"line":804},[178,103053,819],{"class":188},[178,103055,103056],{"class":180,"line":810},[178,103057,722],{"emptyLinePlaceholder":721},[178,103059,103060],{"class":180,"line":816},[178,103061,722],{"emptyLinePlaceholder":721},[178,103063,103064,103066,103068,103070,103072],{"class":180,"line":822},[178,103065,835],{"class":699},[178,103067,838],{"class":184},[178,103069,841],{"class":319},[178,103071,844],{"class":195},[178,103073,847],{"class":319},[178,103075,103076,103078,103080,103082,103084],{"class":180,"line":827},[178,103077,853],{"class":319},[178,103079,330],{"class":699},[178,103081,858],{"class":319},[178,103083,731],{"class":195},[178,103085,863],{"class":319},[178,103087,103088,103090,103092],{"class":180,"line":832},[178,103089,869],{"class":319},[178,103091,330],{"class":699},[178,103093,874],{"class":319},[178,103095,103096],{"class":180,"line":850},[178,103097,722],{"emptyLinePlaceholder":721},[178,103099,103100,103102,103104,103107],{"class":180,"line":866},[178,103101,1022],{"class":195},[178,103103,944],{"class":319},[178,103105,103106],{"class":188},"\"nq:\"",[178,103108,103109],{"class":319},", model.nq)\n",[178,103111,103112,103114,103116,103119],{"class":180,"line":877},[178,103113,1022],{"class":195},[178,103115,944],{"class":319},[178,103117,103118],{"class":188},"\"nv:\"",[178,103120,103121],{"class":319},", model.nv)\n",[178,103123,103124,103126,103128,103131],{"class":180,"line":882},[178,103125,1022],{"class":195},[178,103127,944],{"class":319},[178,103129,103130],{"class":188},"\"nu:\"",[178,103132,103133],{"class":319},", model.nu)\n",[178,103135,103136,103138,103140,103143],{"class":180,"line":898},[178,103137,1022],{"class":195},[178,103139,944],{"class":319},[178,103141,103142],{"class":188},"\"initial time:\"",[178,103144,1030],{"class":319},[178,103146,103147,103149,103151,103154],{"class":180,"line":914},[178,103148,1022],{"class":195},[178,103150,944],{"class":319},[178,103152,103153],{"class":188},"\"initial qpos:\"",[178,103155,103156],{"class":319},", data.qpos.copy())\n",[178,103158,103159],{"class":180,"line":919},[178,103160,722],{"emptyLinePlaceholder":721},[178,103162,103163,103165,103167,103169,103171,103173,103175],{"class":180,"line":935},[178,103164,988],{"class":699},[178,103166,991],{"class":319},[178,103168,994],{"class":699},[178,103170,997],{"class":195},[178,103172,944],{"class":319},[178,103174,2251],{"class":195},[178,103176,1005],{"class":319},[178,103178,103179],{"class":180,"line":952},[178,103180,1011],{"class":319},[178,103182,103183],{"class":180,"line":966},[178,103184,722],{"emptyLinePlaceholder":721},[178,103186,103187,103189,103191,103194],{"class":180,"line":980},[178,103188,1022],{"class":195},[178,103190,944],{"class":319},[178,103192,103193],{"class":188},"\"final time:\"",[178,103195,1030],{"class":319},[178,103197,103198,103200,103202,103205],{"class":180,"line":985},[178,103199,1022],{"class":195},[178,103201,944],{"class":319},[178,103203,103204],{"class":188},"\"final qpos:\"",[178,103206,103156],{"class":319},[178,103208,103209],{"class":180,"line":1008},[178,103210,722],{"emptyLinePlaceholder":721},[178,103212,103213],{"class":180,"line":1014},[178,103214,722],{"emptyLinePlaceholder":721},[178,103216,103217,103219,103221,103223,103225],{"class":180,"line":1019},[178,103218,1085],{"class":699},[178,103220,1088],{"class":195},[178,103222,1091],{"class":699},[178,103224,1094],{"class":188},[178,103226,847],{"class":319},[178,103228,103229],{"class":180,"line":1033},[178,103230,1102],{"class":319},[387,103232,1135],{"id":1135},[19,103234,103235],{},"导入库：",[154,103237,103239],{"className":690,"code":103238,"language":692,"meta":160,"style":160},"import mujoco\n",[70,103240,103241],{"__ignoreMap":160},[178,103242,103243,103245],{"class":180,"line":181},[178,103244,700],{"class":699},[178,103246,703],{"class":319},[19,103248,103249],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,103251,103252],{},"定义 XML：",[154,103254,103255],{"className":690,"code":1264,"language":692,"meta":160,"style":160},[70,103256,103257,103265,103269],{"__ignoreMap":160},[178,103258,103259,103261,103263],{"class":180,"line":181},[178,103260,731],{"class":195},[178,103262,734],{"class":699},[178,103264,737],{"class":188},[178,103266,103267],{"class":180,"line":263},[178,103268,1279],{"class":188},[178,103270,103271],{"class":180,"line":274},[178,103272,819],{"class":188},[19,103274,103275,103276,103278],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[70,103277,448],{}," 的方块。",[19,103280,103281],{},"编译模型：",[154,103283,103285],{"className":690,"code":103284,"language":692,"meta":160,"style":160},"model = mujoco.MjModel.from_xml_string(XML)\n",[70,103286,103287],{"__ignoreMap":160},[178,103288,103289,103292,103294,103296,103298],{"class":180,"line":181},[178,103290,103291],{"class":319},"model ",[178,103293,330],{"class":699},[178,103295,858],{"class":319},[178,103297,731],{"class":195},[178,103299,863],{"class":319},[19,103301,103302],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,103304,103305],{},"创建数据：",[154,103307,103309],{"className":690,"code":103308,"language":692,"meta":160,"style":160},"data = mujoco.MjData(model)\n",[70,103310,103311],{"__ignoreMap":160},[178,103312,103313,103316,103318],{"class":180,"line":181},[178,103314,103315],{"class":319},"data ",[178,103317,330],{"class":699},[178,103319,874],{"class":319},[19,103321,103322,103324,103325,103327],{},[70,103323,35133],{}," 会保存仿真当前状态。刚创建时，时间是 ",[70,103326,2133],{},"，方块还在初始位置。",[19,103329,103330],{},"推进仿真：",[154,103332,103334],{"className":690,"code":103333,"language":692,"meta":160,"style":160},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[70,103335,103336,103352],{"__ignoreMap":160},[178,103337,103338,103340,103342,103344,103346,103348,103350],{"class":180,"line":181},[178,103339,1474],{"class":699},[178,103341,991],{"class":319},[178,103343,994],{"class":699},[178,103345,997],{"class":195},[178,103347,944],{"class":319},[178,103349,2251],{"class":195},[178,103351,1005],{"class":319},[178,103353,103354],{"class":180,"line":263},[178,103355,1491],{"class":319},[19,103357,103358,103359,103361],{},"每次 ",[70,103360,1818],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[387,103363,1222],{"id":1222},[19,103365,103366],{},"下面把完整代码按新手视角拆开讲。",[154,103368,103369],{"className":690,"code":103238,"language":692,"meta":160,"style":160},[70,103370,103371],{"__ignoreMap":160},[178,103372,103373,103375],{"class":180,"line":181},[178,103374,700],{"class":699},[178,103376,703],{"class":319},[19,103378,103379,103381,103382,1258,103384,1258,103386,297],{},[70,103380,700],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[70,103383,102386],{},[70,103385,102391],{},[70,103387,103388],{},"mujoco.mj_step",[154,103390,103391],{"className":690,"code":1264,"language":692,"meta":160,"style":160},[70,103392,103393,103401,103405],{"__ignoreMap":160},[178,103394,103395,103397,103399],{"class":180,"line":181},[178,103396,731],{"class":195},[178,103398,734],{"class":699},[178,103400,737],{"class":188},[178,103402,103403],{"class":180,"line":263},[178,103404,1279],{"class":188},[178,103406,103407],{"class":180,"line":274},[178,103408,819],{"class":188},[19,103410,103411,103413,103414,103417],{},[70,103412,731],{}," 是一个变量名。右边的三引号 ",[70,103415,103416],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[154,103419,103420],{"className":310,"code":103001,"language":312,"meta":160,"style":160},[70,103421,103422],{"__ignoreMap":160},[178,103423,103424,103426,103428,103430,103432,103435],{"class":180,"line":181},[178,103425,320],{"class":319},[178,103427,324],{"class":323},[178,103429,327],{"class":184},[178,103431,330],{"class":319},[178,103433,103434],{"class":188},"\"first_sim\"",[178,103436,336],{"class":319},[19,103438,103439,103440,103443,103444,297],{},"这是 XML 的根标签。",[70,103441,103442],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[70,103445,103446],{},"first_sim",[154,103448,103449],{"className":310,"code":102867,"language":312,"meta":160,"style":160},[70,103450,103451],{"__ignoreMap":160},[178,103452,103453,103455,103457,103459,103461,103463,103465,103467,103469],{"class":180,"line":181},[178,103454,320],{"class":319},[178,103456,70886],{"class":323},[178,103458,102878],{"class":184},[178,103460,330],{"class":319},[178,103462,102883],{"class":188},[178,103464,102886],{"class":184},[178,103466,330],{"class":319},[178,103468,102891],{"class":188},[178,103470,458],{"class":319},[19,103472,103473,103475,103476,103479,103480,103483],{},[70,103474,70886],{}," 用来设置仿真参数。",[70,103477,103478],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[70,103481,103482],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[154,103485,103487],{"className":310,"code":103486,"language":312,"meta":160,"style":160},"\u003Cworldbody>\n",[70,103488,103489],{"__ignoreMap":160},[178,103490,103491,103493,103495],{"class":180,"line":181},[178,103492,320],{"class":319},[178,103494,344],{"class":323},[178,103496,336],{"class":319},[19,103498,103499,103501],{},[70,103500,344],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[154,103503,103505],{"className":310,"code":103504,"language":312,"meta":160,"style":160},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[70,103506,103507],{"__ignoreMap":160},[178,103508,103509,103511,103513,103515,103517,103520,103522,103524,103527,103529,103531,103534,103536,103538,103541],{"class":180,"line":181},[178,103510,320],{"class":319},[178,103512,380],{"class":323},[178,103514,426],{"class":184},[178,103516,330],{"class":319},[178,103518,103519],{"class":188},"\"floor\"",[178,103521,467],{"class":184},[178,103523,330],{"class":319},[178,103525,103526],{"class":188},"\"plane\"",[178,103528,474],{"class":184},[178,103530,330],{"class":319},[178,103532,103533],{"class":188},"\"2 2 0.1\"",[178,103535,1323],{"class":184},[178,103537,330],{"class":319},[178,103539,103540],{"class":188},"\"0.8 0.8 0.8 1\"",[178,103542,458],{"class":319},[19,103544,103545,103546,103548,103549,103552,103553,103556,103557,103559],{},"这行创建地面。",[70,103547,380],{}," 是几何体。",[70,103550,103551],{},"name=\"floor\""," 是名字。",[70,103554,103555],{},"type=\"plane\""," 表示平面。",[70,103558,56831],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[154,103561,103563],{"className":310,"code":103562,"language":312,"meta":160,"style":160},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[70,103564,103565],{"__ignoreMap":160},[178,103566,103567,103569,103571,103573,103575,103577,103579,103581,103583],{"class":180,"line":181},[178,103568,320],{"class":319},[178,103570,376],{"class":323},[178,103572,426],{"class":184},[178,103574,330],{"class":319},[178,103576,431],{"class":188},[178,103578,434],{"class":184},[178,103580,330],{"class":319},[178,103582,439],{"class":188},[178,103584,336],{"class":319},[19,103586,103587,103588,297,103590,103593,103594,103596],{},"这行创建一个刚体，名字叫 ",[70,103589,500],{},[70,103591,103592],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[70,103595,507],{},"，也就是离地面 1 米高。",[154,103598,103600],{"className":310,"code":103599,"language":312,"meta":160,"style":160},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[70,103601,103602],{"__ignoreMap":160},[178,103603,103604,103606,103608,103610,103612,103614],{"class":180,"line":181},[178,103605,320],{"class":319},[178,103607,448],{"class":323},[178,103609,426],{"class":184},[178,103611,330],{"class":319},[178,103613,455],{"class":188},[178,103615,458],{"class":319},[19,103617,103618,103619,103621],{},"这行很重要。",[70,103620,448],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[154,103623,103625],{"className":310,"code":103624,"language":312,"meta":160,"style":160},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[70,103626,103627],{"__ignoreMap":160},[178,103628,103629,103631,103633,103635,103637,103639,103641,103643,103645,103647,103649,103651,103654,103656,103658,103660,103662,103665],{"class":180,"line":181},[178,103630,320],{"class":319},[178,103632,380],{"class":323},[178,103634,426],{"class":184},[178,103636,330],{"class":319},[178,103638,102815],{"class":188},[178,103640,467],{"class":184},[178,103642,330],{"class":319},[178,103644,431],{"class":188},[178,103646,474],{"class":184},[178,103648,330],{"class":319},[178,103650,479],{"class":188},[178,103652,103653],{"class":184}," mass",[178,103655,330],{"class":319},[178,103657,5451],{"class":188},[178,103659,1323],{"class":184},[178,103661,330],{"class":319},[178,103663,103664],{"class":188},"\"1 0 0 1\"",[178,103666,458],{"class":319},[19,103668,103669,103670,103673,103674,103676,103677,103680,103681,103683],{},"这行给 box body 添加一个盒子形状。",[70,103671,103672],{},"type=\"box\""," 表示形状是盒子。",[70,103675,644],{}," 表示三个方向的半边长都是 0.1。",[70,103678,103679],{},"mass=\"1\""," 表示质量是 1。",[70,103682,1693],{}," 表示红色。",[154,103685,103687],{"className":690,"code":103686,"language":692,"meta":160,"style":160},"def main() -> None:\n",[70,103688,103689],{"__ignoreMap":160},[178,103690,103691,103693,103695,103697,103699],{"class":180,"line":181},[178,103692,835],{"class":699},[178,103694,838],{"class":184},[178,103696,841],{"class":319},[178,103698,844],{"class":195},[178,103700,847],{"class":319},[19,103702,103703,103705,103706,103709,103710,103713],{},[70,103704,835],{}," 用来定义函数。这里定义了一个叫 ",[70,103707,103708],{},"main"," 的函数。",[70,103711,103712],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[154,103715,103716],{"className":690,"code":103284,"language":692,"meta":160,"style":160},[70,103717,103718],{"__ignoreMap":160},[178,103719,103720,103722,103724,103726,103728],{"class":180,"line":181},[178,103721,103291],{"class":319},[178,103723,330],{"class":699},[178,103725,858],{"class":319},[178,103727,731],{"class":195},[178,103729,863],{"class":319},[19,103731,103732,103733,103735],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[70,103734,1384],{}," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[154,103737,103738],{"className":690,"code":103308,"language":692,"meta":160,"style":160},[70,103739,103740],{"__ignoreMap":160},[178,103741,103742,103744,103746],{"class":180,"line":181},[178,103743,103315],{"class":319},[178,103745,330],{"class":699},[178,103747,874],{"class":319},[19,103749,103750,103751,103753,103754,103756],{},"这行创建仿真数据。",[70,103752,35133],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[70,103755,35133],{}," 都会变化。",[154,103758,103760],{"className":690,"code":103759,"language":692,"meta":160,"style":160},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[70,103761,103762,103772,103782],{"__ignoreMap":160},[178,103763,103764,103766,103768,103770],{"class":180,"line":181},[178,103765,1504],{"class":195},[178,103767,944],{"class":319},[178,103769,103106],{"class":188},[178,103771,103109],{"class":319},[178,103773,103774,103776,103778,103780],{"class":180,"line":263},[178,103775,1504],{"class":195},[178,103777,944],{"class":319},[178,103779,103118],{"class":188},[178,103781,103121],{"class":319},[178,103783,103784,103786,103788,103790],{"class":180,"line":274},[178,103785,1504],{"class":195},[178,103787,944],{"class":319},[178,103789,103130],{"class":188},[178,103791,103133],{"class":319},[19,103793,103794,103796,103797,103800,103801,103804,103805,103808,103809,103812],{},[70,103795,1504],{}," 用来输出信息。",[70,103798,103799],{},"model.nq"," 是位置变量数量，",[70,103802,103803],{},"model.nv"," 是速度变量数量，",[70,103806,103807],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[70,103810,103811],{},"nu"," 是 0。",[154,103814,103816],{"className":690,"code":103815,"language":692,"meta":160,"style":160},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[70,103817,103818,103828],{"__ignoreMap":160},[178,103819,103820,103822,103824,103826],{"class":180,"line":181},[178,103821,1504],{"class":195},[178,103823,944],{"class":319},[178,103825,103142],{"class":188},[178,103827,1030],{"class":319},[178,103829,103830,103832,103834,103836],{"class":180,"line":263},[178,103831,1504],{"class":195},[178,103833,944],{"class":319},[178,103835,103153],{"class":188},[178,103837,103156],{"class":319},[19,103839,103840,103841,103843,103844,103846,103847,103850],{},"这里打印初始时间和初始位置。",[70,103842,102760],{}," 一开始是 0。",[70,103845,1810],{}," 是位置数组。",[70,103848,103849],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[154,103852,103853],{"className":690,"code":103333,"language":692,"meta":160,"style":160},[70,103854,103855,103871],{"__ignoreMap":160},[178,103856,103857,103859,103861,103863,103865,103867,103869],{"class":180,"line":181},[178,103858,1474],{"class":699},[178,103860,991],{"class":319},[178,103862,994],{"class":699},[178,103864,997],{"class":195},[178,103866,944],{"class":319},[178,103868,2251],{"class":195},[178,103870,1005],{"class":319},[178,103872,103873],{"class":180,"line":263},[178,103874,1491],{"class":319},[19,103876,103877,103879,103880,103883,103884,103886,103887,103889],{},[70,103878,1474],{}," 是循环。",[70,103881,103882],{},"range(100)"," 表示循环 100 次。",[70,103885,2931],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[70,103888,1818],{},"，仿真就前进一步。",[154,103891,103893],{"className":690,"code":103892,"language":692,"meta":160,"style":160},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[70,103894,103895,103905],{"__ignoreMap":160},[178,103896,103897,103899,103901,103903],{"class":180,"line":181},[178,103898,1504],{"class":195},[178,103900,944],{"class":319},[178,103902,103193],{"class":188},[178,103904,1030],{"class":319},[178,103906,103907,103909,103911,103913],{"class":180,"line":263},[178,103908,1504],{"class":195},[178,103910,944],{"class":319},[178,103912,103204],{"class":188},[178,103914,103156],{"class":319},[19,103916,103917],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[154,103919,103921],{"className":690,"code":103920,"language":692,"meta":160,"style":160},"if __name__ == \"__main__\":\n    main()\n",[70,103922,103923,103935],{"__ignoreMap":160},[178,103924,103925,103927,103929,103931,103933],{"class":180,"line":181},[178,103926,1085],{"class":699},[178,103928,1088],{"class":195},[178,103930,1091],{"class":699},[178,103932,1094],{"class":188},[178,103934,847],{"class":319},[178,103936,103937],{"class":180,"line":263},[178,103938,1102],{"class":319},[19,103940,103941,103942,103945,103946,297],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[70,103943,103944],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[70,103947,103944],{},[19,103949,1121],{},[154,103951,103953],{"className":172,"code":103952,"language":174,"meta":160,"style":160},"python ch1_first_sim.py\n",[70,103954,103955],{"__ignoreMap":160},[178,103956,103957,103959],{"class":180,"line":181},[178,103958,692],{"class":184},[178,103960,102966],{"class":188},[14,103962,1570],{"id":1569},[19,103964,103965],{},"你应该看到类似输出:",[154,103967,103970],{"className":103968,"code":103969,"language":159,"meta":160},[157],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[70,103971,103969],{"__ignoreMap":160},[19,103973,103974,103976,103977,103980,103981,297],{},[70,103975,448],{}," 有 7 个位置变量: ",[70,103978,103979],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[70,103982,103983],{},"vx vy vz wx wy wz",[19,103985,103986,103987,103990],{},"你还会看到 ",[70,103988,103989],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,103992,1654],{"id":1653},[19,103994,103995],{},"确认版本:",[154,103997,103998],{"className":172,"code":102642,"language":174,"meta":160,"style":160},[70,103999,104000],{"__ignoreMap":160},[178,104001,104002,104004,104006],{"class":180,"line":181},[178,104003,692],{"class":184},[178,104005,32104],{"class":195},[178,104007,102653],{"class":188},[19,104009,104010],{},"确认导入的是官方 bindings:",[154,104012,104014],{"className":172,"code":104013,"language":174,"meta":160,"style":160},"python -c \"import mujoco; print(mujoco)\"\n",[70,104015,104016],{"__ignoreMap":160},[178,104017,104018,104020,104022],{"class":180,"line":181},[178,104019,692],{"class":184},[178,104021,32104],{"class":195},[178,104023,104024],{"class":188}," \"import mujoco; print(mujoco)\"\n",[19,104026,104027],{},"运行程序:",[154,104029,104030],{"className":172,"code":103952,"language":174,"meta":160,"style":160},[70,104031,104032],{"__ignoreMap":160},[178,104033,104034,104036],{"class":180,"line":181},[178,104035,692],{"class":184},[178,104037,102966],{"class":188},[19,104039,104040,104041,104044,104045,297],{},"检查 ",[70,104042,104043],{},"final time"," 是否约等于 ",[70,104046,104047],{},"1.0",[19,104049,104050],{},"再做几个小实验：",[26,104052,104053,104061,104069,104082],{},[29,104054,1659,104055,1666,104057,104060],{},[70,104056,103592],{},[70,104058,104059],{},"pos=\"0 0 2\"","，观察初始高度变化。",[29,104062,1659,104063,1666,104065,104068],{},[70,104064,103482],{},[70,104066,104067],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[29,104070,1659,104071,1666,104073,104076,104077,104079,104080,297],{},[70,104072,103478],{},[70,104074,104075],{},"timestep=\"0.005\"","，观察 100 步后的 ",[70,104078,104043],{}," 是否变成约 ",[70,104081,37061],{},[29,104083,104084,104085,104088],{},"删除 ",[70,104086,104087],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,104090,104091],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,104093,1715],{"id":1714},[387,104095,104097],{"id":104096},"modulenotfounderror-no-module-named-mujoco",[70,104098,104099],{},"ModuleNotFoundError: No module named 'mujoco'",[19,104101,104102],{},"解决:",[154,104104,104106],{"className":172,"code":104105,"language":174,"meta":160,"style":160},"pip install \"mujoco>=2.3\"\n",[70,104107,104108],{"__ignoreMap":160},[178,104109,104110,104112,104114],{"class":180,"line":181},[178,104111,221],{"class":184},[178,104113,192],{"class":188},[178,104115,104116],{"class":188}," \"mujoco>=2.3\"\n",[387,104118,104120],{"id":104119},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,104122,104123],{},"先安装系统依赖:",[154,104125,104127],{"className":172,"code":104126,"language":174,"meta":160,"style":160},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[70,104128,104129],{"__ignoreMap":160},[178,104130,104131,104133,104135,104137,104139,104141,104143,104145,104147,104150,104152],{"class":180,"line":181},[178,104132,185],{"class":184},[178,104134,189],{"class":188},[178,104136,192],{"class":188},[178,104138,196],{"class":195},[178,104140,199],{"class":188},[178,104142,202],{"class":188},[178,104144,205],{"class":188},[178,104146,102540],{"class":188},[178,104148,104149],{"class":188}," libX11",[178,104151,102553],{"class":188},[178,104153,104154],{"class":188}," libXrandr\n",[387,104156,104158],{"id":104157},"xml-解析失败","XML 解析失败",[19,104160,1745],{},[26,104162,104163,104166,104169,104174],{},[29,104164,104165],{},"标签是否闭合",[29,104167,104168],{},"属性是否带引号",[29,104170,104171,104172],{},"根节点是否是 ",[70,104173,72],{},[29,104175,104176,104178,104179,104181],{},[70,104177,376],{}," 是否放在 ",[70,104180,92],{}," 内部",[387,104183,104185,104187,104188],{"id":104184},"final-time-不是严格等于-10",[70,104186,104043],{}," 不是严格等于 ",[70,104189,104047],{},[19,104191,104192],{},"这通常不是错误。浮点数计算可能得到：",[154,104194,104197],{"className":104195,"code":104196,"language":159,"meta":160},[157],"1.0000000000000007\n",[70,104198,104196],{"__ignoreMap":160},[19,104200,104201,104202,104204],{},"只要接近 ",[70,104203,104047],{}," 就正常。",[387,104206,104207],{"id":104207},"方块没有掉下来",[19,104209,104210],{},"检查：",[26,104212,104213,104219,104224,104229],{},[29,104214,104215,104216],{},"方块 body 里是否有 ",[70,104217,104218],{},"\u003Cfreejoint\u002F>",[29,104220,104221,104222],{},"重力是否是 ",[70,104223,1758],{},[29,104225,104226,104227],{},"是否真的调用了 ",[70,104228,102396],{},[29,104230,104231,104232,104234,104235],{},"你看的是否是 ",[70,104233,103989],{},"，不是 ",[70,104236,104237],{},"initial qpos",[14,104239,1823],{"id":1822},[19,104241,104242],{},"本章你已经完成了 MuJoCo 的最小闭环：",[154,104244,104247],{"className":104245,"code":104246,"language":159,"meta":160},[157],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[70,104248,104246],{"__ignoreMap":160},[19,104250,104251],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[1853,104253,104254],{},"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":160,"searchDepth":263,"depth":263,"links":104256},[104257,104258,104259,104264,104268,104269,104270,104278],{"id":16,"depth":263,"text":17},{"id":165,"depth":263,"text":166},{"id":303,"depth":263,"text":304,"children":104260},[104261,104262,104263],{"id":102773,"depth":274,"text":102774},{"id":102860,"depth":274,"text":102861},{"id":102911,"depth":274,"text":102912},{"id":686,"depth":263,"text":687,"children":104265},[104266,104267],{"id":1135,"depth":274,"text":1135},{"id":1222,"depth":274,"text":1222},{"id":1569,"depth":263,"text":1570},{"id":1653,"depth":263,"text":1654},{"id":1714,"depth":263,"text":1715,"children":104271},[104272,104273,104274,104275,104277],{"id":104096,"depth":274,"text":104099},{"id":104119,"depth":274,"text":104120},{"id":104157,"depth":274,"text":104158},{"id":104184,"depth":274,"text":104276},"final time 不是严格等于 1.0",{"id":104207,"depth":274,"text":104207},{"id":1822,"depth":263,"text":1823},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102351,"description":160},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":4,"title":5,"body":104285,"description":160,"extension":1880,"meta":105679,"navigation":721,"path":1882,"seo":105680,"stem":1884,"__hash__":1885},{"type":7,"value":104286,"toc":105656},[104287,104289,104291,104293,104295,104307,104385,104387,104392,104394,104396,104418,104420,104434,104436,104474,104476,104486,104488,104490,104536,104544,104546,104548,104553,104561,104627,104629,104643,104645,104647,104652,104654,104662,104664,104666,104672,104740,104746,104748,104752,104762,104768,104770,105074,105076,105086,105088,105098,105100,105102,105118,105120,105122,105138,105144,105146,105158,105164,105166,105186,105196,105216,105220,105256,105266,105282,105286,105288,105306,105322,105326,105354,105364,105388,105390,105404,105410,105424,105430,105444,105448,105450,105456,105464,105470,105472,105508,105512,105514,105552,105554,105558,105560,105566,105570,105572,105574,105588,105590,105592,105622,105630,105632,105634,105652,105654],[10,104288,5],{"id":12},[14,104290,17],{"id":16},[19,104292,21],{},[19,104294,24],{},[26,104296,104297,104299,104301,104303,104305],{},[29,104298,31],{},[29,104300,34],{},[29,104302,37],{},[29,104304,40],{},[29,104306,43],{},[45,104308,104309,104317],{},[48,104310,104311],{},[51,104312,104313,104315],{},[54,104314,57],{"align":56},[54,104316,60],{"align":56},[62,104318,104319,104327,104335,104343,104351,104359,104369,104377],{},[51,104320,104321,104325],{},[67,104322,104323],{"align":56},[70,104324,72],{},[67,104326,75],{"align":56},[51,104328,104329,104333],{},[67,104330,104331],{"align":56},[70,104332,82],{},[67,104334,85],{"align":56},[51,104336,104337,104341],{},[67,104338,104339],{"align":56},[70,104340,92],{},[67,104342,95],{"align":56},[51,104344,104345,104349],{},[67,104346,104347],{"align":56},[70,104348,102],{},[67,104350,105],{"align":56},[51,104352,104353,104357],{},[67,104354,104355],{"align":56},[70,104356,112],{},[67,104358,115],{"align":56},[51,104360,104361,104367],{},[67,104362,104363,123,104365],{"align":56},[70,104364,122],{},[70,104366,126],{},[67,104368,129],{"align":56},[51,104370,104371,104375],{},[67,104372,104373],{"align":56},[70,104374,136],{},[67,104376,139],{"align":56},[51,104378,104379,104383],{},[67,104380,104381],{"align":56},[70,104382,146],{},[67,104384,149],{"align":56},[19,104386,152],{},[154,104388,104390],{"className":104389,"code":158,"language":159,"meta":160},[157],[70,104391,158],{"__ignoreMap":160},[14,104393,166],{"id":165},[19,104395,169],{},[154,104397,104398],{"className":172,"code":173,"language":174,"meta":160,"style":160},[70,104399,104400],{"__ignoreMap":160},[178,104401,104402,104404,104406,104408,104410,104412,104414,104416],{"class":180,"line":181},[178,104403,185],{"class":184},[178,104405,189],{"class":188},[178,104407,192],{"class":188},[178,104409,196],{"class":195},[178,104411,199],{"class":188},[178,104413,202],{"class":188},[178,104415,205],{"class":188},[178,104417,208],{"class":188},[19,104419,211],{},[154,104421,104422],{"className":172,"code":214,"language":174,"meta":160,"style":160},[70,104423,104424],{"__ignoreMap":160},[178,104425,104426,104428,104430,104432],{"class":180,"line":181},[178,104427,221],{"class":184},[178,104429,192],{"class":188},[178,104431,226],{"class":188},[178,104433,229],{"class":188},[19,104435,232],{},[154,104437,104438],{"className":172,"code":235,"language":174,"meta":160,"style":160},[70,104439,104440,104456,104464],{"__ignoreMap":160},[178,104441,104442,104444,104446,104448,104450,104452,104454],{"class":180,"line":181},[178,104443,242],{"class":184},[178,104445,245],{"class":188},[178,104447,248],{"class":195},[178,104449,251],{"class":188},[178,104451,254],{"class":188},[178,104453,257],{"class":195},[178,104455,260],{"class":195},[178,104457,104458,104460,104462],{"class":180,"line":263},[178,104459,242],{"class":184},[178,104461,268],{"class":188},[178,104463,271],{"class":188},[178,104465,104466,104468,104470,104472],{"class":180,"line":274},[178,104467,221],{"class":184},[178,104469,192],{"class":188},[178,104471,226],{"class":188},[178,104473,229],{"class":188},[19,104475,285],{},[26,104477,104478,104480,104484],{},[29,104479,290],{},[29,104481,293,104482,297],{},[70,104483,296],{},[29,104485,300],{},[14,104487,304],{"id":303},[19,104489,307],{},[154,104491,104492],{"className":310,"code":311,"language":312,"meta":160,"style":160},[70,104493,104494,104508,104516,104520,104528],{"__ignoreMap":160},[178,104495,104496,104498,104500,104502,104504,104506],{"class":180,"line":181},[178,104497,320],{"class":319},[178,104499,324],{"class":323},[178,104501,327],{"class":184},[178,104503,330],{"class":319},[178,104505,333],{"class":188},[178,104507,336],{"class":319},[178,104509,104510,104512,104514],{"class":180,"line":263},[178,104511,341],{"class":319},[178,104513,344],{"class":323},[178,104515,336],{"class":319},[178,104517,104518],{"class":180,"line":274},[178,104519,351],{"class":319},[178,104521,104522,104524,104526],{"class":180,"line":354},[178,104523,357],{"class":319},[178,104525,344],{"class":323},[178,104527,336],{"class":319},[178,104529,104530,104532,104534],{"class":180,"line":364},[178,104531,367],{"class":319},[178,104533,324],{"class":323},[178,104535,336],{"class":319},[19,104537,104538,377,104540,381,104542,385],{},[70,104539,376],{},[70,104541,380],{},[70,104543,384],{},[387,104545,389],{"id":389},[19,104547,392],{},[154,104549,104551],{"className":104550,"code":396,"language":159,"meta":160},[157],[70,104552,396],{"__ignoreMap":160},[19,104554,104555,404,104557,408,104559,412],{},[70,104556,403],{},[70,104558,407],{},[70,104560,411],{},[154,104562,104563],{"className":310,"code":415,"language":312,"meta":160,"style":160},[70,104564,104565,104585,104599,104619],{"__ignoreMap":160},[178,104566,104567,104569,104571,104573,104575,104577,104579,104581,104583],{"class":180,"line":181},[178,104568,320],{"class":319},[178,104570,376],{"class":323},[178,104572,426],{"class":184},[178,104574,330],{"class":319},[178,104576,431],{"class":188},[178,104578,434],{"class":184},[178,104580,330],{"class":319},[178,104582,439],{"class":188},[178,104584,336],{"class":319},[178,104586,104587,104589,104591,104593,104595,104597],{"class":180,"line":263},[178,104588,341],{"class":319},[178,104590,448],{"class":323},[178,104592,426],{"class":184},[178,104594,330],{"class":319},[178,104596,455],{"class":188},[178,104598,458],{"class":319},[178,104600,104601,104603,104605,104607,104609,104611,104613,104615,104617],{"class":180,"line":274},[178,104602,341],{"class":319},[178,104604,380],{"class":323},[178,104606,467],{"class":184},[178,104608,330],{"class":319},[178,104610,431],{"class":188},[178,104612,474],{"class":184},[178,104614,330],{"class":319},[178,104616,479],{"class":188},[178,104618,458],{"class":319},[178,104620,104621,104623,104625],{"class":180,"line":354},[178,104622,367],{"class":319},[178,104624,376],{"class":323},[178,104626,336],{"class":319},[19,104628,492],{},[26,104630,104631,104635,104639,104641],{},[29,104632,497,104633,501],{},[70,104634,500],{},[29,104636,504,104637],{},[70,104638,507],{},[29,104640,510],{},[29,104642,513],{},[387,104644,516],{"id":516},[19,104646,519],{},[154,104648,104650],{"className":104649,"code":523,"language":159,"meta":160},[157],[70,104651,523],{"__ignoreMap":160},[19,104653,528],{},[154,104655,104656],{"className":310,"code":531,"language":312,"meta":160,"style":160},[70,104657,104658],{"__ignoreMap":160},[178,104659,104660],{"class":180,"line":181},[178,104661,531],{"class":319},[19,104663,540],{},[387,104665,544],{"id":543},[19,104667,547,104668,551,104670,555],{},[70,104669,550],{},[70,104671,554],{},[45,104673,104674,104688],{},[48,104675,104676],{},[51,104677,104678,104682,104686],{},[54,104679,104680],{"align":56},[70,104681,550],{},[54,104683,104684,570],{"align":56},[70,104685,554],{},[54,104687,573],{"align":56},[62,104689,104690,104702,104714,104728],{},[51,104691,104692,104696,104700],{},[67,104693,104694],{"align":56},[70,104695,500],{},[67,104697,104698],{"align":56},[70,104699,586],{},[67,104701,589],{"align":56},[51,104703,104704,104708,104712],{},[67,104705,104706],{"align":56},[70,104707,596],{},[67,104709,104710],{"align":56},[70,104711,601],{},[67,104713,604],{"align":56},[51,104715,104716,104720,104724],{},[67,104717,104718],{"align":56},[70,104719,611],{},[67,104721,104722],{"align":56},[70,104723,616],{},[67,104725,619,104726,623],{"align":56},[70,104727,622],{},[51,104729,104730,104734,104738],{},[67,104731,104732],{"align":56},[70,104733,630],{},[67,104735,104736],{"align":56},[70,104737,635],{},[67,104739,638],{"align":56},[19,104741,641,104742,645,104744,649],{},[70,104743,644],{},[70,104745,648],{},[387,104747,653],{"id":652},[19,104749,104750,659],{},[70,104751,658],{},[26,104753,104754,104756,104758,104760],{},[29,104755,664],{},[29,104757,667],{},[29,104759,670],{},[29,104761,673],{},[19,104763,676,104764,404,104766,683],{},[70,104765,679],{},[70,104767,682],{},[14,104769,687],{"id":686},[154,104771,104772],{"className":690,"code":691,"language":692,"meta":160,"style":160},[70,104773,104774,104780,104790,104794,104798,104806,104810,104814,104818,104822,104826,104830,104834,104838,104842,104846,104850,104854,104858,104862,104866,104870,104882,104894,104902,104906,104918,104930,104934,104946,104958,104970,104982,104986,105002,105006,105010,105020,105030,105040,105050,105054,105058,105070],{"__ignoreMap":160},[178,104775,104776,104778],{"class":180,"line":181},[178,104777,700],{"class":699},[178,104779,703],{"class":319},[178,104781,104782,104784,104786,104788],{"class":180,"line":263},[178,104783,700],{"class":699},[178,104785,710],{"class":319},[178,104787,713],{"class":699},[178,104789,716],{"class":319},[178,104791,104792],{"class":180,"line":274},[178,104793,722],{"emptyLinePlaceholder":721},[178,104795,104796],{"class":180,"line":354},[178,104797,722],{"emptyLinePlaceholder":721},[178,104799,104800,104802,104804],{"class":180,"line":364},[178,104801,731],{"class":195},[178,104803,734],{"class":699},[178,104805,737],{"class":188},[178,104807,104808],{"class":180,"line":740},[178,104809,743],{"class":188},[178,104811,104812],{"class":180,"line":746},[178,104813,749],{"class":188},[178,104815,104816],{"class":180,"line":752},[178,104817,722],{"emptyLinePlaceholder":721},[178,104819,104820],{"class":180,"line":757},[178,104821,760],{"class":188},[178,104823,104824],{"class":180,"line":763},[178,104825,766],{"class":188},[178,104827,104828],{"class":180,"line":769},[178,104829,722],{"emptyLinePlaceholder":721},[178,104831,104832],{"class":180,"line":774},[178,104833,777],{"class":188},[178,104835,104836],{"class":180,"line":780},[178,104837,783],{"class":188},[178,104839,104840],{"class":180,"line":786},[178,104841,789],{"class":188},[178,104843,104844],{"class":180,"line":792},[178,104845,795],{"class":188},[178,104847,104848],{"class":180,"line":798},[178,104849,801],{"class":188},[178,104851,104852],{"class":180,"line":804},[178,104853,807],{"class":188},[178,104855,104856],{"class":180,"line":810},[178,104857,813],{"class":188},[178,104859,104860],{"class":180,"line":816},[178,104861,819],{"class":188},[178,104863,104864],{"class":180,"line":822},[178,104865,722],{"emptyLinePlaceholder":721},[178,104867,104868],{"class":180,"line":827},[178,104869,722],{"emptyLinePlaceholder":721},[178,104871,104872,104874,104876,104878,104880],{"class":180,"line":832},[178,104873,835],{"class":699},[178,104875,838],{"class":184},[178,104877,841],{"class":319},[178,104879,844],{"class":195},[178,104881,847],{"class":319},[178,104883,104884,104886,104888,104890,104892],{"class":180,"line":850},[178,104885,853],{"class":319},[178,104887,330],{"class":699},[178,104889,858],{"class":319},[178,104891,731],{"class":195},[178,104893,863],{"class":319},[178,104895,104896,104898,104900],{"class":180,"line":866},[178,104897,869],{"class":319},[178,104899,330],{"class":699},[178,104901,874],{"class":319},[178,104903,104904],{"class":180,"line":877},[178,104905,722],{"emptyLinePlaceholder":721},[178,104907,104908,104910,104912,104914,104916],{"class":180,"line":882},[178,104909,885],{"class":319},[178,104911,330],{"class":699},[178,104913,890],{"class":319},[178,104915,893],{"class":188},[178,104917,863],{"class":319},[178,104919,104920,104922,104924,104926,104928],{"class":180,"line":898},[178,104921,901],{"class":319},[178,104923,330],{"class":699},[178,104925,906],{"class":319},[178,104927,909],{"class":188},[178,104929,863],{"class":319},[178,104931,104932],{"class":180,"line":914},[178,104933,722],{"emptyLinePlaceholder":721},[178,104935,104936,104938,104940,104942,104944],{"class":180,"line":919},[178,104937,922],{"class":699},[178,104939,925],{"class":319},[178,104941,320],{"class":699},[178,104943,930],{"class":195},[178,104945,847],{"class":319},[178,104947,104948,104950,104952,104954,104956],{"class":180,"line":935},[178,104949,938],{"class":699},[178,104951,941],{"class":195},[178,104953,944],{"class":319},[178,104955,947],{"class":188},[178,104957,863],{"class":319},[178,104959,104960,104962,104964,104966,104968],{"class":180,"line":952},[178,104961,922],{"class":699},[178,104963,957],{"class":319},[178,104965,320],{"class":699},[178,104967,930],{"class":195},[178,104969,847],{"class":319},[178,104971,104972,104974,104976,104978,104980],{"class":180,"line":966},[178,104973,938],{"class":699},[178,104975,941],{"class":195},[178,104977,944],{"class":319},[178,104979,975],{"class":188},[178,104981,863],{"class":319},[178,104983,104984],{"class":180,"line":980},[178,104985,722],{"emptyLinePlaceholder":721},[178,104987,104988,104990,104992,104994,104996,104998,105000],{"class":180,"line":985},[178,104989,988],{"class":699},[178,104991,991],{"class":319},[178,104993,994],{"class":699},[178,104995,997],{"class":195},[178,104997,944],{"class":319},[178,104999,1002],{"class":195},[178,105001,1005],{"class":319},[178,105003,105004],{"class":180,"line":1008},[178,105005,1011],{"class":319},[178,105007,105008],{"class":180,"line":1014},[178,105009,722],{"emptyLinePlaceholder":721},[178,105011,105012,105014,105016,105018],{"class":180,"line":1019},[178,105013,1022],{"class":195},[178,105015,944],{"class":319},[178,105017,1027],{"class":188},[178,105019,1030],{"class":319},[178,105021,105022,105024,105026,105028],{"class":180,"line":1033},[178,105023,1022],{"class":195},[178,105025,944],{"class":319},[178,105027,1040],{"class":188},[178,105029,1043],{"class":319},[178,105031,105032,105034,105036,105038],{"class":180,"line":1046},[178,105033,1022],{"class":195},[178,105035,944],{"class":319},[178,105037,1053],{"class":188},[178,105039,1056],{"class":319},[178,105041,105042,105044,105046,105048],{"class":180,"line":1059},[178,105043,1022],{"class":195},[178,105045,944],{"class":319},[178,105047,1066],{"class":188},[178,105049,1069],{"class":319},[178,105051,105052],{"class":180,"line":1072},[178,105053,722],{"emptyLinePlaceholder":721},[178,105055,105056],{"class":180,"line":1077},[178,105057,722],{"emptyLinePlaceholder":721},[178,105059,105060,105062,105064,105066,105068],{"class":180,"line":1082},[178,105061,1085],{"class":699},[178,105063,1088],{"class":195},[178,105065,1091],{"class":699},[178,105067,1094],{"class":188},[178,105069,847],{"class":319},[178,105071,105072],{"class":180,"line":1099},[178,105073,1102],{"class":319},[19,105075,1105],{},[154,105077,105078],{"className":172,"code":1108,"language":174,"meta":160,"style":160},[70,105079,105080],{"__ignoreMap":160},[178,105081,105082,105084],{"class":180,"line":181},[178,105083,1115],{"class":184},[178,105085,1118],{"class":188},[19,105087,1121],{},[154,105089,105090],{"className":172,"code":1124,"language":174,"meta":160,"style":160},[70,105091,105092],{"__ignoreMap":160},[178,105093,105094,105096],{"class":180,"line":181},[178,105095,692],{"class":184},[178,105097,1118],{"class":188},[387,105099,1135],{"id":1135},[19,105101,1138],{},[154,105103,105104],{"className":690,"code":1141,"language":692,"meta":160,"style":160},[70,105105,105106],{"__ignoreMap":160},[178,105107,105108,105110,105112,105114,105116],{"class":180,"line":181},[178,105109,1148],{"class":319},[178,105111,330],{"class":699},[178,105113,890],{"class":319},[178,105115,893],{"class":188},[178,105117,863],{"class":319},[19,105119,1159],{},[19,105121,1162],{},[154,105123,105124],{"className":690,"code":1165,"language":692,"meta":160,"style":160},[70,105125,105126],{"__ignoreMap":160},[178,105127,105128,105130,105132,105134,105136],{"class":180,"line":181},[178,105129,1172],{"class":319},[178,105131,330],{"class":699},[178,105133,906],{"class":319},[178,105135,909],{"class":188},[178,105137,863],{"class":319},[19,105139,1183,105140,1187,105142,1191],{},[70,105141,1186],{},[70,105143,1190],{},[19,105145,1194],{},[154,105147,105148],{"className":690,"code":1197,"language":692,"meta":160,"style":160},[70,105149,105150,105154],{"__ignoreMap":160},[178,105151,105152],{"class":180,"line":181},[178,105153,1204],{"class":319},[178,105155,105156],{"class":180,"line":263},[178,105157,1209],{"class":319},[19,105159,105160,1215,105162,1219],{},[70,105161,1214],{},[70,105163,1218],{},[387,105165,1222],{"id":1222},[154,105167,105168],{"className":690,"code":1225,"language":692,"meta":160,"style":160},[70,105169,105170,105176],{"__ignoreMap":160},[178,105171,105172,105174],{"class":180,"line":181},[178,105173,700],{"class":699},[178,105175,703],{"class":319},[178,105177,105178,105180,105182,105184],{"class":180,"line":263},[178,105179,700],{"class":699},[178,105181,710],{"class":319},[178,105183,713],{"class":699},[178,105185,716],{"class":319},[19,105187,1246,105188,1250,105190,1254,105192,1258,105194,297],{},[70,105189,1249],{},[70,105191,1253],{},[70,105193,1257],{},[70,105195,1261],{},[154,105197,105198],{"className":690,"code":1264,"language":692,"meta":160,"style":160},[70,105199,105200,105208,105212],{"__ignoreMap":160},[178,105201,105202,105204,105206],{"class":180,"line":181},[178,105203,731],{"class":195},[178,105205,734],{"class":699},[178,105207,737],{"class":188},[178,105209,105210],{"class":180,"line":263},[178,105211,1279],{"class":188},[178,105213,105214],{"class":180,"line":274},[178,105215,819],{"class":188},[19,105217,1286,105218,297],{},[70,105219,1289],{},[154,105221,105222],{"className":310,"code":1292,"language":312,"meta":160,"style":160},[70,105223,105224],{"__ignoreMap":160},[178,105225,105226,105228,105230,105232,105234,105236,105238,105240,105242,105244,105246,105248,105250,105252,105254],{"class":180,"line":181},[178,105227,320],{"class":319},[178,105229,658],{"class":323},[178,105231,426],{"class":184},[178,105233,330],{"class":319},[178,105235,909],{"class":188},[178,105237,434],{"class":184},[178,105239,330],{"class":319},[178,105241,1313],{"class":188},[178,105243,474],{"class":184},[178,105245,330],{"class":319},[178,105247,1320],{"class":188},[178,105249,1323],{"class":184},[178,105251,330],{"class":319},[178,105253,1328],{"class":188},[178,105255,458],{"class":319},[19,105257,105258,1335,105260,1339,105262,1342,105264,1346],{},[70,105259,658],{},[70,105261,1338],{},[70,105263,616],{},[70,105265,1345],{},[154,105267,105268],{"className":690,"code":1141,"language":692,"meta":160,"style":160},[70,105269,105270],{"__ignoreMap":160},[178,105271,105272,105274,105276,105278,105280],{"class":180,"line":181},[178,105273,1148],{"class":319},[178,105275,330],{"class":699},[178,105277,890],{"class":319},[178,105279,893],{"class":188},[178,105281,863],{"class":319},[19,105283,1365,105284,1368],{},[70,105285,893],{},[19,105287,1371],{},[26,105289,105290,105294,105298,105302],{},[29,105291,105292,1379],{},[70,105293,1378],{},[29,105295,105296,1385],{},[70,105297,1384],{},[29,105299,105300,1391],{},[70,105301,1390],{},[29,105303,105304,1396],{},[70,105305,893],{},[154,105307,105308],{"className":690,"code":1165,"language":692,"meta":160,"style":160},[70,105309,105310],{"__ignoreMap":160},[178,105311,105312,105314,105316,105318,105320],{"class":180,"line":181},[178,105313,1172],{"class":319},[178,105315,330],{"class":699},[178,105317,906],{"class":319},[178,105319,909],{"class":188},[178,105321,863],{"class":319},[19,105323,1415,105324,297],{},[70,105325,909],{},[154,105327,105328],{"className":690,"code":1420,"language":692,"meta":160,"style":160},[70,105329,105330,105342],{"__ignoreMap":160},[178,105331,105332,105334,105336,105338,105340],{"class":180,"line":181},[178,105333,1085],{"class":699},[178,105335,925],{"class":319},[178,105337,320],{"class":699},[178,105339,930],{"class":195},[178,105341,847],{"class":319},[178,105343,105344,105346,105348,105350,105352],{"class":180,"line":263},[178,105345,1439],{"class":699},[178,105347,941],{"class":195},[178,105349,944],{"class":319},[178,105351,947],{"class":188},[178,105353,863],{"class":319},[19,105355,105356,1452,105358,1456,105360,1460,105362,1464],{},[70,105357,1085],{},[70,105359,1455],{},[70,105361,1459],{},[70,105363,1463],{},[154,105365,105366],{"className":690,"code":1467,"language":692,"meta":160,"style":160},[70,105367,105368,105384],{"__ignoreMap":160},[178,105369,105370,105372,105374,105376,105378,105380,105382],{"class":180,"line":181},[178,105371,1474],{"class":699},[178,105373,991],{"class":319},[178,105375,994],{"class":699},[178,105377,997],{"class":195},[178,105379,944],{"class":319},[178,105381,1002],{"class":195},[178,105383,1005],{"class":319},[178,105385,105386],{"class":180,"line":263},[178,105387,1491],{"class":319},[19,105389,1494],{},[154,105391,105392],{"className":690,"code":1497,"language":692,"meta":160,"style":160},[70,105393,105394],{"__ignoreMap":160},[178,105395,105396,105398,105400,105402],{"class":180,"line":181},[178,105397,1504],{"class":195},[178,105399,944],{"class":319},[178,105401,1040],{"class":188},[178,105403,1043],{"class":319},[19,105405,105406,1516,105408,1520],{},[70,105407,1515],{},[70,105409,1519],{},[154,105411,105412],{"className":690,"code":1523,"language":692,"meta":160,"style":160},[70,105413,105414],{"__ignoreMap":160},[178,105415,105416,105418,105420,105422],{"class":180,"line":181},[178,105417,1504],{"class":195},[178,105419,944],{"class":319},[178,105421,1053],{"class":188},[178,105423,1056],{"class":319},[19,105425,105426,1541,105428,1544],{},[70,105427,1540],{},[70,105429,407],{},[154,105431,105432],{"className":690,"code":1547,"language":692,"meta":160,"style":160},[70,105433,105434],{"__ignoreMap":160},[178,105435,105436,105438,105440,105442],{"class":180,"line":181},[178,105437,1504],{"class":195},[178,105439,944],{"class":319},[178,105441,1066],{"class":188},[178,105443,1069],{"class":319},[19,105445,1562,105446,1566],{},[70,105447,1565],{},[14,105449,1570],{"id":1569},[19,105451,1573,105452,1577,105454,297],{},[70,105453,1576],{},[70,105455,1580],{},[19,105457,105458,1585,105460,1589,105462,1593],{},[70,105459,1519],{},[70,105461,1588],{},[70,105463,1592],{},[19,105465,1596,105466,551,105468,1601],{},[70,105467,407],{},[70,105469,1338],{},[19,105471,1604],{},[154,105473,105474],{"className":310,"code":1607,"language":312,"meta":160,"style":160},[70,105475,105476],{"__ignoreMap":160},[178,105477,105478,105480,105482,105484,105486,105488,105490,105492,105494,105496,105498,105500,105502,105504,105506],{"class":180,"line":181},[178,105479,320],{"class":319},[178,105481,658],{"class":323},[178,105483,426],{"class":184},[178,105485,330],{"class":319},[178,105487,1622],{"class":188},[178,105489,434],{"class":184},[178,105491,330],{"class":319},[178,105493,1629],{"class":188},[178,105495,474],{"class":184},[178,105497,330],{"class":319},[178,105499,1320],{"class":188},[178,105501,1323],{"class":184},[178,105503,330],{"class":319},[178,105505,1328],{"class":188},[178,105507,458],{"class":319},[19,105509,1646,105510,1650],{},[70,105511,1649],{},[14,105513,1654],{"id":1653},[26,105515,105516,105524,105526,105530,105534,105542],{},[29,105517,1659,105518,1662,105520,1666,105522,297],{},[70,105519,411],{},[70,105521,1665],{},[70,105523,1669],{},[29,105525,1672],{},[29,105527,1675,105528,1679],{},[70,105529,1678],{},[29,105531,1682,105532,1685],{},[70,105533,658],{},[29,105535,1659,105536,1690,105538,1666,105540,1697],{},[70,105537,380],{},[70,105539,1693],{},[70,105541,1696],{},[29,105543,1659,105544,551,105546,1666,105548,1708,105550,1711],{},[70,105545,407],{},[70,105547,1704],{},[70,105549,1707],{},[70,105551,1649],{},[14,105553,1715],{"id":1714},[387,105555,105556],{"id":1718},[70,105557,1721],{},[19,105559,1724],{},[387,105561,105562,1730,105564],{"id":1727},[70,105563,1455],{},[70,105565,1459],{},[19,105567,1735,105568,1739],{},[70,105569,1738],{},[387,105571,1742],{"id":1742},[19,105573,1745],{},[26,105575,105576,105580,105584],{},[29,105577,1750,105578],{},[70,105579,448],{},[29,105581,1755,105582],{},[70,105583,1758],{},[29,105585,1761,105586,1764],{},[70,105587,344],{},[387,105589,1767],{"id":1767},[19,105591,1770],{},[45,105593,105594,105602],{},[48,105595,105596],{},[51,105597,105598,105600],{},[54,105599,1779],{"align":56},[54,105601,573],{"align":56},[62,105603,105604,105612],{},[51,105605,105606,105610],{},[67,105607,1788,105608],{"align":56},[70,105609,1704],{},[67,105611,1793],{"align":56},[51,105613,105614,105620],{},[67,105615,105616,123,105618],{"align":56},[70,105617,1515],{},[70,105619,1540],{},[67,105621,1804],{"align":56},[19,105623,1807,105624,1811,105626,1815,105628,1819],{},[70,105625,1810],{},[70,105627,1814],{},[70,105629,1818],{},[14,105631,1823],{"id":1822},[19,105633,1826],{},[26,105635,105636,105640,105644,105648],{},[29,105637,105638,1833],{},[70,105639,376],{},[29,105641,105642,1838],{},[70,105643,380],{},[29,105645,105646,1843],{},[70,105647,384],{},[29,105649,105650,1848],{},[70,105651,658],{},[19,105653,1851],{},[1853,105655,1855],{},{"title":160,"searchDepth":263,"depth":263,"links":105657},[105658,105659,105660,105666,105670,105671,105672,105678],{"id":16,"depth":263,"text":17},{"id":165,"depth":263,"text":166},{"id":303,"depth":263,"text":304,"children":105661},[105662,105663,105664,105665],{"id":389,"depth":274,"text":389},{"id":516,"depth":274,"text":516},{"id":543,"depth":274,"text":544},{"id":652,"depth":274,"text":653},{"id":686,"depth":263,"text":687,"children":105667},[105668,105669],{"id":1135,"depth":274,"text":1135},{"id":1222,"depth":274,"text":1222},{"id":1569,"depth":263,"text":1570},{"id":1653,"depth":263,"text":1654},{"id":1714,"depth":263,"text":1715,"children":105673},[105674,105675,105676,105677],{"id":1718,"depth":274,"text":1721},{"id":1727,"depth":274,"text":1876},{"id":1742,"depth":274,"text":1742},{"id":1767,"depth":274,"text":1767},{"id":1822,"depth":263,"text":1823},{},{"title":5,"description":160},{"id":105682,"title":105683,"body":105684,"description":160,"extension":1880,"meta":107179,"navigation":721,"path":107180,"seo":107181,"stem":107182,"__hash__":107183},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":105685,"toc":107151},[105686,105689,105691,105694,105697,105735,105738,105744,105747,105749,105751,105778,105780,105794,105796,105837,105839,105863,105865,105868,105877,105886,105889,105898,105906,105915,105918,105928,105931,105983,105990,105996,106004,106052,106055,106074,106077,106085,106089,106098,106131,106133,106481,106483,106495,106497,106508,106510,106513,106534,106540,106543,106568,106578,106581,106589,106592,106595,106616,106627,106629,106649,106652,106673,106682,106701,106707,106732,106735,106749,106756,106780,106783,106791,106800,106816,106828,106836,106845,106847,106850,106874,106879,106882,106904,106906,106945,106947,106954,106956,106964,106967,106970,106982,107023,107030,107041,107048,107051,107100,107103,107106,107112,107114,107119,107145,107148],[10,105687,105683],{"id":105688},"_3python-控制接口读取状态与推进仿真",[14,105690,17],{"id":16},[19,105692,105693],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,105695,105696],{},"你将学习:",[26,105698,105699,105704,105709,105713,105718,105729],{},[29,105700,105701],{},[70,105702,105703],{},"MjModel.from_xml_string",[29,105705,105706],{},[70,105707,105708],{},"MjData(model)",[29,105710,105711],{},[70,105712,1818],{},[29,105714,105715],{},[70,105716,105717],{},"mj_resetData",[29,105719,105720,105721,1258,105723,1258,105726],{},"读取 ",[70,105722,1580],{},[70,105724,105725],{},"qvel",[70,105727,105728],{},"ctrl",[29,105730,105731,105732],{},"使用 ",[70,105733,105734],{},"model.opt.timestep",[19,105736,105737],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[154,105739,105742],{"className":105740,"code":105741,"language":159,"meta":160},[157],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[70,105743,105741],{"__ignoreMap":160},[19,105745,105746],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,105748,166],{"id":165},[19,105750,169],{},[154,105752,105754],{"className":172,"code":105753,"language":174,"meta":160,"style":160},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[70,105755,105756],{"__ignoreMap":160},[178,105757,105758,105760,105762,105764,105766,105769,105771,105773,105775],{"class":180,"line":181},[178,105759,185],{"class":184},[178,105761,189],{"class":188},[178,105763,192],{"class":188},[178,105765,196],{"class":195},[178,105767,105768],{"class":188}," python3",[178,105770,102505],{"class":188},[178,105772,199],{"class":188},[178,105774,202],{"class":188},[178,105776,105777],{"class":188}," glfw\n",[19,105779,211],{},[154,105781,105782],{"className":172,"code":214,"language":174,"meta":160,"style":160},[70,105783,105784],{"__ignoreMap":160},[178,105785,105786,105788,105790,105792],{"class":180,"line":181},[178,105787,221],{"class":184},[178,105789,192],{"class":188},[178,105791,226],{"class":188},[178,105793,229],{"class":188},[19,105795,232],{},[154,105797,105799],{"className":172,"code":105798,"language":174,"meta":160,"style":160},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[70,105800,105801,105818,105827],{"__ignoreMap":160},[178,105802,105803,105805,105807,105809,105812,105814,105816],{"class":180,"line":181},[178,105804,242],{"class":184},[178,105806,245],{"class":188},[178,105808,248],{"class":195},[178,105810,105811],{"class":188}," mujoco-python-api",[178,105813,254],{"class":188},[178,105815,257],{"class":195},[178,105817,260],{"class":195},[178,105819,105820,105822,105824],{"class":180,"line":263},[178,105821,242],{"class":184},[178,105823,268],{"class":188},[178,105825,105826],{"class":188}," mujoco-python-api\n",[178,105828,105829,105831,105833,105835],{"class":180,"line":274},[178,105830,221],{"class":184},[178,105832,192],{"class":188},[178,105834,226],{"class":188},[178,105836,229],{"class":188},[19,105838,285],{},[26,105840,105841,105848,105857],{},[29,105842,105843,404,105845,105847],{},[70,105844,102386],{},[70,105846,102391],{}," 是官方 Python bindings 的类名。",[29,105849,105850,105851,105854,105855,297],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[70,105852,105853],{},"mjModel"," 在 Python 中是 ",[70,105856,102419],{},[29,105858,105859,105860,297],{},"不要使用 ",[70,105861,105862],{},"sim = mujoco_py.MjSim(...)",[14,105864,304],{"id":303},[19,105866,105867],{},"仿真推进核心代码:",[154,105869,105871],{"className":690,"code":105870,"language":692,"meta":160,"style":160},"mujoco.mj_step(model, data)\n",[70,105872,105873],{"__ignoreMap":160},[178,105874,105875],{"class":180,"line":181},[178,105876,105870],{"class":319},[19,105878,105879,105880,1258,105882,1258,105884,297],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[70,105881,1810],{},[70,105883,102765],{},[70,105885,102760],{},[19,105887,105888],{},"重置仿真:",[154,105890,105892],{"className":690,"code":105891,"language":692,"meta":160,"style":160},"mujoco.mj_resetData(model, data)\n",[70,105893,105894],{"__ignoreMap":160},[178,105895,105896],{"class":180,"line":181},[178,105897,105891],{"class":319},[19,105899,105900,105901,1815,105903,105905],{},"如果手动修改了 ",[70,105902,1810],{},[70,105904,102765],{},"，通常应调用:",[154,105907,105909],{"className":690,"code":105908,"language":692,"meta":160,"style":160},"mujoco.mj_forward(model, data)\n",[70,105910,105911],{"__ignoreMap":160},[178,105912,105913],{"class":180,"line":181},[178,105914,105908],{"class":319},[19,105916,105917],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[387,105919,105921,1258,105923,1258,105925,105927],{"id":105920},"qposqvelctrl-是什么",[70,105922,1580],{},[70,105924,105725],{},[70,105926,105728],{}," 是什么",[19,105929,105930],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[45,105932,105933,105945],{},[48,105934,105935],{},[51,105936,105937,105940,105942],{},[54,105938,105939],{"align":56},"字段",[54,105941,573],{"align":56},[54,105943,105944],{"align":56},"谁来修改",[62,105946,105947,105959,105971],{},[51,105948,105949,105953,105956],{},[67,105950,105951],{"align":56},[70,105952,1810],{},[67,105954,105955],{"align":56},"广义位置，例如小车位置、关节角、自由物体位置姿态",[67,105957,105958],{"align":56},"MuJoCo 更新，也可以手动设置初始状态",[51,105960,105961,105965,105968],{},[67,105962,105963],{"align":56},[70,105964,102765],{},[67,105966,105967],{"align":56},"广义速度，例如小车速度、关节角速度",[67,105969,105970],{"align":56},"MuJoCo 更新，也可以手动清零",[51,105972,105973,105977,105980],{},[67,105974,105975],{"align":56},[70,105976,102768],{},[67,105978,105979],{"align":56},"actuator 的控制输入",[67,105981,105982],{"align":56},"主要由你的控制代码写入",[19,105984,10786,105985,404,105987,105989],{},[70,105986,1580],{},[70,105988,105725],{}," 不一定同维。自由刚体就是典型例子：",[154,105991,105994],{"className":105992,"code":105993,"language":159,"meta":160},[157],"freejoint: qpos 7 维，qvel 6 维\n",[70,105995,105993],{"__ignoreMap":160},[387,105997,105999,404,106001,106003],{"id":105998},"mj_step-和-mj_forward-的区别",[70,106000,1818],{},[70,106002,1814],{}," 的区别",[45,106005,106006,106019],{},[48,106007,106008],{},[51,106009,106010,106013,106016],{},[54,106011,106012],{"align":56},"函数",[54,106014,106015],{"align":56},"是否推进时间",[54,106017,106018],{"align":56},"什么时候用",[62,106020,106021,106034],{},[51,106022,106023,106028,106031],{},[67,106024,106025],{"align":56},[70,106026,106027],{},"mj_step(model, data)",[67,106029,106030],{"align":56},"是",[67,106032,106033],{"align":56},"正常仿真循环，每调用一次前进一步",[51,106035,106036,106041,106044],{},[67,106037,106038],{"align":56},[70,106039,106040],{},"mj_forward(model, data)",[67,106042,106043],{"align":56},"否",[67,106045,106046,106047,1258,106049,106051],{"align":56},"手动改了 ",[70,106048,1580],{},[70,106050,105725],{}," 后，刷新派生量",[19,106053,106054],{},"例如你写：",[154,106056,106058],{"className":690,"code":106057,"language":692,"meta":160,"style":160},"data.qpos[2] = 2.0\n",[70,106059,106060],{"__ignoreMap":160},[178,106061,106062,106065,106067,106069,106071],{"class":180,"line":181},[178,106063,106064],{"class":319},"data.qpos[",[178,106066,1669],{"class":195},[178,106068,6214],{"class":319},[178,106070,330],{"class":699},[178,106072,106073],{"class":195}," 2.0\n",[19,106075,106076],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[154,106078,106079],{"className":690,"code":105908,"language":692,"meta":160,"style":160},[70,106080,106081],{"__ignoreMap":160},[178,106082,106083],{"class":180,"line":181},[178,106084,105908],{"class":319},[387,106086,106088],{"id":106087},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,106090,106091,106094,106095,106097],{},[70,106092,106093],{},"mujoco.mj_resetData(model, data)"," 会把 ",[70,106096,35133],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[154,106099,106101],{"className":690,"code":106100,"language":692,"meta":160,"style":160},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[70,106102,106103,106107,106117,106127],{"__ignoreMap":160},[178,106104,106105],{"class":180,"line":181},[178,106106,105891],{"class":319},[178,106108,106109,106112,106114],{"class":180,"line":263},[178,106110,106111],{"class":319},"data.qpos[:] ",[178,106113,330],{"class":699},[178,106115,106116],{"class":319}," random_qpos\n",[178,106118,106119,106122,106124],{"class":180,"line":274},[178,106120,106121],{"class":319},"data.qvel[:] ",[178,106123,330],{"class":699},[178,106125,106126],{"class":195}," 0.0\n",[178,106128,106129],{"class":180,"line":354},[178,106130,105908],{"class":319},[14,106132,687],{"id":686},[154,106134,106136],{"className":690,"code":106135,"language":692,"meta":160,"style":160},"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",[70,106137,106138,106144,106154,106158,106162,106170,106175,106179,106183,106187,106192,106196,106201,106206,106211,106215,106219,106223,106227,106231,106235,106254,106261,106273,106284,106300,106316,106320,106324,106336,106348,106356,106360,106371,106375,106391,106395,106399,106408,106412,106417,106426,106430,106443,106448,106457,106461,106465,106477],{"__ignoreMap":160},[178,106139,106140,106142],{"class":180,"line":181},[178,106141,700],{"class":699},[178,106143,703],{"class":319},[178,106145,106146,106148,106150,106152],{"class":180,"line":263},[178,106147,700],{"class":699},[178,106149,710],{"class":319},[178,106151,713],{"class":699},[178,106153,716],{"class":319},[178,106155,106156],{"class":180,"line":274},[178,106157,722],{"emptyLinePlaceholder":721},[178,106159,106160],{"class":180,"line":354},[178,106161,722],{"emptyLinePlaceholder":721},[178,106163,106164,106166,106168],{"class":180,"line":364},[178,106165,731],{"class":195},[178,106167,734],{"class":699},[178,106169,737],{"class":188},[178,106171,106172],{"class":180,"line":740},[178,106173,106174],{"class":188},"\u003Cmujoco model=\"state_api\">\n",[178,106176,106177],{"class":180,"line":746},[178,106178,749],{"class":188},[178,106180,106181],{"class":180,"line":752},[178,106182,722],{"emptyLinePlaceholder":721},[178,106184,106185],{"class":180,"line":757},[178,106186,760],{"class":188},[178,106188,106189],{"class":180,"line":763},[178,106190,106191],{"class":188},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[178,106193,106194],{"class":180,"line":769},[178,106195,722],{"emptyLinePlaceholder":721},[178,106197,106198],{"class":180,"line":774},[178,106199,106200],{"class":188},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[178,106202,106203],{"class":180,"line":780},[178,106204,106205],{"class":188},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[178,106207,106208],{"class":180,"line":786},[178,106209,106210],{"class":188},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[178,106212,106213],{"class":180,"line":792},[178,106214,801],{"class":188},[178,106216,106217],{"class":180,"line":798},[178,106218,807],{"class":188},[178,106220,106221],{"class":180,"line":804},[178,106222,813],{"class":188},[178,106224,106225],{"class":180,"line":810},[178,106226,819],{"class":188},[178,106228,106229],{"class":180,"line":816},[178,106230,722],{"emptyLinePlaceholder":721},[178,106232,106233],{"class":180,"line":822},[178,106234,722],{"emptyLinePlaceholder":721},[178,106236,106237,106239,106242,106245,106247,106250,106252],{"class":180,"line":827},[178,106238,835],{"class":699},[178,106240,106241],{"class":184}," print_state",[178,106243,106244],{"class":319},"(prefix: ",[178,106246,3109],{"class":195},[178,106248,106249],{"class":319},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[178,106251,844],{"class":195},[178,106253,847],{"class":319},[178,106255,106256,106258],{"class":180,"line":832},[178,106257,1022],{"class":195},[178,106259,106260],{"class":319},"(prefix)\n",[178,106262,106263,106265,106267,106270],{"class":180,"line":850},[178,106264,1022],{"class":195},[178,106266,944],{"class":319},[178,106268,106269],{"class":188},"\"  timestep:\"",[178,106271,106272],{"class":319},", model.opt.timestep)\n",[178,106274,106275,106277,106279,106282],{"class":180,"line":866},[178,106276,1022],{"class":195},[178,106278,944],{"class":319},[178,106280,106281],{"class":188},"\"  time:\"",[178,106283,1030],{"class":319},[178,106285,106286,106288,106290,106293,106296,106298],{"class":180,"line":877},[178,106287,1022],{"class":195},[178,106289,944],{"class":319},[178,106291,106292],{"class":188},"\"  qpos:\"",[178,106294,106295],{"class":319},", np.round(data.qpos.copy(), ",[178,106297,2233],{"class":195},[178,106299,32239],{"class":319},[178,106301,106302,106304,106306,106309,106312,106314],{"class":180,"line":882},[178,106303,1022],{"class":195},[178,106305,944],{"class":319},[178,106307,106308],{"class":188},"\"  qvel:\"",[178,106310,106311],{"class":319},", np.round(data.qvel.copy(), ",[178,106313,2233],{"class":195},[178,106315,32239],{"class":319},[178,106317,106318],{"class":180,"line":898},[178,106319,722],{"emptyLinePlaceholder":721},[178,106321,106322],{"class":180,"line":914},[178,106323,722],{"emptyLinePlaceholder":721},[178,106325,106326,106328,106330,106332,106334],{"class":180,"line":919},[178,106327,835],{"class":699},[178,106329,838],{"class":184},[178,106331,841],{"class":319},[178,106333,844],{"class":195},[178,106335,847],{"class":319},[178,106337,106338,106340,106342,106344,106346],{"class":180,"line":935},[178,106339,853],{"class":319},[178,106341,330],{"class":699},[178,106343,858],{"class":319},[178,106345,731],{"class":195},[178,106347,863],{"class":319},[178,106349,106350,106352,106354],{"class":180,"line":952},[178,106351,869],{"class":319},[178,106353,330],{"class":699},[178,106355,874],{"class":319},[178,106357,106358],{"class":180,"line":966},[178,106359,722],{"emptyLinePlaceholder":721},[178,106361,106362,106365,106368],{"class":180,"line":980},[178,106363,106364],{"class":319},"    print_state(",[178,106366,106367],{"class":188},"\"initial\"",[178,106369,106370],{"class":319},", model, data)\n",[178,106372,106373],{"class":180,"line":985},[178,106374,722],{"emptyLinePlaceholder":721},[178,106376,106377,106379,106381,106383,106385,106387,106389],{"class":180,"line":1008},[178,106378,988],{"class":699},[178,106380,991],{"class":319},[178,106382,994],{"class":699},[178,106384,997],{"class":195},[178,106386,944],{"class":319},[178,106388,2596],{"class":195},[178,106390,1005],{"class":319},[178,106392,106393],{"class":180,"line":1014},[178,106394,1011],{"class":319},[178,106396,106397],{"class":180,"line":1019},[178,106398,722],{"emptyLinePlaceholder":721},[178,106400,106401,106403,106406],{"class":180,"line":1033},[178,106402,106364],{"class":319},[178,106404,106405],{"class":188},"\"after 50 steps\"",[178,106407,106370],{"class":319},[178,106409,106410],{"class":180,"line":1046},[178,106411,722],{"emptyLinePlaceholder":721},[178,106413,106414],{"class":180,"line":1059},[178,106415,106416],{"class":319},"    mujoco.mj_resetData(model, data)\n",[178,106418,106419,106421,106424],{"class":180,"line":1072},[178,106420,106364],{"class":319},[178,106422,106423],{"class":188},"\"after reset\"",[178,106425,106370],{"class":319},[178,106427,106428],{"class":180,"line":1077},[178,106429,722],{"emptyLinePlaceholder":721},[178,106431,106432,106435,106437,106439,106441],{"class":180,"line":1082},[178,106433,106434],{"class":319},"    data.qpos[",[178,106436,1669],{"class":195},[178,106438,6214],{"class":319},[178,106440,330],{"class":699},[178,106442,106073],{"class":195},[178,106444,106445],{"class":180,"line":1099},[178,106446,106447],{"class":319},"    mujoco.mj_forward(model, data)\n",[178,106449,106450,106452,106455],{"class":180,"line":9806},[178,106451,106364],{"class":319},[178,106453,106454],{"class":188},"\"after manual qpos edit\"",[178,106456,106370],{"class":319},[178,106458,106459],{"class":180,"line":9818},[178,106460,722],{"emptyLinePlaceholder":721},[178,106462,106463],{"class":180,"line":11477},[178,106464,722],{"emptyLinePlaceholder":721},[178,106466,106467,106469,106471,106473,106475],{"class":180,"line":11502},[178,106468,1085],{"class":699},[178,106470,1088],{"class":195},[178,106472,1091],{"class":699},[178,106474,1094],{"class":188},[178,106476,847],{"class":319},[178,106478,106479],{"class":180,"line":11525},[178,106480,1102],{"class":319},[19,106482,1105],{},[154,106484,106486],{"className":172,"code":106485,"language":174,"meta":160,"style":160},"touch ch3_python_state.py\n",[70,106487,106488],{"__ignoreMap":160},[178,106489,106490,106492],{"class":180,"line":181},[178,106491,1115],{"class":184},[178,106493,106494],{"class":188}," ch3_python_state.py\n",[19,106496,1121],{},[154,106498,106500],{"className":172,"code":106499,"language":174,"meta":160,"style":160},"python ch3_python_state.py\n",[70,106501,106502],{"__ignoreMap":160},[178,106503,106504,106506],{"class":180,"line":181},[178,106505,692],{"class":184},[178,106507,106494],{"class":188},[387,106509,1135],{"id":1135},[19,106511,106512],{},"打印状态的函数：",[154,106514,106516],{"className":690,"code":106515,"language":692,"meta":160,"style":160},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[70,106517,106518],{"__ignoreMap":160},[178,106519,106520,106522,106524,106526,106528,106530,106532],{"class":180,"line":181},[178,106521,835],{"class":699},[178,106523,106241],{"class":184},[178,106525,106244],{"class":319},[178,106527,3109],{"class":195},[178,106529,106249],{"class":319},[178,106531,844],{"class":195},[178,106533,847],{"class":319},[19,106535,106536,106537,106539],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[70,106538,35133],{}," 里发生了什么。",[19,106541,106542],{},"推进 50 步：",[154,106544,106546],{"className":690,"code":106545,"language":692,"meta":160,"style":160},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[70,106547,106548,106564],{"__ignoreMap":160},[178,106549,106550,106552,106554,106556,106558,106560,106562],{"class":180,"line":181},[178,106551,1474],{"class":699},[178,106553,991],{"class":319},[178,106555,994],{"class":699},[178,106557,997],{"class":195},[178,106559,944],{"class":319},[178,106561,2596],{"class":195},[178,106563,1005],{"class":319},[178,106565,106566],{"class":180,"line":263},[178,106567,1491],{"class":319},[19,106569,106570,106571,106574,106575,106577],{},"由于 ",[70,106572,106573],{},"timestep=0.01","，所以 50 步后时间约为 ",[70,106576,37061],{}," 秒。",[19,106579,106580],{},"重置：",[154,106582,106583],{"className":690,"code":105891,"language":692,"meta":160,"style":160},[70,106584,106585],{"__ignoreMap":160},[178,106586,106587],{"class":180,"line":181},[178,106588,105891],{"class":319},[19,106590,106591],{},"这会把时间、位置、速度恢复到初始状态。",[19,106593,106594],{},"手动改高度：",[154,106596,106598],{"className":690,"code":106597,"language":692,"meta":160,"style":160},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[70,106599,106600,106612],{"__ignoreMap":160},[178,106601,106602,106604,106606,106608,106610],{"class":180,"line":181},[178,106603,106064],{"class":319},[178,106605,1669],{"class":195},[178,106607,6214],{"class":319},[178,106609,330],{"class":699},[178,106611,106073],{"class":195},[178,106613,106614],{"class":180,"line":263},[178,106615,105908],{"class":319},[19,106617,106618,106619,106622,106623,106626],{},"这个例子里 ",[70,106620,106621],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[70,106624,106625],{},"2.0"," 表示把小球放到更高的位置。",[387,106628,1222],{"id":1222},[154,106630,106631],{"className":690,"code":106515,"language":692,"meta":160,"style":160},[70,106632,106633],{"__ignoreMap":160},[178,106634,106635,106637,106639,106641,106643,106645,106647],{"class":180,"line":181},[178,106636,835],{"class":699},[178,106638,106241],{"class":184},[178,106640,106244],{"class":319},[178,106642,3109],{"class":195},[178,106644,106249],{"class":319},[178,106646,844],{"class":195},[178,106648,847],{"class":319},[19,106650,106651],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[26,106653,106654,106663,106668],{},[29,106655,106656,106659,106660,106662],{},[70,106657,106658],{},"prefix","：一段文字，比如 ",[70,106661,106367],{},"，用来说明现在打印的是哪个阶段。",[29,106664,106665,106667],{},[70,106666,1384],{},"：MuJoCo 模型。",[29,106669,106670,106672],{},[70,106671,35133],{},"：MuJoCo 当前状态。",[19,106674,106675,1258,106678,106681],{},[70,106676,106677],{},"prefix: str",[70,106679,106680],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[154,106683,106685],{"className":690,"code":106684,"language":692,"meta":160,"style":160},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[70,106686,106687],{"__ignoreMap":160},[178,106688,106689,106691,106693,106695,106697,106699],{"class":180,"line":181},[178,106690,1504],{"class":195},[178,106692,944],{"class":319},[178,106694,106292],{"class":188},[178,106696,106295],{"class":319},[178,106698,2233],{"class":195},[178,106700,32239],{"class":319},[19,106702,106703,106706],{},[70,106704,106705],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[154,106708,106710],{"className":690,"code":106709,"language":692,"meta":160,"style":160},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[70,106711,106712,106724],{"__ignoreMap":160},[178,106713,106714,106716,106718,106720,106722],{"class":180,"line":181},[178,106715,103291],{"class":319},[178,106717,330],{"class":699},[178,106719,858],{"class":319},[178,106721,731],{"class":195},[178,106723,863],{"class":319},[178,106725,106726,106728,106730],{"class":180,"line":263},[178,106727,103315],{"class":319},[178,106729,330],{"class":699},[178,106731,874],{"class":319},[19,106733,106734],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[154,106736,106738],{"className":690,"code":106737,"language":692,"meta":160,"style":160},"print_state(\"initial\", model, data)\n",[70,106739,106740],{"__ignoreMap":160},[178,106741,106742,106745,106747],{"class":180,"line":181},[178,106743,106744],{"class":319},"print_state(",[178,106746,106367],{"class":188},[178,106748,106370],{"class":319},[19,106750,106751,106752,106755],{},"调用刚才定义的 ",[70,106753,106754],{},"print_state"," 函数，打印初始状态。",[154,106757,106758],{"className":690,"code":106545,"language":692,"meta":160,"style":160},[70,106759,106760,106776],{"__ignoreMap":160},[178,106761,106762,106764,106766,106768,106770,106772,106774],{"class":180,"line":181},[178,106763,1474],{"class":699},[178,106765,991],{"class":319},[178,106767,994],{"class":699},[178,106769,997],{"class":195},[178,106771,944],{"class":319},[178,106773,2596],{"class":195},[178,106775,1005],{"class":319},[178,106777,106778],{"class":180,"line":263},[178,106779,1491],{"class":319},[19,106781,106782],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[154,106784,106785],{"className":690,"code":105891,"language":692,"meta":160,"style":160},[70,106786,106787],{"__ignoreMap":160},[178,106788,106789],{"class":180,"line":181},[178,106790,105891],{"class":319},[19,106792,106793,106794,106796,106797,106799],{},"重置 ",[70,106795,35133],{},"。注意它不会重新创建 ",[70,106798,1384],{},"，因为模型结构没有变，只是状态回到初始值。",[154,106801,106802],{"className":690,"code":106057,"language":692,"meta":160,"style":160},[70,106803,106804],{"__ignoreMap":160},[178,106805,106806,106808,106810,106812,106814],{"class":180,"line":181},[178,106807,106064],{"class":319},[178,106809,1669],{"class":195},[178,106811,6214],{"class":319},[178,106813,330],{"class":699},[178,106815,106073],{"class":195},[19,106817,106818,106819,1258,106822,1258,106825,106827],{},"这行是“手动改状态”。在 freejoint 中，",[70,106820,106821],{},"qpos[0]",[70,106823,106824],{},"qpos[1]",[70,106826,106621],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[154,106829,106830],{"className":690,"code":105908,"language":692,"meta":160,"style":160},[70,106831,106832],{"__ignoreMap":160},[178,106833,106834],{"class":180,"line":181},[178,106835,105908],{"class":319},[19,106837,106838,106839,106841,106842,106844],{},"手动改完 ",[70,106840,1580],{}," 后，调用 ",[70,106843,1814],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,106846,1570],{"id":1569},[19,106848,106849],{},"你会看到:",[26,106851,106852,106857,106862,106865],{},[29,106853,106854,106855],{},"初始时间为 ",[70,106856,2133],{},[29,106858,106859,106860],{},"50 步后时间约为 ",[70,106861,37061],{},[29,106863,106864],{},"reset 后状态恢复",[29,106866,106867,106868,106871,106872],{},"手动修改 ",[70,106869,106870],{},"data.qpos[2]"," 后，小球高度变为 ",[70,106873,106625],{},[19,106875,106876,106878],{},[70,106877,106621],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,106880,106881],{},"输出里可以重点看三件事：",[26,106883,106884,106892,106897],{},[29,106885,106886,106888,106889,106891],{},[70,106887,4171],{}," 是否随着 ",[70,106890,1818],{}," 增加。",[29,106893,106894,106896],{},[70,106895,1580],{}," 的 z 坐标是否因为下落而变化。",[29,106898,106899,106901,106902,297],{},[70,106900,105717],{}," 后时间是否回到 ",[70,106903,2133],{},[14,106905,1654],{"id":1653},[26,106907,106908,106914,106920,106926,106929,106938],{},[29,106909,106910,106911,297],{},"修改 timestep 为 ",[70,106912,106913],{},"0.005",[29,106915,106916,106917,297],{},"重新运行，检查 50 步后时间是否约为 ",[70,106918,106919],{},"0.25",[29,106921,106922,106923,297],{},"修改重力为 ",[70,106924,106925],{},"0 0 -1.0",[29,106927,106928],{},"观察小球下降速度是否变慢。",[29,106930,1659,106931,1666,106934,106937],{},[70,106932,106933],{},"data.qpos[2] = 2.0",[70,106935,106936],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[29,106939,106940,106941,106944],{},"注释掉 ",[70,106942,106943],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,106946,1715],{"id":1714},[387,106948,106950,106951,106953],{"id":106949},"修改-dataqpos-后位置没有更新","修改 ",[70,106952,1810],{}," 后位置没有更新",[19,106955,104102],{},[154,106957,106958],{"className":690,"code":105908,"language":692,"meta":160,"style":160},[70,106959,106960],{"__ignoreMap":160},[178,106961,106962],{"class":180,"line":181},[178,106963,105908],{"class":319},[387,106965,106966],{"id":106966},"数组维度看不懂",[19,106968,106969],{},"打印模型维度:",[154,106971,106973],{"className":690,"code":106972,"language":692,"meta":160,"style":160},"print(model.nq, model.nv, model.nu)\n",[70,106974,106975],{"__ignoreMap":160},[178,106976,106977,106979],{"class":180,"line":181},[178,106978,1504],{"class":195},[178,106980,106981],{"class":319},"(model.nq, model.nv, model.nu)\n",[45,106983,106984,106992],{},[48,106985,106986],{},[51,106987,106988,106990],{},[54,106989,105939],{"align":56},[54,106991,573],{"align":56},[62,106993,106994,107004,107014],{},[51,106995,106996,107001],{},[67,106997,106998],{"align":56},[70,106999,107000],{},"nq",[67,107002,107003],{"align":56},"位置变量数量",[51,107005,107006,107011],{},[67,107007,107008],{"align":56},[70,107009,107010],{},"nv",[67,107012,107013],{"align":56},"速度变量数量",[51,107015,107016,107020],{},[67,107017,107018],{"align":56},[70,107019,103811],{},[67,107021,107022],{"align":56},"控制输入数量",[387,107024,107026,107027,107029],{"id":107025},"误以为-qpos-一定等于关节数","误以为 ",[70,107028,1580],{}," 一定等于关节数",[19,107031,107032,107033,551,107035,107037,107038,107040],{},"不是。例如 ",[70,107034,448],{},[70,107036,1580],{}," 是 7 维，但 ",[70,107039,105725],{}," 是 6 维。",[387,107042,107044,107045,107047],{"id":107043},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[70,107046,1580],{}," 的第几位",[19,107049,107050],{},"初学时可以先打印：",[154,107052,107054],{"className":690,"code":107053,"language":692,"meta":160,"style":160},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[70,107055,107056,107066,107076,107088],{"__ignoreMap":160},[178,107057,107058,107060,107062,107064],{"class":180,"line":181},[178,107059,1504],{"class":195},[178,107061,944],{"class":319},[178,107063,103106],{"class":188},[178,107065,103109],{"class":319},[178,107067,107068,107070,107072,107074],{"class":180,"line":263},[178,107069,1504],{"class":195},[178,107071,944],{"class":319},[178,107073,103118],{"class":188},[178,107075,103121],{"class":319},[178,107077,107078,107080,107082,107085],{"class":180,"line":274},[178,107079,1504],{"class":195},[178,107081,944],{"class":319},[178,107083,107084],{"class":188},"\"qpos:\"",[178,107086,107087],{"class":319},", data.qpos)\n",[178,107089,107090,107092,107094,107097],{"class":180,"line":354},[178,107091,1504],{"class":195},[178,107093,944],{"class":319},[178,107095,107096],{"class":188},"\"qvel:\"",[178,107098,107099],{"class":319},", data.qvel)\n",[19,107101,107102],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[387,107104,107105],{"id":107105},"仿真结果每次都一样",[19,107107,107108,107109,107111],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[70,107110,1580],{},"、目标点或控制输入。",[14,107113,1823],{"id":1822},[19,107115,107116,107117,26372],{},"Python 控制 MuJoCo 的核心就是读写 ",[70,107118,35133],{},[26,107120,107121,107129,107134,107139],{},[29,107122,107123,107124,404,107126,107128],{},"用 ",[70,107125,1810],{},[70,107127,102765],{}," 读取状态。",[29,107130,107123,107131,107133],{},[70,107132,102768],{}," 写入控制。",[29,107135,107123,107136,107138],{},[70,107137,1818],{}," 推进时间。",[29,107140,107141,107142,107144],{},"手动改状态后用 ",[70,107143,1814],{}," 刷新派生量。",[19,107146,107147],{},"理解这一章后，就可以进入关节和 actuator 控制。",[1853,107149,107150],{},"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":160,"searchDepth":263,"depth":263,"links":107152},[107153,107154,107155,107162,107166,107167,107168,107178],{"id":16,"depth":263,"text":17},{"id":165,"depth":263,"text":166},{"id":303,"depth":263,"text":304,"children":107156},[107157,107159,107161],{"id":105920,"depth":274,"text":107158},"qpos、qvel、ctrl 是什么",{"id":105998,"depth":274,"text":107160},"mj_step 和 mj_forward 的区别",{"id":106087,"depth":274,"text":106088},{"id":686,"depth":263,"text":687,"children":107163},[107164,107165],{"id":1135,"depth":274,"text":1135},{"id":1222,"depth":274,"text":1222},{"id":1569,"depth":263,"text":1570},{"id":1653,"depth":263,"text":1654},{"id":1714,"depth":263,"text":1715,"children":107169},[107170,107172,107173,107175,107177],{"id":106949,"depth":274,"text":107171},"修改 data.qpos 后位置没有更新",{"id":106966,"depth":274,"text":106966},{"id":107025,"depth":274,"text":107174},"误以为 qpos 一定等于关节数",{"id":107043,"depth":274,"text":107176},"不知道某个元素在 qpos 的第几位",{"id":107105,"depth":274,"text":107105},{"id":1822,"depth":263,"text":1823},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":105683,"description":160},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107185,"title":107186,"body":107187,"description":160,"extension":1880,"meta":108877,"navigation":721,"path":108878,"seo":108879,"stem":108880,"__hash__":108881},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107188,"toc":108853},[107189,107192,107194,107197,107199,107224,107227,107246,107249,107251,107253,107277,107279,107293,107295,107336,107338,107362,107364,107367,107401,107403,107416,107419,107487,107496,107500,107503,107537,107543,107546,107550,107589,107592,107612,107616,107659,107661,107690,107693,107699,107702,107704,108098,108100,108112,108114,108125,108127,108130,108159,108167,108170,108205,108208,108210,108218,108221,108223,108234,108244,108264,108267,108303,108315,108363,108382,108424,108437,108465,108470,108491,108501,108519,108522,108556,108559,108579,108582,108601,108607,108609,108612,108618,108624,108634,108637,108643,108652,108654,108700,108702,108708,108714,108717,108720,108740,108743,108749,108755,108757,108780,108783,108786,108795,108798,108836,108838,108841,108847,108850],[10,107190,107186],{"id":107191},"_4关节actuator-与力控制",[14,107193,17],{"id":16},[19,107195,107196],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,107198,105696],{},[26,107200,107201,107207,107212,107216,107221],{},[29,107202,107203,107206],{},[70,107204,107205],{},"hinge"," 关节",[29,107208,107209],{},[70,107210,107211],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[29,107213,107214],{},[70,107215,102768],{},[29,107217,107218],{},[70,107219,107220],{},"ctrlrange",[29,107222,107223],{},"读取关节角和角速度",[19,107225,107226],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[154,107228,107230],{"className":690,"code":107229,"language":692,"meta":160,"style":160},"data.ctrl[0] = ...\n",[70,107231,107232],{"__ignoreMap":160},[178,107233,107234,107237,107239,107241,107243],{"class":180,"line":181},[178,107235,107236],{"class":319},"data.ctrl[",[178,107238,2133],{"class":195},[178,107240,6214],{"class":319},[178,107242,330],{"class":699},[178,107244,107245],{"class":195}," ...\n",[19,107247,107248],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107250,166],{"id":165},[19,107252,169],{},[154,107254,107255],{"className":172,"code":105753,"language":174,"meta":160,"style":160},[70,107256,107257],{"__ignoreMap":160},[178,107258,107259,107261,107263,107265,107267,107269,107271,107273,107275],{"class":180,"line":181},[178,107260,185],{"class":184},[178,107262,189],{"class":188},[178,107264,192],{"class":188},[178,107266,196],{"class":195},[178,107268,105768],{"class":188},[178,107270,102505],{"class":188},[178,107272,199],{"class":188},[178,107274,202],{"class":188},[178,107276,105777],{"class":188},[19,107278,211],{},[154,107280,107281],{"className":172,"code":214,"language":174,"meta":160,"style":160},[70,107282,107283],{"__ignoreMap":160},[178,107284,107285,107287,107289,107291],{"class":180,"line":181},[178,107286,221],{"class":184},[178,107288,192],{"class":188},[178,107290,226],{"class":188},[178,107292,229],{"class":188},[19,107294,232],{},[154,107296,107298],{"className":172,"code":107297,"language":174,"meta":160,"style":160},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[70,107299,107300,107317,107326],{"__ignoreMap":160},[178,107301,107302,107304,107306,107308,107311,107313,107315],{"class":180,"line":181},[178,107303,242],{"class":184},[178,107305,245],{"class":188},[178,107307,248],{"class":195},[178,107309,107310],{"class":188}," mujoco-control",[178,107312,254],{"class":188},[178,107314,257],{"class":195},[178,107316,260],{"class":195},[178,107318,107319,107321,107323],{"class":180,"line":263},[178,107320,242],{"class":184},[178,107322,268],{"class":188},[178,107324,107325],{"class":188}," mujoco-control\n",[178,107327,107328,107330,107332,107334],{"class":180,"line":274},[178,107329,221],{"class":184},[178,107331,192],{"class":188},[178,107333,226],{"class":188},[178,107335,229],{"class":188},[19,107337,285],{},[26,107339,107340,107346,107353,107359],{},[29,107341,107342,107345],{},[70,107343,107344],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[29,107347,107348,107350,107351,297],{},[70,107349,102768],{}," 长度等于 ",[70,107352,103807],{},[29,107354,1596,107355,107358],{},[70,107356,107357],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[29,107360,107361],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,107363,304],{"id":303},[19,107365,107366],{},"关节决定 body 如何运动:",[154,107368,107370],{"className":310,"code":107369,"language":312,"meta":160,"style":160},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[70,107371,107372],{"__ignoreMap":160},[178,107373,107374,107376,107378,107380,107382,107385,107387,107389,107391,107394,107396,107399],{"class":180,"line":181},[178,107375,320],{"class":319},[178,107377,384],{"class":323},[178,107379,426],{"class":184},[178,107381,330],{"class":319},[178,107383,107384],{"class":188},"\"hinge\"",[178,107386,467],{"class":184},[178,107388,330],{"class":319},[178,107390,107384],{"class":188},[178,107392,107393],{"class":184}," axis",[178,107395,330],{"class":319},[178,107397,107398],{"class":188},"\"0 1 0\"",[178,107400,458],{"class":319},[19,107402,492],{},[26,107404,107405,107410,107413],{},[29,107406,107407,107408],{},"名字是 ",[70,107409,107205],{},[29,107411,107412],{},"类型是旋转关节",[29,107414,107415],{},"绕 y 轴旋转",[19,107417,107418],{},"actuator 决定如何施加控制:",[154,107420,107422],{"className":310,"code":107421,"language":312,"meta":160,"style":160},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[70,107423,107424,107433,107479],{"__ignoreMap":160},[178,107425,107426,107428,107431],{"class":180,"line":181},[178,107427,320],{"class":319},[178,107429,107430],{"class":323},"actuator",[178,107432,336],{"class":319},[178,107434,107435,107437,107440,107442,107444,107447,107450,107452,107454,107457,107459,107461,107464,107466,107469,107472,107474,107477],{"class":180,"line":263},[178,107436,341],{"class":319},[178,107438,107439],{"class":323},"motor",[178,107441,426],{"class":184},[178,107443,330],{"class":319},[178,107445,107446],{"class":188},"\"hinge_motor\"",[178,107448,107449],{"class":184}," joint",[178,107451,330],{"class":319},[178,107453,107384],{"class":188},[178,107455,107456],{"class":184}," gear",[178,107458,330],{"class":319},[178,107460,5451],{"class":188},[178,107462,107463],{"class":184}," ctrlrange",[178,107465,330],{"class":319},[178,107467,107468],{"class":188},"\"-2 2\"",[178,107470,107471],{"class":184}," ctrllimited",[178,107473,330],{"class":319},[178,107475,107476],{"class":188},"\"true\"",[178,107478,458],{"class":319},[178,107480,107481,107483,107485],{"class":180,"line":274},[178,107482,367],{"class":319},[178,107484,107430],{"class":323},[178,107486,336],{"class":319},[19,107488,107489,107492,107493,297],{},[70,107490,107491],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[70,107494,107495],{},"[-2, 2]",[387,107497,107499],{"id":107498},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,107501,107502],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[45,107504,107505,107515],{},[48,107506,107507],{},[51,107508,107509,107511,107513],{},[54,107510,27505],{"align":56},[54,107512,60],{"align":56},[54,107514,102444],{"align":56},[62,107516,107517,107527],{},[51,107518,107519,107521,107524],{},[67,107520,384],{"align":56},[67,107522,107523],{"align":56},"定义能怎么动",[67,107525,107526],{"align":56},"门轴允许门旋转",[51,107528,107529,107531,107534],{},[67,107530,107430],{"align":56},[67,107532,107533],{"align":56},"定义怎么施力或控制",[67,107535,107536],{"align":56},"人推门、马达带动门",[19,107538,107539,107540,107542],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[70,107541,102768],{}," 主动控制它。",[19,107544,107545],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[387,107547,107549],{"id":107548},"hinge-joint","hinge joint",[154,107551,107553],{"className":310,"code":107552,"language":312,"meta":160,"style":160},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[70,107554,107555],{"__ignoreMap":160},[178,107556,107557,107559,107561,107563,107565,107567,107569,107571,107573,107575,107577,107579,107582,107584,107587],{"class":180,"line":181},[178,107558,320],{"class":319},[178,107560,384],{"class":323},[178,107562,426],{"class":184},[178,107564,330],{"class":319},[178,107566,107384],{"class":188},[178,107568,467],{"class":184},[178,107570,330],{"class":319},[178,107572,107384],{"class":188},[178,107574,107393],{"class":184},[178,107576,330],{"class":319},[178,107578,107398],{"class":188},[178,107580,107581],{"class":184}," damping",[178,107583,330],{"class":319},[178,107585,107586],{"class":188},"\"0.1\"",[178,107588,458],{"class":319},[19,107590,107591],{},"含义：",[26,107593,107594,107600,107606],{},[29,107595,107596,107599],{},[70,107597,107598],{},"type=\"hinge\"","：只能绕一个轴旋转。",[29,107601,107602,107605],{},[70,107603,107604],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[29,107607,107608,107611],{},[70,107609,107610],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[387,107613,107615],{"id":107614},"motor-actuator","motor actuator",[154,107617,107619],{"className":310,"code":107618,"language":312,"meta":160,"style":160},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[70,107620,107621],{"__ignoreMap":160},[178,107622,107623,107625,107627,107629,107631,107633,107635,107637,107639,107641,107643,107645,107647,107649,107651,107653,107655,107657],{"class":180,"line":181},[178,107624,320],{"class":319},[178,107626,107439],{"class":323},[178,107628,426],{"class":184},[178,107630,330],{"class":319},[178,107632,107446],{"class":188},[178,107634,107449],{"class":184},[178,107636,330],{"class":319},[178,107638,107384],{"class":188},[178,107640,107456],{"class":184},[178,107642,330],{"class":319},[178,107644,5451],{"class":188},[178,107646,107463],{"class":184},[178,107648,330],{"class":319},[178,107650,107468],{"class":188},[178,107652,107471],{"class":184},[178,107654,330],{"class":319},[178,107656,107476],{"class":188},[178,107658,458],{"class":319},[19,107660,107591],{},[26,107662,107663,107672,107678,107684],{},[29,107664,107665,107668,107669,107671],{},[70,107666,107667],{},"joint=\"hinge\"","：这个电机作用在名为 ",[70,107670,107205],{}," 的关节上。",[29,107673,107674,107677],{},[70,107675,107676],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[29,107679,107680,107683],{},[70,107681,107682],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[29,107685,107686,107689],{},[70,107687,107688],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,107691,107692],{},"简单理解：",[154,107694,107697],{"className":107695,"code":107696,"language":159,"meta":160},[157],"实际施加效果 ≈ data.ctrl[0] * gear\n",[70,107698,107696],{"__ignoreMap":160},[19,107700,107701],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,107703,687],{"id":686},[154,107705,107707],{"className":690,"code":107706,"language":692,"meta":160,"style":160},"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",[70,107708,107709,107716,107720,107726,107736,107740,107744,107752,107757,107762,107766,107770,107775,107780,107784,107789,107794,107799,107804,107808,107812,107816,107821,107826,107831,107835,107839,107843,107847,107859,107871,107879,107883,107893,107903,107913,107917,107930,107943,107947,107964,107978,108013,108017,108021,108032,108047,108062,108074,108078,108082,108094],{"__ignoreMap":160},[178,107710,107711,107713],{"class":180,"line":181},[178,107712,700],{"class":699},[178,107714,107715],{"class":319}," math\n",[178,107717,107718],{"class":180,"line":263},[178,107719,722],{"emptyLinePlaceholder":721},[178,107721,107722,107724],{"class":180,"line":274},[178,107723,700],{"class":699},[178,107725,703],{"class":319},[178,107727,107728,107730,107732,107734],{"class":180,"line":354},[178,107729,700],{"class":699},[178,107731,710],{"class":319},[178,107733,713],{"class":699},[178,107735,716],{"class":319},[178,107737,107738],{"class":180,"line":364},[178,107739,722],{"emptyLinePlaceholder":721},[178,107741,107742],{"class":180,"line":740},[178,107743,722],{"emptyLinePlaceholder":721},[178,107745,107746,107748,107750],{"class":180,"line":746},[178,107747,731],{"class":195},[178,107749,734],{"class":699},[178,107751,737],{"class":188},[178,107753,107754],{"class":180,"line":752},[178,107755,107756],{"class":188},"\u003Cmujoco model=\"one_link_motor\">\n",[178,107758,107759],{"class":180,"line":757},[178,107760,107761],{"class":188},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[178,107763,107764],{"class":180,"line":763},[178,107765,722],{"emptyLinePlaceholder":721},[178,107767,107768],{"class":180,"line":769},[178,107769,760],{"class":188},[178,107771,107772],{"class":180,"line":774},[178,107773,107774],{"class":188},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[178,107776,107777],{"class":180,"line":780},[178,107778,107779],{"class":188},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[178,107781,107782],{"class":180,"line":786},[178,107783,722],{"emptyLinePlaceholder":721},[178,107785,107786],{"class":180,"line":792},[178,107787,107788],{"class":188},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[178,107790,107791],{"class":180,"line":798},[178,107792,107793],{"class":188},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[178,107795,107796],{"class":180,"line":804},[178,107797,107798],{"class":188},"        \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",[178,107800,107801],{"class":180,"line":810},[178,107802,107803],{"class":188},"      \u003C\u002Fbody>\n",[178,107805,107806],{"class":180,"line":816},[178,107807,801],{"class":188},[178,107809,107810],{"class":180,"line":822},[178,107811,807],{"class":188},[178,107813,107814],{"class":180,"line":827},[178,107815,722],{"emptyLinePlaceholder":721},[178,107817,107818],{"class":180,"line":832},[178,107819,107820],{"class":188},"  \u003Cactuator>\n",[178,107822,107823],{"class":180,"line":850},[178,107824,107825],{"class":188},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[178,107827,107828],{"class":180,"line":866},[178,107829,107830],{"class":188},"  \u003C\u002Factuator>\n",[178,107832,107833],{"class":180,"line":877},[178,107834,813],{"class":188},[178,107836,107837],{"class":180,"line":882},[178,107838,819],{"class":188},[178,107840,107841],{"class":180,"line":898},[178,107842,722],{"emptyLinePlaceholder":721},[178,107844,107845],{"class":180,"line":914},[178,107846,722],{"emptyLinePlaceholder":721},[178,107848,107849,107851,107853,107855,107857],{"class":180,"line":919},[178,107850,835],{"class":699},[178,107852,838],{"class":184},[178,107854,841],{"class":319},[178,107856,844],{"class":195},[178,107858,847],{"class":319},[178,107860,107861,107863,107865,107867,107869],{"class":180,"line":935},[178,107862,853],{"class":319},[178,107864,330],{"class":699},[178,107866,858],{"class":319},[178,107868,731],{"class":195},[178,107870,863],{"class":319},[178,107872,107873,107875,107877],{"class":180,"line":952},[178,107874,869],{"class":319},[178,107876,330],{"class":699},[178,107878,874],{"class":319},[178,107880,107881],{"class":180,"line":966},[178,107882,722],{"emptyLinePlaceholder":721},[178,107884,107885,107887,107889,107891],{"class":180,"line":980},[178,107886,1022],{"class":195},[178,107888,944],{"class":319},[178,107890,103106],{"class":188},[178,107892,103109],{"class":319},[178,107894,107895,107897,107899,107901],{"class":180,"line":985},[178,107896,1022],{"class":195},[178,107898,944],{"class":319},[178,107900,103118],{"class":188},[178,107902,103121],{"class":319},[178,107904,107905,107907,107909,107911],{"class":180,"line":1008},[178,107906,1022],{"class":195},[178,107908,944],{"class":319},[178,107910,103130],{"class":188},[178,107912,103133],{"class":319},[178,107914,107915],{"class":180,"line":1014},[178,107916,722],{"emptyLinePlaceholder":721},[178,107918,107919,107921,107924,107926,107928],{"class":180,"line":1019},[178,107920,922],{"class":699},[178,107922,107923],{"class":319}," model.nu ",[178,107925,22706],{"class":699},[178,107927,26870],{"class":195},[178,107929,847],{"class":319},[178,107931,107932,107934,107936,107938,107941],{"class":180,"line":1033},[178,107933,938],{"class":699},[178,107935,941],{"class":195},[178,107937,944],{"class":319},[178,107939,107940],{"class":188},"\"expected exactly one actuator\"",[178,107942,863],{"class":319},[178,107944,107945],{"class":180,"line":1046},[178,107946,722],{"emptyLinePlaceholder":721},[178,107948,107949,107951,107953,107955,107957,107959,107962],{"class":180,"line":1059},[178,107950,988],{"class":699},[178,107952,33351],{"class":319},[178,107954,994],{"class":699},[178,107956,997],{"class":195},[178,107958,944],{"class":319},[178,107960,107961],{"class":195},"2000",[178,107963,1005],{"class":319},[178,107965,107966,107969,107971,107973,107975],{"class":180,"line":1072},[178,107967,107968],{"class":319},"        t ",[178,107970,330],{"class":699},[178,107972,33351],{"class":319},[178,107974,2395],{"class":699},[178,107976,107977],{"class":319}," model.opt.timestep\n",[178,107979,107980,107983,107985,107987,107989,107992,107994,107997,107999,108001,108004,108006,108008,108010],{"class":180,"line":1077},[178,107981,107982],{"class":319},"        data.ctrl[",[178,107984,2133],{"class":195},[178,107986,6214],{"class":319},[178,107988,330],{"class":699},[178,107990,107991],{"class":195}," 1.5",[178,107993,8287],{"class":699},[178,107995,107996],{"class":319}," math.sin(",[178,107998,106625],{"class":195},[178,108000,8287],{"class":699},[178,108002,108003],{"class":319}," math.pi ",[178,108005,2395],{"class":699},[178,108007,63588],{"class":195},[178,108009,8287],{"class":699},[178,108011,108012],{"class":319}," t)\n",[178,108014,108015],{"class":180,"line":1082},[178,108016,1011],{"class":319},[178,108018,108019],{"class":180,"line":1099},[178,108020,722],{"emptyLinePlaceholder":721},[178,108022,108023,108025,108027,108030],{"class":180,"line":9806},[178,108024,1022],{"class":195},[178,108026,944],{"class":319},[178,108028,108029],{"class":188},"\"time:\"",[178,108031,1030],{"class":319},[178,108033,108034,108036,108038,108041,108043,108045],{"class":180,"line":9818},[178,108035,1022],{"class":195},[178,108037,944],{"class":319},[178,108039,108040],{"class":188},"\"joint qpos:\"",[178,108042,106295],{"class":319},[178,108044,2233],{"class":195},[178,108046,32239],{"class":319},[178,108048,108049,108051,108053,108056,108058,108060],{"class":180,"line":11477},[178,108050,1022],{"class":195},[178,108052,944],{"class":319},[178,108054,108055],{"class":188},"\"joint qvel:\"",[178,108057,106311],{"class":319},[178,108059,2233],{"class":195},[178,108061,32239],{"class":319},[178,108063,108064,108066,108068,108071],{"class":180,"line":11502},[178,108065,1022],{"class":195},[178,108067,944],{"class":319},[178,108069,108070],{"class":188},"\"last ctrl:\"",[178,108072,108073],{"class":319},", data.ctrl.copy())\n",[178,108075,108076],{"class":180,"line":11525},[178,108077,722],{"emptyLinePlaceholder":721},[178,108079,108080],{"class":180,"line":11549},[178,108081,722],{"emptyLinePlaceholder":721},[178,108083,108084,108086,108088,108090,108092],{"class":180,"line":11554},[178,108085,1085],{"class":699},[178,108087,1088],{"class":195},[178,108089,1091],{"class":699},[178,108091,1094],{"class":188},[178,108093,847],{"class":319},[178,108095,108096],{"class":180,"line":11559},[178,108097,1102],{"class":319},[19,108099,1105],{},[154,108101,108103],{"className":172,"code":108102,"language":174,"meta":160,"style":160},"touch ch4_joint_motor.py\n",[70,108104,108105],{"__ignoreMap":160},[178,108106,108107,108109],{"class":180,"line":181},[178,108108,1115],{"class":184},[178,108110,108111],{"class":188}," ch4_joint_motor.py\n",[19,108113,1121],{},[154,108115,108117],{"className":172,"code":108116,"language":174,"meta":160,"style":160},"python ch4_joint_motor.py\n",[70,108118,108119],{"__ignoreMap":160},[178,108120,108121,108123],{"class":180,"line":181},[178,108122,692],{"class":184},[178,108124,108111],{"class":188},[387,108126,1135],{"id":1135},[19,108128,108129],{},"检查 actuator 数量：",[154,108131,108133],{"className":690,"code":108132,"language":692,"meta":160,"style":160},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[70,108134,108135,108147],{"__ignoreMap":160},[178,108136,108137,108139,108141,108143,108145],{"class":180,"line":181},[178,108138,1085],{"class":699},[178,108140,107923],{"class":319},[178,108142,22706],{"class":699},[178,108144,26870],{"class":195},[178,108146,847],{"class":319},[178,108148,108149,108151,108153,108155,108157],{"class":180,"line":263},[178,108150,1439],{"class":699},[178,108152,941],{"class":195},[178,108154,944],{"class":319},[178,108156,107940],{"class":188},[178,108158,863],{"class":319},[19,108160,108161,108163,108164,108166],{},[70,108162,103807],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[70,108165,102768],{}," 长度应该是 1。",[19,108168,108169],{},"产生正弦控制信号：",[154,108171,108173],{"className":690,"code":108172,"language":692,"meta":160,"style":160},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[70,108174,108175],{"__ignoreMap":160},[178,108176,108177,108179,108181,108183,108185,108187,108189,108191,108193,108195,108197,108199,108201,108203],{"class":180,"line":181},[178,108178,107236],{"class":319},[178,108180,2133],{"class":195},[178,108182,6214],{"class":319},[178,108184,330],{"class":699},[178,108186,107991],{"class":195},[178,108188,8287],{"class":699},[178,108190,107996],{"class":319},[178,108192,106625],{"class":195},[178,108194,8287],{"class":699},[178,108196,108003],{"class":319},[178,108198,2395],{"class":699},[178,108200,63588],{"class":195},[178,108202,8287],{"class":699},[178,108204,108012],{"class":319},[19,108206,108207],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,108209,103330],{},[154,108211,108212],{"className":690,"code":105870,"language":692,"meta":160,"style":160},[70,108213,108214],{"__ignoreMap":160},[178,108215,108216],{"class":180,"line":181},[178,108217,105870],{"class":319},[19,108219,108220],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[387,108222,1222],{"id":1222},[154,108224,108226],{"className":690,"code":108225,"language":692,"meta":160,"style":160},"import math\n",[70,108227,108228],{"__ignoreMap":160},[178,108229,108230,108232],{"class":180,"line":181},[178,108231,700],{"class":699},[178,108233,107715],{"class":319},[19,108235,108236,108237,404,108240,108243],{},"导入 Python 标准库里的数学模块。后面要用 ",[70,108238,108239],{},"math.sin",[70,108241,108242],{},"math.pi"," 生成周期变化的控制信号。",[154,108245,108246],{"className":690,"code":1225,"language":692,"meta":160,"style":160},[70,108247,108248,108254],{"__ignoreMap":160},[178,108249,108250,108252],{"class":180,"line":181},[178,108251,700],{"class":699},[178,108253,703],{"class":319},[178,108255,108256,108258,108260,108262],{"class":180,"line":263},[178,108257,700],{"class":699},[178,108259,710],{"class":319},[178,108261,713],{"class":699},[178,108263,716],{"class":319},[19,108265,108266],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[154,108268,108269],{"className":310,"code":107552,"language":312,"meta":160,"style":160},[70,108270,108271],{"__ignoreMap":160},[178,108272,108273,108275,108277,108279,108281,108283,108285,108287,108289,108291,108293,108295,108297,108299,108301],{"class":180,"line":181},[178,108274,320],{"class":319},[178,108276,384],{"class":323},[178,108278,426],{"class":184},[178,108280,330],{"class":319},[178,108282,107384],{"class":188},[178,108284,467],{"class":184},[178,108286,330],{"class":319},[178,108288,107384],{"class":188},[178,108290,107393],{"class":184},[178,108292,330],{"class":319},[178,108294,107398],{"class":188},[178,108296,107581],{"class":184},[178,108298,330],{"class":319},[178,108300,107586],{"class":188},[178,108302,458],{"class":319},[19,108304,108305,108306,108308,108309,108311,108312,108314],{},"这行定义关节。",[70,108307,107205],{}," 表示旋转关节。",[70,108310,107604],{}," 表示绕 y 轴旋转。",[70,108313,107610],{}," 表示有一点阻尼，运动不会完全无损耗。",[154,108316,108318],{"className":310,"code":108317,"language":312,"meta":160,"style":160},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[70,108319,108320],{"__ignoreMap":160},[178,108321,108322,108324,108326,108328,108330,108333,108335,108337,108340,108343,108345,108348,108350,108352,108354,108356,108358,108361],{"class":180,"line":181},[178,108323,320],{"class":319},[178,108325,380],{"class":323},[178,108327,426],{"class":184},[178,108329,330],{"class":319},[178,108331,108332],{"class":188},"\"link_geom\"",[178,108334,467],{"class":184},[178,108336,330],{"class":319},[178,108338,108339],{"class":188},"\"capsule\"",[178,108341,108342],{"class":184}," fromto",[178,108344,330],{"class":319},[178,108346,108347],{"class":188},"\"0 0 0 0 0 0.5\"",[178,108349,474],{"class":184},[178,108351,330],{"class":319},[178,108353,1320],{"class":188},[178,108355,103653],{"class":184},[178,108357,330],{"class":319},[178,108359,108360],{"class":188},"\"0.5\"",[178,108362,458],{"class":319},[19,108364,108365,108366,108368,108369,108371,108372,108375,108376,297,108379,108381],{},"这行定义摆杆的形状。",[70,108367,611],{}," 是胶囊体，适合表示杆子。",[70,108370,622],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[70,108373,108374],{},"(0,0,0)"," 延伸到 ",[70,108377,108378],{},"(0,0,0.5)",[70,108380,616],{}," 是半径。",[154,108383,108384],{"className":310,"code":107618,"language":312,"meta":160,"style":160},[70,108385,108386],{"__ignoreMap":160},[178,108387,108388,108390,108392,108394,108396,108398,108400,108402,108404,108406,108408,108410,108412,108414,108416,108418,108420,108422],{"class":180,"line":181},[178,108389,320],{"class":319},[178,108391,107439],{"class":323},[178,108393,426],{"class":184},[178,108395,330],{"class":319},[178,108397,107446],{"class":188},[178,108399,107449],{"class":184},[178,108401,330],{"class":319},[178,108403,107384],{"class":188},[178,108405,107456],{"class":184},[178,108407,330],{"class":319},[178,108409,5451],{"class":188},[178,108411,107463],{"class":184},[178,108413,330],{"class":319},[178,108415,107468],{"class":188},[178,108417,107471],{"class":184},[178,108419,330],{"class":319},[178,108421,107476],{"class":188},[178,108423,458],{"class":319},[19,108425,108426,108427,108429,108430,108433,108434,108436],{},"这行定义电机。它作用在 ",[70,108428,107205],{}," 关节上。",[70,108431,108432],{},"gear"," 可以理解成放大倍数。",[70,108435,107220],{}," 限制控制输入范围。",[154,108438,108439],{"className":690,"code":108132,"language":692,"meta":160,"style":160},[70,108440,108441,108453],{"__ignoreMap":160},[178,108442,108443,108445,108447,108449,108451],{"class":180,"line":181},[178,108444,1085],{"class":699},[178,108446,107923],{"class":319},[178,108448,22706],{"class":699},[178,108450,26870],{"class":195},[178,108452,847],{"class":319},[178,108454,108455,108457,108459,108461,108463],{"class":180,"line":263},[178,108456,1439],{"class":699},[178,108458,941],{"class":195},[178,108460,944],{"class":319},[178,108462,107940],{"class":188},[178,108464,863],{"class":319},[19,108466,108467,108469],{},[70,108468,103807],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[154,108471,108473],{"className":690,"code":108472,"language":692,"meta":160,"style":160},"for step in range(2000):\n",[70,108474,108475],{"__ignoreMap":160},[178,108476,108477,108479,108481,108483,108485,108487,108489],{"class":180,"line":181},[178,108478,1474],{"class":699},[178,108480,33351],{"class":319},[178,108482,994],{"class":699},[178,108484,997],{"class":195},[178,108486,944],{"class":319},[178,108488,107961],{"class":195},[178,108490,1005],{"class":319},[19,108492,108493,108494,108496,108497,108500],{},"循环 2000 步。这里没有用 ",[70,108495,2931],{},"，而是用 ",[70,108498,108499],{},"step","，因为后面要用当前步数计算时间。",[154,108502,108504],{"className":690,"code":108503,"language":692,"meta":160,"style":160},"t = step * model.opt.timestep\n",[70,108505,108506],{"__ignoreMap":160},[178,108507,108508,108511,108513,108515,108517],{"class":180,"line":181},[178,108509,108510],{"class":319},"t ",[178,108512,330],{"class":699},[178,108514,33351],{"class":319},[178,108516,2395],{"class":699},[178,108518,107977],{"class":319},[19,108520,108521],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[154,108523,108524],{"className":690,"code":108172,"language":692,"meta":160,"style":160},[70,108525,108526],{"__ignoreMap":160},[178,108527,108528,108530,108532,108534,108536,108538,108540,108542,108544,108546,108548,108550,108552,108554],{"class":180,"line":181},[178,108529,107236],{"class":319},[178,108531,2133],{"class":195},[178,108533,6214],{"class":319},[178,108535,330],{"class":699},[178,108537,107991],{"class":195},[178,108539,8287],{"class":699},[178,108541,107996],{"class":319},[178,108543,106625],{"class":195},[178,108545,8287],{"class":699},[178,108547,108003],{"class":319},[178,108549,2395],{"class":699},[178,108551,63588],{"class":195},[178,108553,8287],{"class":699},[178,108555,108012],{"class":319},[19,108557,108558],{},"这行给电机输入一个正弦波。拆开看：",[26,108560,108561,108567,108573],{},[29,108562,108563,108566],{},[70,108564,108565],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[29,108568,108569,108572],{},[70,108570,108571],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[29,108574,108575,108578],{},[70,108576,108577],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,108580,108581],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[154,108583,108585],{"className":690,"code":108584,"language":692,"meta":160,"style":160},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[70,108586,108587],{"__ignoreMap":160},[178,108588,108589,108591,108593,108595,108597,108599],{"class":180,"line":181},[178,108590,1504],{"class":195},[178,108592,944],{"class":319},[178,108594,108040],{"class":188},[178,108596,106295],{"class":319},[178,108598,2233],{"class":195},[178,108600,32239],{"class":319},[19,108602,108603,108604,108606],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[70,108605,1810],{}," 只有一个数。",[14,108608,1570],{"id":1569},[19,108610,108611],{},"输出类似:",[154,108613,108616],{"className":108614,"code":108615,"language":159,"meta":160},[157],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[70,108617,108615],{"__ignoreMap":160},[19,108619,108620,108621,108623],{},"这里 ",[70,108622,107491],{}," 是电机输入。",[19,108625,108626,108629,108630,108633],{},[70,108627,108628],{},"joint qpos"," 是关节角度，单位通常是弧度。",[70,108631,108632],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,108635,108636],{},"角度单位提示：",[154,108638,108641],{"className":108639,"code":108640,"language":159,"meta":160},[157],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[70,108642,108640],{"__ignoreMap":160},[19,108644,108645,108646,108648,108649,108651],{},"如果你看到 ",[70,108647,1580],{}," 是 ",[70,108650,37061],{},"，大约就是 28.6 度。",[14,108653,1654],{"id":1653},[26,108655,108656,108663,108666,108673,108676,108684,108692],{},[29,108657,1659,108658,1666,108660,297],{},[70,108659,107676],{},[70,108661,108662],{},"gear=\"5\"",[29,108664,108665],{},"重新运行，观察关节运动是否更剧烈。",[29,108667,1659,108668,1666,108670,297],{},[70,108669,107220],{},[70,108671,108672],{},"-0.2 0.2",[29,108674,108675],{},"重新运行，观察控制能力是否变弱。",[29,108677,108678,108679,108681,108682,297],{},"去掉 actuator，确认 ",[70,108680,103807],{}," 变成 ",[70,108683,2133],{},[29,108685,1659,108686,1666,108688,108691],{},[70,108687,107610],{},[70,108689,108690],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[29,108693,1659,108694,1666,108696,108699],{},[70,108695,107604],{},[70,108697,108698],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,108701,1715],{"id":1714},[387,108703,108705],{"id":108704},"indexerror-index-0-is-out-of-bounds",[70,108706,108707],{},"IndexError: index 0 is out of bounds",[19,108709,108710,108711,108713],{},"原因是 ",[70,108712,107357],{},"，没有 actuator。",[387,108715,108716],{"id":108716},"关节几乎不动",[19,108718,108719],{},"可能原因:",[26,108721,108722,108727,108731,108737],{},[29,108723,108724,108726],{},[70,108725,108432],{}," 太小",[29,108728,108729,108726],{},[70,108730,107220],{},[29,108732,108733,108736],{},[70,108734,108735],{},"damping"," 太大",[29,108738,108739],{},"重力方向导致运动不明显",[387,108741,108742],{"id":108742},"模型编译失败",[19,108744,108745,108746,108748],{},"检查 actuator 引用的 ",[70,108747,107667],{}," 是否存在，joint 名称是否拼写一致。",[387,108750,108752,108754],{"id":108751},"datactrl0-写了但没有效果",[70,108753,107491],{}," 写了但没有效果",[19,108756,104210],{},[26,108758,108759,108764,108767,108772,108777],{},[29,108760,108761,108763],{},[70,108762,103807],{}," 是否大于 0。",[29,108765,108766],{},"motor 是否引用了正确 joint。",[29,108768,108769,108771],{},[70,108770,108432],{}," 是否太小。",[29,108773,108774,108776],{},[70,108775,107220],{}," 是否把输入限制得太小。",[29,108778,108779],{},"body 是否真的有可动 joint。",[387,108781,108782],{"id":108782},"控制输入超过范围会怎样",[19,108784,108785],{},"如果设置了：",[154,108787,108789],{"className":310,"code":108788,"language":312,"meta":160,"style":160},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[70,108790,108791],{"__ignoreMap":160},[178,108792,108793],{"class":180,"line":181},[178,108794,108788],{"class":319},[19,108796,108797],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[154,108799,108801],{"className":690,"code":108800,"language":692,"meta":160,"style":160},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[70,108802,108803,108823],{"__ignoreMap":160},[178,108804,108805,108808,108810,108813,108815,108817,108819,108821],{"class":180,"line":181},[178,108806,108807],{"class":319},"action ",[178,108809,330],{"class":699},[178,108811,108812],{"class":319}," np.clip(action, ",[178,108814,2472],{"class":699},[178,108816,106625],{"class":195},[178,108818,14196],{"class":319},[178,108820,106625],{"class":195},[178,108822,863],{"class":319},[178,108824,108825,108827,108829,108831,108833],{"class":180,"line":263},[178,108826,107236],{"class":319},[178,108828,2133],{"class":195},[178,108830,6214],{"class":319},[178,108832,330],{"class":699},[178,108834,108835],{"class":319}," action\n",[14,108837,1823],{"id":1822},[19,108839,108840],{},"这一章建立了控制任务的基本形式：",[154,108842,108845],{"className":108843,"code":108844,"language":159,"meta":160},[157],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[70,108846,108844],{"__ignoreMap":160},[19,108848,108849],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[1853,108851,108852],{},"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":160,"searchDepth":263,"depth":263,"links":108854},[108855,108856,108857,108862,108866,108867,108868,108876],{"id":16,"depth":263,"text":17},{"id":165,"depth":263,"text":166},{"id":303,"depth":263,"text":304,"children":108858},[108859,108860,108861],{"id":107498,"depth":274,"text":107499},{"id":107548,"depth":274,"text":107549},{"id":107614,"depth":274,"text":107615},{"id":686,"depth":263,"text":687,"children":108863},[108864,108865],{"id":1135,"depth":274,"text":1135},{"id":1222,"depth":274,"text":1222},{"id":1569,"depth":263,"text":1570},{"id":1653,"depth":263,"text":1654},{"id":1714,"depth":263,"text":1715,"children":108869},[108870,108871,108872,108873,108875],{"id":108704,"depth":274,"text":108707},{"id":108716,"depth":274,"text":108716},{"id":108742,"depth":274,"text":108742},{"id":108751,"depth":274,"text":108874},"data.ctrl[0] 写了但没有效果",{"id":108782,"depth":274,"text":108782},{"id":1822,"depth":263,"text":1823},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107186,"description":160},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":108883,"title":108884,"body":108885,"description":160,"extension":1880,"meta":110794,"navigation":721,"path":110795,"seo":110796,"stem":110797,"__hash__":110798},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":108886,"toc":110770},[108887,108890,108892,108895,108903,108906,108923,108926,108951,108954,109000,109002,109004,109059,109061,109080,109082,109125,109128,109145,109148,109164,109174,109181,109183,109186,109189,109223,109226,109274,109278,109281,109295,109304,109308,109311,109336,109339,109343,109356,109359,109365,109368,109383,109385,109388,109648,109650,109662,109665,109977,109979,109991,109993,109996,110011,110016,110019,110041,110044,110047,110081,110084,110088,110099,110102,110119,110122,110136,110143,110163,110170,110184,110187,110199,110214,110234,110237,110259,110262,110266,110281,110292,110307,110310,110340,110356,110385,110393,110417,110420,110438,110448,110460,110467,110476,110482,110491,110494,110496,110505,110508,110523,110525,110528,110539,110542,110553,110556,110574,110576,110593,110596,110624,110626,110630,110633,110663,110669,110672,110676,110684,110687,110689,110710,110713,110716,110732,110735,110751,110753,110756,110767],[10,108888,108884],{"id":108889},"_5viewer-可视化与-renderer-离屏渲染",[14,108891,17],{"id":16},[19,108893,108894],{},"本章掌握两类可视化方式:",[26,108896,108897,108900],{},[29,108898,108899],{},"交互式 viewer: 适合人工观察仿真",[29,108901,108902],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,108904,108905],{},"使用官方接口:",[154,108907,108909],{"className":690,"code":108908,"language":692,"meta":160,"style":160},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[70,108910,108911,108918],{"__ignoreMap":160},[178,108912,108913,108915],{"class":180,"line":181},[178,108914,700],{"class":699},[178,108916,108917],{"class":319}," mujoco.viewer\n",[178,108919,108920],{"class":180,"line":263},[178,108921,108922],{"class":319},"mujoco.viewer.launch_passive(model, data)\n",[19,108924,108925],{},"以及:",[154,108927,108929],{"className":690,"code":108928,"language":692,"meta":160,"style":160},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[70,108930,108931,108941],{"__ignoreMap":160},[178,108932,108933,108936,108938],{"class":180,"line":181},[178,108934,108935],{"class":319},"renderer ",[178,108937,330],{"class":699},[178,108939,108940],{"class":319}," mujoco.Renderer(model)\n",[178,108942,108943,108946,108948],{"class":180,"line":263},[178,108944,108945],{"class":319},"image ",[178,108947,330],{"class":699},[178,108949,108950],{"class":319}," renderer.render()\n",[19,108952,108953],{},"新手建议先理解二者区别：",[45,108955,108956,108972],{},[48,108957,108958],{},[51,108959,108960,108963,108966,108969],{},[54,108961,108962],{"align":56},"工具",[54,108964,108965],{"align":56},"用途",[54,108967,108968],{"align":56},"是否打开窗口",[54,108970,108971],{"align":56},"常见场景",[62,108973,108974,108987],{},[51,108975,108976,108979,108982,108984],{},[67,108977,108978],{"align":56},"Viewer",[67,108980,108981],{"align":56},"人眼实时观察仿真",[67,108983,106030],{"align":56},[67,108985,108986],{"align":56},"调试模型、看控制效果",[51,108988,108989,108992,108995,108997],{},[67,108990,108991],{"align":56},"Renderer",[67,108993,108994],{"align":56},"生成图像数组",[67,108996,106043],{"align":56},[67,108998,108999],{"align":56},"保存图片、训练视觉策略、服务器批量采集",[14,109001,166],{"id":165},[19,109003,169],{},[154,109005,109007],{"className":172,"code":109006,"language":174,"meta":160,"style":160},"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",[70,109008,109009,109021,109031,109039,109047],{"__ignoreMap":160},[178,109010,109011,109013,109015,109017,109019],{"class":180,"line":181},[178,109012,185],{"class":184},[178,109014,189],{"class":188},[178,109016,192],{"class":188},[178,109018,196],{"class":195},[178,109020,26432],{"class":195},[178,109022,109023,109025,109027,109029],{"class":180,"line":263},[178,109024,102515],{"class":188},[178,109026,102518],{"class":188},[178,109028,202],{"class":188},[178,109030,26432],{"class":195},[178,109032,109033,109035,109037],{"class":180,"line":274},[178,109034,102527],{"class":188},[178,109036,102530],{"class":188},[178,109038,26432],{"class":195},[178,109040,109041,109043,109045],{"class":180,"line":354},[178,109042,102537],{"class":188},[178,109044,102540],{"class":188},[178,109046,26432],{"class":195},[178,109048,109049,109051,109053,109055,109057],{"class":180,"line":364},[178,109050,102547],{"class":188},[178,109052,102550],{"class":188},[178,109054,102553],{"class":188},[178,109056,102556],{"class":188},[178,109058,104154],{"class":188},[19,109060,211],{},[154,109062,109064],{"className":172,"code":109063,"language":174,"meta":160,"style":160},"pip install \"mujoco>=2.3\" numpy pillow\n",[70,109065,109066],{"__ignoreMap":160},[178,109067,109068,109070,109072,109074,109077],{"class":180,"line":181},[178,109069,221],{"class":184},[178,109071,192],{"class":188},[178,109073,226],{"class":188},[178,109075,109076],{"class":188}," numpy",[178,109078,109079],{"class":188}," pillow\n",[19,109081,232],{},[154,109083,109085],{"className":172,"code":109084,"language":174,"meta":160,"style":160},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[70,109086,109087,109104,109113],{"__ignoreMap":160},[178,109088,109089,109091,109093,109095,109098,109100,109102],{"class":180,"line":181},[178,109090,242],{"class":184},[178,109092,245],{"class":188},[178,109094,248],{"class":195},[178,109096,109097],{"class":188}," mujoco-render",[178,109099,254],{"class":188},[178,109101,257],{"class":195},[178,109103,260],{"class":195},[178,109105,109106,109108,109110],{"class":180,"line":263},[178,109107,242],{"class":184},[178,109109,268],{"class":188},[178,109111,109112],{"class":188}," mujoco-render\n",[178,109114,109115,109117,109119,109121,109123],{"class":180,"line":274},[178,109116,221],{"class":184},[178,109118,192],{"class":188},[178,109120,226],{"class":188},[178,109122,109076],{"class":188},[178,109124,109079],{"class":188},[19,109126,109127],{},"离屏渲染后端:",[154,109129,109131],{"className":172,"code":109130,"language":174,"meta":160,"style":160},"export MUJOCO_GL=egl\n",[70,109132,109133],{"__ignoreMap":160},[178,109134,109135,109137,109140,109142],{"class":180,"line":181},[178,109136,26795],{"class":699},[178,109138,109139],{"class":319}," MUJOCO_GL",[178,109141,330],{"class":699},[178,109143,109144],{"class":319},"egl\n",[19,109146,109147],{},"或:",[154,109149,109151],{"className":172,"code":109150,"language":174,"meta":160,"style":160},"export MUJOCO_GL=osmesa\n",[70,109152,109153],{"__ignoreMap":160},[178,109154,109155,109157,109159,109161],{"class":180,"line":181},[178,109156,26795],{"class":699},[178,109158,109139],{"class":319},[178,109160,330],{"class":699},[178,109162,109163],{"class":319},"osmesa\n",[19,109165,109166,109167,109170,109171,297],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[70,109168,109169],{},"egl"," 失败，再尝试 ",[70,109172,109173],{},"osmesa",[19,109175,109176,109177,109180],{},"如果你在本机桌面环境运行，通常先不要设置 ",[70,109178,109179],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,109182,304],{"id":303},[19,109184,109185],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,109187,109188],{},"典型 viewer 流程:",[154,109190,109192],{"className":690,"code":109191,"language":692,"meta":160,"style":160},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[70,109193,109194,109207,109214,109218],{"__ignoreMap":160},[178,109195,109196,109199,109202,109204],{"class":180,"line":181},[178,109197,109198],{"class":699},"with",[178,109200,109201],{"class":319}," mujoco.viewer.launch_passive(model, data) ",[178,109203,713],{"class":699},[178,109205,109206],{"class":319}," viewer:\n",[178,109208,109209,109211],{"class":180,"line":263},[178,109210,4035],{"class":699},[178,109212,109213],{"class":319}," viewer.is_running():\n",[178,109215,109216],{"class":180,"line":274},[178,109217,1011],{"class":319},[178,109219,109220],{"class":180,"line":354},[178,109221,109222],{"class":319},"        viewer.sync()\n",[19,109224,109225],{},"典型 renderer 流程:",[154,109227,109229],{"className":690,"code":109228,"language":692,"meta":160,"style":160},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[70,109230,109231,109257,109261,109266],{"__ignoreMap":160},[178,109232,109233,109235,109237,109240,109242,109244,109246,109248,109250,109252,109255],{"class":180,"line":181},[178,109234,108935],{"class":319},[178,109236,330],{"class":699},[178,109238,109239],{"class":319}," mujoco.Renderer(model, ",[178,109241,26734],{"class":6985},[178,109243,330],{"class":699},[178,109245,44074],{"class":195},[178,109247,14196],{"class":319},[178,109249,26731],{"class":6985},[178,109251,330],{"class":699},[178,109253,109254],{"class":195},"640",[178,109256,863],{"class":319},[178,109258,109259],{"class":180,"line":263},[178,109260,105870],{"class":319},[178,109262,109263],{"class":180,"line":274},[178,109264,109265],{"class":319},"renderer.update_scene(data)\n",[178,109267,109268,109270,109272],{"class":180,"line":354},[178,109269,108945],{"class":319},[178,109271,330],{"class":699},[178,109273,108950],{"class":319},[387,109275,109277],{"id":109276},"viewer-的同步逻辑","viewer 的同步逻辑",[19,109279,109280],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[154,109282,109284],{"className":690,"code":109283,"language":692,"meta":160,"style":160},"mujoco.mj_step(model, data)\nviewer.sync()\n",[70,109285,109286,109290],{"__ignoreMap":160},[178,109287,109288],{"class":180,"line":181},[178,109289,105870],{"class":319},[178,109291,109292],{"class":180,"line":263},[178,109293,109294],{"class":319},"viewer.sync()\n",[19,109296,109297,109299,109300,109303],{},[70,109298,1818],{}," 负责算物理，",[70,109301,109302],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[387,109305,109307],{"id":109306},"为什么要-sleep","为什么要 sleep",[19,109309,109310],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[154,109312,109314],{"className":690,"code":109313,"language":692,"meta":160,"style":160},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[70,109315,109316],{"__ignoreMap":160},[178,109317,109318,109321,109323,109326,109328,109331,109333],{"class":180,"line":181},[178,109319,109320],{"class":319},"sleep_time ",[178,109322,330],{"class":699},[178,109324,109325],{"class":319}," model.opt.timestep ",[178,109327,2472],{"class":699},[178,109329,109330],{"class":319}," (time.time() ",[178,109332,2472],{"class":699},[178,109334,109335],{"class":319}," step_start)\n",[19,109337,109338],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[387,109340,109342],{"id":109341},"renderer-输出是什么","renderer 输出是什么",[154,109344,109346],{"className":690,"code":109345,"language":692,"meta":160,"style":160},"image = renderer.render()\n",[70,109347,109348],{"__ignoreMap":160},[178,109349,109350,109352,109354],{"class":180,"line":181},[178,109351,108945],{"class":319},[178,109353,330],{"class":699},[178,109355,108950],{"class":319},[19,109357,109358],{},"得到的是 NumPy 数组，形状通常是：",[154,109360,109363],{"className":109361,"code":109362,"language":159,"meta":160},[157],"(height, width, 3)\n",[70,109364,109362],{"__ignoreMap":160},[19,109366,109367],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[154,109369,109371],{"className":690,"code":109370,"language":692,"meta":160,"style":160},"Image.fromarray(image).save(\"render_output.png\")\n",[70,109372,109373],{"__ignoreMap":160},[178,109374,109375,109378,109381],{"class":180,"line":181},[178,109376,109377],{"class":319},"Image.fromarray(image).save(",[178,109379,109380],{"class":188},"\"render_output.png\"",[178,109382,863],{"class":319},[14,109384,687],{"id":686},[19,109386,109387],{},"交互式 Viewer:",[154,109389,109391],{"className":690,"code":109390,"language":692,"meta":160,"style":160},"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",[70,109392,109393,109399,109403,109409,109415,109419,109423,109431,109436,109440,109444,109448,109453,109458,109462,109466,109470,109475,109479,109483,109487,109491,109495,109499,109511,109523,109531,109535,109545,109565,109575,109580,109585,109589,109606,109619,109624,109628,109632,109644],{"__ignoreMap":160},[178,109394,109395,109397],{"class":180,"line":181},[178,109396,700],{"class":699},[178,109398,33564],{"class":319},[178,109400,109401],{"class":180,"line":263},[178,109402,722],{"emptyLinePlaceholder":721},[178,109404,109405,109407],{"class":180,"line":274},[178,109406,700],{"class":699},[178,109408,703],{"class":319},[178,109410,109411,109413],{"class":180,"line":354},[178,109412,700],{"class":699},[178,109414,108917],{"class":319},[178,109416,109417],{"class":180,"line":364},[178,109418,722],{"emptyLinePlaceholder":721},[178,109420,109421],{"class":180,"line":740},[178,109422,722],{"emptyLinePlaceholder":721},[178,109424,109425,109427,109429],{"class":180,"line":746},[178,109426,731],{"class":195},[178,109428,734],{"class":699},[178,109430,737],{"class":188},[178,109432,109433],{"class":180,"line":752},[178,109434,109435],{"class":188},"\u003Cmujoco model=\"viewer_demo\">\n",[178,109437,109438],{"class":180,"line":757},[178,109439,749],{"class":188},[178,109441,109442],{"class":180,"line":763},[178,109443,722],{"emptyLinePlaceholder":721},[178,109445,109446],{"class":180,"line":769},[178,109447,760],{"class":188},[178,109449,109450],{"class":180,"line":774},[178,109451,109452],{"class":188},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[178,109454,109455],{"class":180,"line":780},[178,109456,109457],{"class":188},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[178,109459,109460],{"class":180,"line":786},[178,109461,722],{"emptyLinePlaceholder":721},[178,109463,109464],{"class":180,"line":792},[178,109465,103027],{"class":188},[178,109467,109468],{"class":180,"line":798},[178,109469,103032],{"class":188},[178,109471,109472],{"class":180,"line":804},[178,109473,109474],{"class":188},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[178,109476,109477],{"class":180,"line":810},[178,109478,801],{"class":188},[178,109480,109481],{"class":180,"line":816},[178,109482,807],{"class":188},[178,109484,109485],{"class":180,"line":822},[178,109486,813],{"class":188},[178,109488,109489],{"class":180,"line":827},[178,109490,819],{"class":188},[178,109492,109493],{"class":180,"line":832},[178,109494,722],{"emptyLinePlaceholder":721},[178,109496,109497],{"class":180,"line":850},[178,109498,722],{"emptyLinePlaceholder":721},[178,109500,109501,109503,109505,109507,109509],{"class":180,"line":866},[178,109502,835],{"class":699},[178,109504,838],{"class":184},[178,109506,841],{"class":319},[178,109508,844],{"class":195},[178,109510,847],{"class":319},[178,109512,109513,109515,109517,109519,109521],{"class":180,"line":877},[178,109514,853],{"class":319},[178,109516,330],{"class":699},[178,109518,858],{"class":319},[178,109520,731],{"class":195},[178,109522,863],{"class":319},[178,109524,109525,109527,109529],{"class":180,"line":882},[178,109526,869],{"class":319},[178,109528,330],{"class":699},[178,109530,874],{"class":319},[178,109532,109533],{"class":180,"line":898},[178,109534,722],{"emptyLinePlaceholder":721},[178,109536,109537,109539,109541,109543],{"class":180,"line":914},[178,109538,35910],{"class":699},[178,109540,109201],{"class":319},[178,109542,713],{"class":699},[178,109544,109206],{"class":319},[178,109546,109547,109550,109553,109555,109558,109560,109563],{"class":180,"line":919},[178,109548,109549],{"class":699},"        while",[178,109551,109552],{"class":319}," viewer.is_running() ",[178,109554,32204],{"class":699},[178,109556,109557],{"class":319}," data.time ",[178,109559,320],{"class":699},[178,109561,109562],{"class":195}," 5.0",[178,109564,847],{"class":319},[178,109566,109567,109570,109572],{"class":180,"line":935},[178,109568,109569],{"class":319},"            step_start ",[178,109571,330],{"class":699},[178,109573,109574],{"class":319}," time.time()\n",[178,109576,109577],{"class":180,"line":952},[178,109578,109579],{"class":319},"            mujoco.mj_step(model, data)\n",[178,109581,109582],{"class":180,"line":966},[178,109583,109584],{"class":319},"            viewer.sync()\n",[178,109586,109587],{"class":180,"line":980},[178,109588,722],{"emptyLinePlaceholder":721},[178,109590,109591,109594,109596,109598,109600,109602,109604],{"class":180,"line":985},[178,109592,109593],{"class":319},"            sleep_time ",[178,109595,330],{"class":699},[178,109597,109325],{"class":319},[178,109599,2472],{"class":699},[178,109601,109330],{"class":319},[178,109603,2472],{"class":699},[178,109605,109335],{"class":319},[178,109607,109608,109610,109613,109615,109617],{"class":180,"line":1008},[178,109609,6413],{"class":699},[178,109611,109612],{"class":319}," sleep_time ",[178,109614,2899],{"class":699},[178,109616,930],{"class":195},[178,109618,847],{"class":319},[178,109620,109621],{"class":180,"line":1014},[178,109622,109623],{"class":319},"                time.sleep(sleep_time)\n",[178,109625,109626],{"class":180,"line":1019},[178,109627,722],{"emptyLinePlaceholder":721},[178,109629,109630],{"class":180,"line":1033},[178,109631,722],{"emptyLinePlaceholder":721},[178,109633,109634,109636,109638,109640,109642],{"class":180,"line":1046},[178,109635,1085],{"class":699},[178,109637,1088],{"class":195},[178,109639,1091],{"class":699},[178,109641,1094],{"class":188},[178,109643,847],{"class":319},[178,109645,109646],{"class":180,"line":1059},[178,109647,1102],{"class":319},[19,109649,1105],{},[154,109651,109653],{"className":172,"code":109652,"language":174,"meta":160,"style":160},"touch ch5_viewer.py\n",[70,109654,109655],{"__ignoreMap":160},[178,109656,109657,109659],{"class":180,"line":181},[178,109658,1115],{"class":184},[178,109660,109661],{"class":188}," ch5_viewer.py\n",[19,109663,109664],{},"离屏 Renderer 保存图片:",[154,109666,109668],{"className":690,"code":109667,"language":692,"meta":160,"style":160},"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",[70,109669,109670,109682,109686,109692,109702,109706,109710,109718,109723,109727,109731,109735,109739,109744,109748,109752,109756,109760,109764,109768,109772,109776,109780,109784,109788,109800,109812,109820,109845,109849,109865,109869,109873,109888,109897,109901,109915,109920,109925,109929,109941,109953,109957,109961,109973],{"__ignoreMap":160},[178,109671,109672,109674,109677,109679],{"class":180,"line":181},[178,109673,32479],{"class":699},[178,109675,109676],{"class":319}," pathlib ",[178,109678,700],{"class":699},[178,109680,109681],{"class":319}," Path\n",[178,109683,109684],{"class":180,"line":263},[178,109685,722],{"emptyLinePlaceholder":721},[178,109687,109688,109690],{"class":180,"line":274},[178,109689,700],{"class":699},[178,109691,703],{"class":319},[178,109693,109694,109696,109698,109700],{"class":180,"line":354},[178,109695,32479],{"class":699},[178,109697,48995],{"class":195},[178,109699,48998],{"class":699},[178,109701,49001],{"class":319},[178,109703,109704],{"class":180,"line":364},[178,109705,722],{"emptyLinePlaceholder":721},[178,109707,109708],{"class":180,"line":740},[178,109709,722],{"emptyLinePlaceholder":721},[178,109711,109712,109714,109716],{"class":180,"line":746},[178,109713,731],{"class":195},[178,109715,734],{"class":699},[178,109717,737],{"class":188},[178,109719,109720],{"class":180,"line":752},[178,109721,109722],{"class":188},"\u003Cmujoco model=\"renderer_demo\">\n",[178,109724,109725],{"class":180,"line":757},[178,109726,749],{"class":188},[178,109728,109729],{"class":180,"line":763},[178,109730,722],{"emptyLinePlaceholder":721},[178,109732,109733],{"class":180,"line":769},[178,109734,760],{"class":188},[178,109736,109737],{"class":180,"line":774},[178,109738,109452],{"class":188},[178,109740,109741],{"class":180,"line":780},[178,109742,109743],{"class":188},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[178,109745,109746],{"class":180,"line":786},[178,109747,109457],{"class":188},[178,109749,109750],{"class":180,"line":792},[178,109751,722],{"emptyLinePlaceholder":721},[178,109753,109754],{"class":180,"line":798},[178,109755,103027],{"class":188},[178,109757,109758],{"class":180,"line":804},[178,109759,103032],{"class":188},[178,109761,109762],{"class":180,"line":810},[178,109763,109474],{"class":188},[178,109765,109766],{"class":180,"line":816},[178,109767,801],{"class":188},[178,109769,109770],{"class":180,"line":822},[178,109771,807],{"class":188},[178,109773,109774],{"class":180,"line":827},[178,109775,813],{"class":188},[178,109777,109778],{"class":180,"line":832},[178,109779,819],{"class":188},[178,109781,109782],{"class":180,"line":850},[178,109783,722],{"emptyLinePlaceholder":721},[178,109785,109786],{"class":180,"line":866},[178,109787,722],{"emptyLinePlaceholder":721},[178,109789,109790,109792,109794,109796,109798],{"class":180,"line":877},[178,109791,835],{"class":699},[178,109793,838],{"class":184},[178,109795,841],{"class":319},[178,109797,844],{"class":195},[178,109799,847],{"class":319},[178,109801,109802,109804,109806,109808,109810],{"class":180,"line":882},[178,109803,853],{"class":319},[178,109805,330],{"class":699},[178,109807,858],{"class":319},[178,109809,731],{"class":195},[178,109811,863],{"class":319},[178,109813,109814,109816,109818],{"class":180,"line":898},[178,109815,869],{"class":319},[178,109817,330],{"class":699},[178,109819,874],{"class":319},[178,109821,109822,109825,109827,109829,109831,109833,109835,109837,109839,109841,109843],{"class":180,"line":914},[178,109823,109824],{"class":319},"    renderer ",[178,109826,330],{"class":699},[178,109828,109239],{"class":319},[178,109830,26734],{"class":6985},[178,109832,330],{"class":699},[178,109834,44074],{"class":195},[178,109836,14196],{"class":319},[178,109838,26731],{"class":6985},[178,109840,330],{"class":699},[178,109842,109254],{"class":195},[178,109844,863],{"class":319},[178,109846,109847],{"class":180,"line":919},[178,109848,722],{"emptyLinePlaceholder":721},[178,109850,109851,109853,109855,109857,109859,109861,109863],{"class":180,"line":935},[178,109852,988],{"class":699},[178,109854,991],{"class":319},[178,109856,994],{"class":699},[178,109858,997],{"class":195},[178,109860,944],{"class":319},[178,109862,2251],{"class":195},[178,109864,1005],{"class":319},[178,109866,109867],{"class":180,"line":952},[178,109868,1011],{"class":319},[178,109870,109871],{"class":180,"line":966},[178,109872,722],{"emptyLinePlaceholder":721},[178,109874,109875,109878,109881,109883,109886],{"class":180,"line":980},[178,109876,109877],{"class":319},"    renderer.update_scene(data, ",[178,109879,109880],{"class":6985},"camera",[178,109882,330],{"class":699},[178,109884,109885],{"class":188},"\"fixed_camera\"",[178,109887,863],{"class":319},[178,109889,109890,109893,109895],{"class":180,"line":985},[178,109891,109892],{"class":319},"    image ",[178,109894,330],{"class":699},[178,109896,108950],{"class":319},[178,109898,109899],{"class":180,"line":1008},[178,109900,722],{"emptyLinePlaceholder":721},[178,109902,109903,109906,109908,109911,109913],{"class":180,"line":1014},[178,109904,109905],{"class":319},"    output_path ",[178,109907,330],{"class":699},[178,109909,109910],{"class":319}," Path(",[178,109912,109380],{"class":188},[178,109914,863],{"class":319},[178,109916,109917],{"class":180,"line":1019},[178,109918,109919],{"class":319},"    Image.fromarray(image).save(output_path)\n",[178,109921,109922],{"class":180,"line":1033},[178,109923,109924],{"class":319},"    renderer.close()\n",[178,109926,109927],{"class":180,"line":1046},[178,109928,722],{"emptyLinePlaceholder":721},[178,109930,109931,109933,109935,109938],{"class":180,"line":1059},[178,109932,1022],{"class":195},[178,109934,944],{"class":319},[178,109936,109937],{"class":188},"\"saved:\"",[178,109939,109940],{"class":319},", output_path.resolve())\n",[178,109942,109943,109945,109947,109950],{"class":180,"line":1072},[178,109944,1022],{"class":195},[178,109946,944],{"class":319},[178,109948,109949],{"class":188},"\"image shape:\"",[178,109951,109952],{"class":319},", image.shape)\n",[178,109954,109955],{"class":180,"line":1077},[178,109956,722],{"emptyLinePlaceholder":721},[178,109958,109959],{"class":180,"line":1082},[178,109960,722],{"emptyLinePlaceholder":721},[178,109962,109963,109965,109967,109969,109971],{"class":180,"line":1099},[178,109964,1085],{"class":699},[178,109966,1088],{"class":195},[178,109968,1091],{"class":699},[178,109970,1094],{"class":188},[178,109972,847],{"class":319},[178,109974,109975],{"class":180,"line":9806},[178,109976,1102],{"class":319},[19,109978,1105],{},[154,109980,109982],{"className":172,"code":109981,"language":174,"meta":160,"style":160},"touch ch5_renderer.py\n",[70,109983,109984],{"__ignoreMap":160},[178,109985,109986,109988],{"class":180,"line":181},[178,109987,1115],{"class":184},[178,109989,109990],{"class":188}," ch5_renderer.py\n",[387,109992,1135],{"id":1135},[19,109994,109995],{},"viewer 上下文：",[154,109997,109999],{"className":690,"code":109998,"language":692,"meta":160,"style":160},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[70,110000,110001],{"__ignoreMap":160},[178,110002,110003,110005,110007,110009],{"class":180,"line":181},[178,110004,109198],{"class":699},[178,110006,109201],{"class":319},[178,110008,713],{"class":699},[178,110010,109206],{"class":319},[19,110012,110013,110015],{},[70,110014,109198],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,110017,110018],{},"窗口循环：",[154,110020,110022],{"className":690,"code":110021,"language":692,"meta":160,"style":160},"while viewer.is_running() and data.time \u003C 5.0:\n",[70,110023,110024],{"__ignoreMap":160},[178,110025,110026,110029,110031,110033,110035,110037,110039],{"class":180,"line":181},[178,110027,110028],{"class":699},"while",[178,110030,109552],{"class":319},[178,110032,32204],{"class":699},[178,110034,109557],{"class":319},[178,110036,320],{"class":699},[178,110038,109562],{"class":195},[178,110040,847],{"class":319},[19,110042,110043],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,110045,110046],{},"固定相机：",[154,110048,110050],{"className":310,"code":110049,"language":312,"meta":160,"style":160},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[70,110051,110052],{"__ignoreMap":160},[178,110053,110054,110056,110058,110060,110062,110064,110066,110068,110071,110074,110076,110079],{"class":180,"line":181},[178,110055,320],{"class":319},[178,110057,109880],{"class":323},[178,110059,426],{"class":184},[178,110061,330],{"class":319},[178,110063,109885],{"class":188},[178,110065,434],{"class":184},[178,110067,330],{"class":319},[178,110069,110070],{"class":188},"\"1.5 -2.0 1.2\"",[178,110072,110073],{"class":184}," xyaxes",[178,110075,330],{"class":319},[178,110077,110078],{"class":188},"\"1 0.75 0 0 0 1\"",[178,110080,458],{"class":319},[19,110082,110083],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[387,110085,110087],{"id":110086},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[154,110089,110091],{"className":690,"code":110090,"language":692,"meta":160,"style":160},"import time\n",[70,110092,110093],{"__ignoreMap":160},[178,110094,110095,110097],{"class":180,"line":181},[178,110096,700],{"class":699},[178,110098,33564],{"class":319},[19,110100,110101],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[154,110103,110105],{"className":690,"code":110104,"language":692,"meta":160,"style":160},"import mujoco\nimport mujoco.viewer\n",[70,110106,110107,110113],{"__ignoreMap":160},[178,110108,110109,110111],{"class":180,"line":181},[178,110110,700],{"class":699},[178,110112,703],{"class":319},[178,110114,110115,110117],{"class":180,"line":263},[178,110116,700],{"class":699},[178,110118,108917],{"class":319},[19,110120,110121],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[154,110123,110124],{"className":690,"code":109998,"language":692,"meta":160,"style":160},[70,110125,110126],{"__ignoreMap":160},[178,110127,110128,110130,110132,110134],{"class":180,"line":181},[178,110129,109198],{"class":699},[178,110131,109201],{"class":319},[178,110133,713],{"class":699},[178,110135,109206],{"class":319},[19,110137,110138,110139,110142],{},"打开一个 viewer 窗口。",[70,110140,110141],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[154,110144,110145],{"className":690,"code":110021,"language":692,"meta":160,"style":160},[70,110146,110147],{"__ignoreMap":160},[178,110148,110149,110151,110153,110155,110157,110159,110161],{"class":180,"line":181},[178,110150,110028],{"class":699},[178,110152,109552],{"class":319},[178,110154,32204],{"class":699},[178,110156,109557],{"class":319},[178,110158,320],{"class":699},[178,110160,109562],{"class":195},[178,110162,847],{"class":319},[19,110164,110165,110166,110169],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[70,110167,110168],{},"viewer.is_running()"," 会变成 false，循环结束。",[154,110171,110173],{"className":690,"code":110172,"language":692,"meta":160,"style":160},"step_start = time.time()\n",[70,110174,110175],{"__ignoreMap":160},[178,110176,110177,110180,110182],{"class":180,"line":181},[178,110178,110179],{"class":319},"step_start ",[178,110181,330],{"class":699},[178,110183,109574],{"class":319},[19,110185,110186],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[154,110188,110189],{"className":690,"code":109283,"language":692,"meta":160,"style":160},[70,110190,110191,110195],{"__ignoreMap":160},[178,110192,110193],{"class":180,"line":181},[178,110194,105870],{"class":319},[178,110196,110197],{"class":180,"line":263},[178,110198,109294],{"class":319},[19,110200,110201,110203,110204,110206,110207,110209,110210,110213],{},[70,110202,1818],{}," 推进物理仿真。",[70,110205,109302],{}," 把最新的 ",[70,110208,35133],{}," 同步到窗口里显示。没有 ",[70,110211,110212],{},"sync()","，窗口可能看不到最新状态。",[154,110215,110216],{"className":690,"code":109313,"language":692,"meta":160,"style":160},[70,110217,110218],{"__ignoreMap":160},[178,110219,110220,110222,110224,110226,110228,110230,110232],{"class":180,"line":181},[178,110221,109320],{"class":319},[178,110223,330],{"class":699},[178,110225,109325],{"class":319},[178,110227,2472],{"class":699},[178,110229,109330],{"class":319},[178,110231,2472],{"class":699},[178,110233,109335],{"class":319},[19,110235,110236],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[154,110238,110240],{"className":690,"code":110239,"language":692,"meta":160,"style":160},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[70,110241,110242,110254],{"__ignoreMap":160},[178,110243,110244,110246,110248,110250,110252],{"class":180,"line":181},[178,110245,1085],{"class":699},[178,110247,109612],{"class":319},[178,110249,2899],{"class":699},[178,110251,930],{"class":195},[178,110253,847],{"class":319},[178,110255,110256],{"class":180,"line":263},[178,110257,110258],{"class":319},"    time.sleep(sleep_time)\n",[19,110260,110261],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[387,110263,110265],{"id":110264},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[154,110267,110269],{"className":690,"code":110268,"language":692,"meta":160,"style":160},"from pathlib import Path\n",[70,110270,110271],{"__ignoreMap":160},[178,110272,110273,110275,110277,110279],{"class":180,"line":181},[178,110274,32479],{"class":699},[178,110276,109676],{"class":319},[178,110278,700],{"class":699},[178,110280,109681],{"class":319},[19,110282,110283,110284,110287,110288,110291],{},"导入 ",[70,110285,110286],{},"Path","，用来处理文件路径。相比直接写字符串，",[70,110289,110290],{},"Path(\"render_output.png\")"," 更清晰。",[154,110293,110295],{"className":690,"code":110294,"language":692,"meta":160,"style":160},"from PIL import Image\n",[70,110296,110297],{"__ignoreMap":160},[178,110298,110299,110301,110303,110305],{"class":180,"line":181},[178,110300,32479],{"class":699},[178,110302,48995],{"class":195},[178,110304,48998],{"class":699},[178,110306,49001],{"class":319},[19,110308,110309],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[154,110311,110312],{"className":310,"code":110049,"language":312,"meta":160,"style":160},[70,110313,110314],{"__ignoreMap":160},[178,110315,110316,110318,110320,110322,110324,110326,110328,110330,110332,110334,110336,110338],{"class":180,"line":181},[178,110317,320],{"class":319},[178,110319,109880],{"class":323},[178,110321,426],{"class":184},[178,110323,330],{"class":319},[178,110325,109885],{"class":188},[178,110327,434],{"class":184},[178,110329,330],{"class":319},[178,110331,110070],{"class":188},[178,110333,110073],{"class":184},[178,110335,330],{"class":319},[178,110337,110078],{"class":188},[178,110339,458],{"class":319},[19,110341,110342,110343,110345,110346,110348,110349,110352,110353,110355],{},"定义一个相机。",[70,110344,81529],{}," 是相机名字。",[70,110347,1704],{}," 是相机在世界里的位置。",[70,110350,110351],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[70,110354,1704],{}," 来调视角。",[154,110357,110359],{"className":690,"code":110358,"language":692,"meta":160,"style":160},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[70,110360,110361],{"__ignoreMap":160},[178,110362,110363,110365,110367,110369,110371,110373,110375,110377,110379,110381,110383],{"class":180,"line":181},[178,110364,108935],{"class":319},[178,110366,330],{"class":699},[178,110368,109239],{"class":319},[178,110370,26734],{"class":6985},[178,110372,330],{"class":699},[178,110374,44074],{"class":195},[178,110376,14196],{"class":319},[178,110378,26731],{"class":6985},[178,110380,330],{"class":699},[178,110382,109254],{"class":195},[178,110384,863],{"class":319},[19,110386,110387,110388,404,110390,110392],{},"创建离屏渲染器。",[70,110389,26734],{},[70,110391,26731],{}," 决定输出图片大小。",[154,110394,110395],{"className":690,"code":103333,"language":692,"meta":160,"style":160},[70,110396,110397,110413],{"__ignoreMap":160},[178,110398,110399,110401,110403,110405,110407,110409,110411],{"class":180,"line":181},[178,110400,1474],{"class":699},[178,110402,991],{"class":319},[178,110404,994],{"class":699},[178,110406,997],{"class":195},[178,110408,944],{"class":319},[178,110410,2251],{"class":195},[178,110412,1005],{"class":319},[178,110414,110415],{"class":180,"line":263},[178,110416,1491],{"class":319},[19,110418,110419],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[154,110421,110423],{"className":690,"code":110422,"language":692,"meta":160,"style":160},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[70,110424,110425],{"__ignoreMap":160},[178,110426,110427,110430,110432,110434,110436],{"class":180,"line":181},[178,110428,110429],{"class":319},"renderer.update_scene(data, ",[178,110431,109880],{"class":6985},[178,110433,330],{"class":699},[178,110435,109885],{"class":188},[178,110437,863],{"class":319},[19,110439,110440,110441,110443,110444,110447],{},"告诉 renderer：用当前 ",[70,110442,35133],{}," 的状态更新画面，并使用名为 ",[70,110445,110446],{},"fixed_camera"," 的相机视角。",[154,110449,110450],{"className":690,"code":109345,"language":692,"meta":160,"style":160},[70,110451,110452],{"__ignoreMap":160},[178,110453,110454,110456,110458],{"class":180,"line":181},[178,110455,108945],{"class":319},[178,110457,330],{"class":699},[178,110459,108950],{"class":319},[19,110461,110462,110463,110466],{},"真正渲染出图像。",[70,110464,110465],{},"image"," 是一个 NumPy 数组，不是文件。",[154,110468,110470],{"className":690,"code":110469,"language":692,"meta":160,"style":160},"Image.fromarray(image).save(output_path)\n",[70,110471,110472],{"__ignoreMap":160},[178,110473,110474],{"class":180,"line":181},[178,110475,110469],{"class":319},[19,110477,110478,110479,297],{},"把数组转换成图片，并保存到 ",[70,110480,110481],{},"render_output.png",[154,110483,110485],{"className":690,"code":110484,"language":692,"meta":160,"style":160},"renderer.close()\n",[70,110486,110487],{"__ignoreMap":160},[178,110488,110489],{"class":180,"line":181},[178,110490,110484],{"class":319},[19,110492,110493],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,110495,1570],{"id":1569},[19,110497,110498,110499,110501,110502,297],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[70,110500,110481],{},"，并输出图像数组形状，例如 ",[70,110503,110504],{},"(480, 640, 3)",[19,110506,110507],{},"如果图片里看不到方块，先检查：",[26,110509,110510,110513,110516],{},[29,110511,110512],{},"方块是否掉到相机视野外。",[29,110514,110515],{},"camera 位置是否合理。",[29,110517,110518,110519,110522],{},"是否在 ",[70,110520,110521],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,110524,1654],{"id":1653},[19,110526,110527],{},"运行 viewer:",[154,110529,110531],{"className":172,"code":110530,"language":174,"meta":160,"style":160},"python ch5_viewer.py\n",[70,110532,110533],{"__ignoreMap":160},[178,110534,110535,110537],{"class":180,"line":181},[178,110536,692],{"class":184},[178,110538,109661],{"class":188},[19,110540,110541],{},"运行 renderer:",[154,110543,110545],{"className":172,"code":110544,"language":174,"meta":160,"style":160},"python ch5_renderer.py\n",[70,110546,110547],{"__ignoreMap":160},[178,110548,110549,110551],{"class":180,"line":181},[178,110550,692],{"class":184},[178,110552,109990],{"class":188},[19,110554,110555],{},"如果在服务器上运行:",[154,110557,110559],{"className":172,"code":110558,"language":174,"meta":160,"style":160},"MUJOCO_GL=egl python ch5_renderer.py\n",[70,110560,110561],{"__ignoreMap":160},[178,110562,110563,110565,110567,110569,110572],{"class":180,"line":181},[178,110564,109179],{"class":319},[178,110566,330],{"class":699},[178,110568,109169],{"class":188},[178,110570,110571],{"class":184}," python",[178,110573,109990],{"class":188},[19,110575,109147],{},[154,110577,110579],{"className":172,"code":110578,"language":174,"meta":160,"style":160},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[70,110580,110581],{"__ignoreMap":160},[178,110582,110583,110585,110587,110589,110591],{"class":180,"line":181},[178,110584,109179],{"class":319},[178,110586,330],{"class":699},[178,110588,109173],{"class":188},[178,110590,110571],{"class":184},[178,110592,109990],{"class":188},[19,110594,110595],{},"再做几个练习：",[26,110597,110598,110605,110608,110614],{},[29,110599,110600,110601,110604],{},"把 renderer 分辨率改成 ",[70,110602,110603],{},"height=240, width=320","，观察输出 shape。",[29,110606,110607],{},"把方块颜色改成蓝色，重新保存图片。",[29,110609,110610,110611,110613],{},"把相机 ",[70,110612,1704],{}," 改远一点，观察画面中物体是否变小。",[29,110615,110616,110617,1666,110620,110623],{},"把 viewer 示例中的 ",[70,110618,110619],{},"data.time \u003C 5.0",[70,110621,110622],{},"data.time \u003C 20.0","，观察更长时间。",[14,110625,1715],{"id":1714},[387,110627,110629],{"id":110628},"viewer-窗口打不开","viewer 窗口打不开",[19,110631,110632],{},"安装:",[154,110634,110636],{"className":172,"code":110635,"language":174,"meta":160,"style":160},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[70,110637,110638],{"__ignoreMap":160},[178,110639,110640,110642,110644,110646,110648,110650,110652,110654,110656,110658,110660],{"class":180,"line":181},[178,110641,185],{"class":184},[178,110643,189],{"class":188},[178,110645,192],{"class":188},[178,110647,196],{"class":195},[178,110649,205],{"class":188},[178,110651,102540],{"class":188},[178,110653,104149],{"class":188},[178,110655,102553],{"class":188},[178,110657,102559],{"class":188},[178,110659,102550],{"class":188},[178,110661,110662],{"class":188}," libXinerama\n",[387,110664,110666],{"id":110665},"glfwerror",[70,110667,110668],{},"GLFWError",[19,110670,110671],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[387,110673,110675],{"id":110674},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,110677,110678,110679,1815,110681,110683],{},"尝试 ",[70,110680,102732],{},[70,110682,102735],{},"。可能存在版本差异。",[387,110685,110686],{"id":110686},"保存图片是黑的",[19,110688,104210],{},[26,110690,110691,110694,110697,110707],{},[29,110692,110693],{},"XML 里是否有 light。",[29,110695,110696],{},"相机是否对着模型。",[29,110698,110699,110700,110703,110704,297],{},"是否先 ",[70,110701,110702],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[70,110705,110706],{},"renderer.render()",[29,110708,110709],{},"物体是否已经掉出视野。",[387,110711,110712],{"id":110712},"远程服务器没有显示器",[19,110714,110715],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[154,110717,110718],{"className":172,"code":110558,"language":174,"meta":160,"style":160},[70,110719,110720],{"__ignoreMap":160},[178,110721,110722,110724,110726,110728,110730],{"class":180,"line":181},[178,110723,109179],{"class":319},[178,110725,330],{"class":699},[178,110727,109169],{"class":188},[178,110729,110571],{"class":184},[178,110731,109990],{"class":188},[19,110733,110734],{},"如果 EGL 不可用，再尝试：",[154,110736,110737],{"className":172,"code":110578,"language":174,"meta":160,"style":160},[70,110738,110739],{"__ignoreMap":160},[178,110740,110741,110743,110745,110747,110749],{"class":180,"line":181},[178,110742,109179],{"class":319},[178,110744,330],{"class":699},[178,110746,109173],{"class":188},[178,110748,110571],{"class":184},[178,110750,109990],{"class":188},[14,110752,1823],{"id":1822},[19,110754,110755],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[26,110757,110758,110761,110764],{},[29,110759,110760],{},"先用 viewer 看模型和控制是否正常。",[29,110762,110763],{},"再用 renderer 保存图片或构造视觉观测。",[29,110765,110766],{},"最后把状态、动作、图像、奖励组织成训练数据。",[1853,110768,110769],{},"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":160,"searchDepth":263,"depth":263,"links":110771},[110772,110773,110774,110779,110784,110785,110786,110793],{"id":16,"depth":263,"text":17},{"id":165,"depth":263,"text":166},{"id":303,"depth":263,"text":304,"children":110775},[110776,110777,110778],{"id":109276,"depth":274,"text":109277},{"id":109306,"depth":274,"text":109307},{"id":109341,"depth":274,"text":109342},{"id":686,"depth":263,"text":687,"children":110780},[110781,110782,110783],{"id":1135,"depth":274,"text":1135},{"id":110086,"depth":274,"text":110087},{"id":110264,"depth":274,"text":110265},{"id":1569,"depth":263,"text":1570},{"id":1653,"depth":263,"text":1654},{"id":1714,"depth":263,"text":1715,"children":110787},[110788,110789,110790,110791,110792],{"id":110628,"depth":274,"text":110629},{"id":110665,"depth":274,"text":110668},{"id":110674,"depth":274,"text":110675},{"id":110686,"depth":274,"text":110686},{"id":110712,"depth":274,"text":110712},{"id":1822,"depth":263,"text":1823},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":108884,"description":160},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":110800,"title":110801,"body":110802,"description":160,"extension":1880,"meta":112713,"navigation":721,"path":112714,"seo":112715,"stem":112716,"__hash__":112717},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":110803,"toc":112689},[110804,110807,110809,110812,110814,110833,110836,110842,110845,110847,110849,110873,110875,110889,110891,110932,110934,110945,110947,110950,110956,110959,110993,110996,111028,111031,111063,111067,111070,111110,111113,111119,111122,111128,111132,111135,111141,111144,111148,111151,111191,111193,111206,111209,111211,111793,111795,111807,111810,111821,111823,111826,111845,111857,111860,111881,111884,111887,111930,111933,111936,111956,111963,111965,111983,111998,112001,112007,112010,112016,112033,112040,112071,112082,112116,112127,112144,112153,112161,112166,112180,112183,112204,112210,112224,112229,112259,112269,112294,112302,112325,112328,112344,112347,112355,112361,112383,112396,112417,112426,112465,112476,112478,112481,112487,112490,112493,112499,112502,112522,112525,112527,112566,112568,112571,112579,112582,112585,112612,112615,112625,112631,112634,112640,112642,112648,112652,112655,112657,112660,112684,112687],[10,110805,110801],{"id":110806},"_6控制任务cartpole",[14,110808,17],{"id":16},[19,110810,110811],{},"本章搭建一个最小 Cartpole 控制任务。",[19,110813,105696],{},[26,110815,110816,110819,110821,110824,110827,110830],{},[29,110817,110818],{},"slide joint",[29,110820,107549],{},[29,110822,110823],{},"cart force actuator",[29,110825,110826],{},"状态观测",[29,110828,110829],{},"简单控制循环",[29,110831,110832],{},"reward 设计雏形",[19,110834,110835],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[154,110837,110840],{"className":110838,"code":110839,"language":159,"meta":160},[157],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[70,110841,110839],{"__ignoreMap":160},[19,110843,110844],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,110846,166],{"id":165},[19,110848,169],{},[154,110850,110851],{"className":172,"code":105753,"language":174,"meta":160,"style":160},[70,110852,110853],{"__ignoreMap":160},[178,110854,110855,110857,110859,110861,110863,110865,110867,110869,110871],{"class":180,"line":181},[178,110856,185],{"class":184},[178,110858,189],{"class":188},[178,110860,192],{"class":188},[178,110862,196],{"class":195},[178,110864,105768],{"class":188},[178,110866,102505],{"class":188},[178,110868,199],{"class":188},[178,110870,202],{"class":188},[178,110872,105777],{"class":188},[19,110874,211],{},[154,110876,110877],{"className":172,"code":214,"language":174,"meta":160,"style":160},[70,110878,110879],{"__ignoreMap":160},[178,110880,110881,110883,110885,110887],{"class":180,"line":181},[178,110882,221],{"class":184},[178,110884,192],{"class":188},[178,110886,226],{"class":188},[178,110888,229],{"class":188},[19,110890,232],{},[154,110892,110894],{"className":172,"code":110893,"language":174,"meta":160,"style":160},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[70,110895,110896,110913,110922],{"__ignoreMap":160},[178,110897,110898,110900,110902,110904,110907,110909,110911],{"class":180,"line":181},[178,110899,242],{"class":184},[178,110901,245],{"class":188},[178,110903,248],{"class":195},[178,110905,110906],{"class":188}," mujoco-cartpole",[178,110908,254],{"class":188},[178,110910,257],{"class":195},[178,110912,260],{"class":195},[178,110914,110915,110917,110919],{"class":180,"line":263},[178,110916,242],{"class":184},[178,110918,268],{"class":188},[178,110920,110921],{"class":188}," mujoco-cartpole\n",[178,110923,110924,110926,110928,110930],{"class":180,"line":274},[178,110925,221],{"class":184},[178,110927,192],{"class":188},[178,110929,226],{"class":188},[178,110931,229],{"class":188},[19,110933,285],{},[26,110935,110936,110939,110942],{},[29,110937,110938],{},"本章不依赖 Gymnasium。",[29,110940,110941],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[29,110943,110944],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,110946,304],{"id":303},[19,110948,110949],{},"Cartpole 的模型结构:",[154,110951,110954],{"className":110952,"code":110953,"language":159,"meta":160},[157],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[70,110955,110953],{"__ignoreMap":160},[19,110957,110958],{},"小车通过 slide joint 左右移动:",[154,110960,110962],{"className":310,"code":110961,"language":312,"meta":160,"style":160},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[70,110963,110964],{"__ignoreMap":160},[178,110965,110966,110968,110970,110972,110974,110977,110979,110981,110984,110986,110988,110991],{"class":180,"line":181},[178,110967,320],{"class":319},[178,110969,384],{"class":323},[178,110971,426],{"class":184},[178,110973,330],{"class":319},[178,110975,110976],{"class":188},"\"cart_x\"",[178,110978,467],{"class":184},[178,110980,330],{"class":319},[178,110982,110983],{"class":188},"\"slide\"",[178,110985,107393],{"class":184},[178,110987,330],{"class":319},[178,110989,110990],{"class":188},"\"1 0 0\"",[178,110992,458],{"class":319},[19,110994,110995],{},"杆子通过 hinge joint 旋转:",[154,110997,110999],{"className":310,"code":110998,"language":312,"meta":160,"style":160},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[70,111000,111001],{"__ignoreMap":160},[178,111002,111003,111005,111007,111009,111011,111014,111016,111018,111020,111022,111024,111026],{"class":180,"line":181},[178,111004,320],{"class":319},[178,111006,384],{"class":323},[178,111008,426],{"class":184},[178,111010,330],{"class":319},[178,111012,111013],{"class":188},"\"pole_hinge\"",[178,111015,467],{"class":184},[178,111017,330],{"class":319},[178,111019,107384],{"class":188},[178,111021,107393],{"class":184},[178,111023,330],{"class":319},[178,111025,107398],{"class":188},[178,111027,458],{"class":319},[19,111029,111030],{},"控制力作用在小车 slide joint 上:",[154,111032,111034],{"className":310,"code":111033,"language":312,"meta":160,"style":160},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[70,111035,111036],{"__ignoreMap":160},[178,111037,111038,111040,111042,111044,111046,111049,111051,111053,111055,111057,111059,111061],{"class":180,"line":181},[178,111039,320],{"class":319},[178,111041,107439],{"class":323},[178,111043,426],{"class":184},[178,111045,330],{"class":319},[178,111047,111048],{"class":188},"\"cart_motor\"",[178,111050,107449],{"class":184},[178,111052,330],{"class":319},[178,111054,110976],{"class":188},[178,111056,107456],{"class":184},[178,111058,330],{"class":319},[178,111060,56037],{"class":188},[178,111062,458],{"class":319},[387,111064,111066],{"id":111065},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,111068,111069],{},"这个简化模型有两个关节：",[45,111071,111072,111083],{},[48,111073,111074],{},[51,111075,111076,111078,111080],{},[54,111077,129],{"align":56},[54,111079,25495],{"align":56},[54,111081,111082],{"align":56},"对应状态",[62,111084,111085,111098],{},[51,111086,111087,111092,111095],{},[67,111088,111089],{"align":56},[70,111090,111091],{},"cart_x",[67,111093,111094],{"align":56},"slide",[67,111096,111097],{"align":56},"小车 x 位置",[51,111099,111100,111105,111107],{},[67,111101,111102],{"align":56},[70,111103,111104],{},"pole_hinge",[67,111106,107205],{"align":56},[67,111108,111109],{"align":56},"杆子角度",[19,111111,111112],{},"所以：",[154,111114,111117],{"className":111115,"code":111116,"language":159,"meta":160},[157],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[70,111118,111116],{"__ignoreMap":160},[19,111120,111121],{},"把它们拼起来就是观测：",[154,111123,111126],{"className":111124,"code":111125,"language":159,"meta":160},[157],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[70,111127,111125],{"__ignoreMap":160},[387,111129,111131],{"id":111130},"action-是什么","action 是什么",[19,111133,111134],{},"本章只有一个 actuator：",[154,111136,111139],{"className":111137,"code":111138,"language":159,"meta":160},[157],"data.ctrl[0] = action\n",[70,111140,111138],{"__ignoreMap":160},[19,111142,111143],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[387,111145,111147],{"id":111146},"reward-是什么","reward 是什么",[19,111149,111150],{},"奖励函数：",[154,111152,111154],{"className":690,"code":111153,"language":692,"meta":160,"style":160},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[70,111155,111156],{"__ignoreMap":160},[178,111157,111158,111160,111163,111165,111167,111169,111172,111174,111177,111179,111181,111183,111186,111188],{"class":180,"line":181},[178,111159,18804],{"class":699},[178,111161,111162],{"class":195}," float",[178,111164,944],{"class":319},[178,111166,104047],{"class":195},[178,111168,53998],{"class":699},[178,111170,111171],{"class":195}," 0.1",[178,111173,8287],{"class":699},[178,111175,111176],{"class":319}," cart_x ",[178,111178,2395],{"class":699},[178,111180,111176],{"class":319},[178,111182,2472],{"class":699},[178,111184,111185],{"class":319}," pole_angle ",[178,111187,2395],{"class":699},[178,111189,111190],{"class":319}," pole_angle)\n",[19,111192,107591],{},[26,111194,111195,111200,111203],{},[29,111196,111197,111198,297],{},"基础奖励是 ",[70,111199,104047],{},[29,111201,111202],{},"小车离中心越远，扣分越多。",[29,111204,111205],{},"杆子角度越大，扣分越多。",[19,111207,111208],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111210,687],{"id":686},[154,111212,111214],{"className":690,"code":111213,"language":692,"meta":160,"style":160},"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",[70,111215,111216,111222,111232,111236,111240,111248,111253,111257,111261,111265,111270,111274,111279,111284,111289,111293,111298,111303,111308,111312,111316,111320,111324,111328,111333,111337,111341,111345,111349,111353,111363,111370,111374,111378,111392,111406,111419,111449,111453,111457,111469,111481,111489,111493,111506,111510,111514,111523,111527,111543,111553,111566,111579,111583,111606,111624,111628,111640,111644,111648,111658,111668,111672,111688,111729,111733,111753,111769,111773,111777,111789],{"__ignoreMap":160},[178,111217,111218,111220],{"class":180,"line":181},[178,111219,700],{"class":699},[178,111221,703],{"class":319},[178,111223,111224,111226,111228,111230],{"class":180,"line":263},[178,111225,700],{"class":699},[178,111227,710],{"class":319},[178,111229,713],{"class":699},[178,111231,716],{"class":319},[178,111233,111234],{"class":180,"line":274},[178,111235,722],{"emptyLinePlaceholder":721},[178,111237,111238],{"class":180,"line":354},[178,111239,722],{"emptyLinePlaceholder":721},[178,111241,111242,111244,111246],{"class":180,"line":364},[178,111243,731],{"class":195},[178,111245,734],{"class":699},[178,111247,737],{"class":188},[178,111249,111250],{"class":180,"line":740},[178,111251,111252],{"class":188},"\u003Cmujoco model=\"cartpole\">\n",[178,111254,111255],{"class":180,"line":746},[178,111256,749],{"class":188},[178,111258,111259],{"class":180,"line":752},[178,111260,722],{"emptyLinePlaceholder":721},[178,111262,111263],{"class":180,"line":757},[178,111264,760],{"class":188},[178,111266,111267],{"class":180,"line":763},[178,111268,111269],{"class":188},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[178,111271,111272],{"class":180,"line":769},[178,111273,722],{"emptyLinePlaceholder":721},[178,111275,111276],{"class":180,"line":774},[178,111277,111278],{"class":188},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[178,111280,111281],{"class":180,"line":780},[178,111282,111283],{"class":188},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[178,111285,111286],{"class":180,"line":786},[178,111287,111288],{"class":188},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[178,111290,111291],{"class":180,"line":792},[178,111292,722],{"emptyLinePlaceholder":721},[178,111294,111295],{"class":180,"line":798},[178,111296,111297],{"class":188},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[178,111299,111300],{"class":180,"line":804},[178,111301,111302],{"class":188},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[178,111304,111305],{"class":180,"line":810},[178,111306,111307],{"class":188},"        \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",[178,111309,111310],{"class":180,"line":816},[178,111311,107803],{"class":188},[178,111313,111314],{"class":180,"line":822},[178,111315,801],{"class":188},[178,111317,111318],{"class":180,"line":827},[178,111319,807],{"class":188},[178,111321,111322],{"class":180,"line":832},[178,111323,722],{"emptyLinePlaceholder":721},[178,111325,111326],{"class":180,"line":850},[178,111327,107820],{"class":188},[178,111329,111330],{"class":180,"line":866},[178,111331,111332],{"class":188},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[178,111334,111335],{"class":180,"line":877},[178,111336,107830],{"class":188},[178,111338,111339],{"class":180,"line":882},[178,111340,813],{"class":188},[178,111342,111343],{"class":180,"line":898},[178,111344,819],{"class":188},[178,111346,111347],{"class":180,"line":914},[178,111348,722],{"emptyLinePlaceholder":721},[178,111350,111351],{"class":180,"line":919},[178,111352,722],{"emptyLinePlaceholder":721},[178,111354,111355,111357,111360],{"class":180,"line":935},[178,111356,835],{"class":699},[178,111358,111359],{"class":184}," get_observation",[178,111361,111362],{"class":319},"(data: mujoco.MjData) -> np.ndarray:\n",[178,111364,111365,111367],{"class":180,"line":952},[178,111366,5862],{"class":699},[178,111368,111369],{"class":319}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[178,111371,111372],{"class":180,"line":966},[178,111373,722],{"emptyLinePlaceholder":721},[178,111375,111376],{"class":180,"line":980},[178,111377,722],{"emptyLinePlaceholder":721},[178,111379,111380,111382,111385,111388,111390],{"class":180,"line":985},[178,111381,835],{"class":699},[178,111383,111384],{"class":184}," compute_reward",[178,111386,111387],{"class":319},"(obs: np.ndarray) -> ",[178,111389,1991],{"class":195},[178,111391,847],{"class":319},[178,111393,111394,111397,111399,111402,111404],{"class":180,"line":1008},[178,111395,111396],{"class":319},"    cart_x ",[178,111398,330],{"class":699},[178,111400,111401],{"class":319}," obs[",[178,111403,2133],{"class":195},[178,111405,34978],{"class":319},[178,111407,111408,111411,111413,111415,111417],{"class":180,"line":1014},[178,111409,111410],{"class":319},"    pole_angle ",[178,111412,330],{"class":699},[178,111414,111401],{"class":319},[178,111416,1665],{"class":195},[178,111418,34978],{"class":319},[178,111420,111421,111423,111425,111427,111429,111431,111433,111435,111437,111439,111441,111443,111445,111447],{"class":180,"line":1019},[178,111422,5862],{"class":699},[178,111424,111162],{"class":195},[178,111426,944],{"class":319},[178,111428,104047],{"class":195},[178,111430,53998],{"class":699},[178,111432,111171],{"class":195},[178,111434,8287],{"class":699},[178,111436,111176],{"class":319},[178,111438,2395],{"class":699},[178,111440,111176],{"class":319},[178,111442,2472],{"class":699},[178,111444,111185],{"class":319},[178,111446,2395],{"class":699},[178,111448,111190],{"class":319},[178,111450,111451],{"class":180,"line":1033},[178,111452,722],{"emptyLinePlaceholder":721},[178,111454,111455],{"class":180,"line":1046},[178,111456,722],{"emptyLinePlaceholder":721},[178,111458,111459,111461,111463,111465,111467],{"class":180,"line":1059},[178,111460,835],{"class":699},[178,111462,838],{"class":184},[178,111464,841],{"class":319},[178,111466,844],{"class":195},[178,111468,847],{"class":319},[178,111470,111471,111473,111475,111477,111479],{"class":180,"line":1072},[178,111472,853],{"class":319},[178,111474,330],{"class":699},[178,111476,858],{"class":319},[178,111478,731],{"class":195},[178,111480,863],{"class":319},[178,111482,111483,111485,111487],{"class":180,"line":1077},[178,111484,869],{"class":319},[178,111486,330],{"class":699},[178,111488,874],{"class":319},[178,111490,111491],{"class":180,"line":1082},[178,111492,722],{"emptyLinePlaceholder":721},[178,111494,111495,111497,111499,111501,111503],{"class":180,"line":1099},[178,111496,106434],{"class":319},[178,111498,1665],{"class":195},[178,111500,6214],{"class":319},[178,111502,330],{"class":699},[178,111504,111505],{"class":195}," 0.1\n",[178,111507,111508],{"class":180,"line":9806},[178,111509,106447],{"class":319},[178,111511,111512],{"class":180,"line":9818},[178,111513,722],{"emptyLinePlaceholder":721},[178,111515,111516,111519,111521],{"class":180,"line":11477},[178,111517,111518],{"class":319},"    total_reward ",[178,111520,330],{"class":699},[178,111522,106126],{"class":195},[178,111524,111525],{"class":180,"line":11502},[178,111526,722],{"emptyLinePlaceholder":721},[178,111528,111529,111531,111533,111535,111537,111539,111541],{"class":180,"line":11525},[178,111530,988],{"class":699},[178,111532,33351],{"class":319},[178,111534,994],{"class":699},[178,111536,997],{"class":195},[178,111538,944],{"class":319},[178,111540,8179],{"class":195},[178,111542,1005],{"class":319},[178,111544,111545,111548,111550],{"class":180,"line":11549},[178,111546,111547],{"class":319},"        obs ",[178,111549,330],{"class":699},[178,111551,111552],{"class":319}," get_observation(data)\n",[178,111554,111555,111558,111560,111562,111564],{"class":180,"line":11554},[178,111556,111557],{"class":319},"        pole_angle ",[178,111559,330],{"class":699},[178,111561,111401],{"class":319},[178,111563,1665],{"class":195},[178,111565,34978],{"class":319},[178,111567,111568,111571,111573,111575,111577],{"class":180,"line":11559},[178,111569,111570],{"class":319},"        pole_angular_velocity ",[178,111572,330],{"class":699},[178,111574,111401],{"class":319},[178,111576,2021],{"class":195},[178,111578,34978],{"class":319},[178,111580,111581],{"class":180,"line":11564},[178,111582,722],{"emptyLinePlaceholder":721},[178,111584,111585,111588,111590,111593,111595,111597,111599,111601,111603],{"class":180,"line":11573},[178,111586,111587],{"class":319},"        action ",[178,111589,330],{"class":699},[178,111591,111592],{"class":195}," 2.0",[178,111594,8287],{"class":699},[178,111596,111185],{"class":319},[178,111598,2421],{"class":699},[178,111600,63588],{"class":195},[178,111602,8287],{"class":699},[178,111604,111605],{"class":319}," pole_angular_velocity\n",[178,111607,111608,111610,111612,111614,111616,111618,111620,111622],{"class":180,"line":11578},[178,111609,111587],{"class":319},[178,111611,330],{"class":699},[178,111613,108812],{"class":319},[178,111615,2472],{"class":699},[178,111617,104047],{"class":195},[178,111619,14196],{"class":319},[178,111621,104047],{"class":195},[178,111623,863],{"class":319},[178,111625,111626],{"class":180,"line":11584},[178,111627,722],{"emptyLinePlaceholder":721},[178,111629,111630,111632,111634,111636,111638],{"class":180,"line":11605},[178,111631,107982],{"class":319},[178,111633,2133],{"class":195},[178,111635,6214],{"class":319},[178,111637,330],{"class":699},[178,111639,108835],{"class":319},[178,111641,111642],{"class":180,"line":11611},[178,111643,1011],{"class":319},[178,111645,111646],{"class":180,"line":11625},[178,111647,722],{"emptyLinePlaceholder":721},[178,111649,111650,111653,111655],{"class":180,"line":11631},[178,111651,111652],{"class":319},"        reward ",[178,111654,330],{"class":699},[178,111656,111657],{"class":319}," compute_reward(get_observation(data))\n",[178,111659,111660,111663,111665],{"class":180,"line":11658},[178,111661,111662],{"class":319},"        total_reward ",[178,111664,11238],{"class":699},[178,111666,111667],{"class":319}," reward\n",[178,111669,111670],{"class":180,"line":11667},[178,111671,722],{"emptyLinePlaceholder":721},[178,111673,111674,111676,111678,111680,111682,111684,111686],{"class":180,"line":11673},[178,111675,4280],{"class":699},[178,111677,33351],{"class":319},[178,111679,2268],{"class":699},[178,111681,7523],{"class":195},[178,111683,1091],{"class":699},[178,111685,930],{"class":195},[178,111687,847],{"class":319},[178,111689,111690,111692,111694,111697,111700,111703,111706,111708,111711,111714,111716,111718,111720,111722,111725,111727],{"class":180,"line":11681},[178,111691,36382],{"class":195},[178,111693,944],{"class":319},[178,111695,111696],{"class":188},"\"step:\"",[178,111698,111699],{"class":319},", step, ",[178,111701,111702],{"class":188},"\"obs:\"",[178,111704,111705],{"class":319},", np.round(obs, ",[178,111707,2021],{"class":195},[178,111709,111710],{"class":319},"), ",[178,111712,111713],{"class":188},"\"action:\"",[178,111715,14196],{"class":319},[178,111717,33752],{"class":195},[178,111719,944],{"class":319},[178,111721,1991],{"class":195},[178,111723,111724],{"class":319},"(action), ",[178,111726,2021],{"class":195},[178,111728,32239],{"class":319},[178,111730,111731],{"class":180,"line":11686},[178,111732,722],{"emptyLinePlaceholder":721},[178,111734,111735,111737,111739,111742,111744,111746,111749,111751],{"class":180,"line":18362},[178,111736,1022],{"class":195},[178,111738,944],{"class":319},[178,111740,111741],{"class":188},"\"total_reward:\"",[178,111743,14196],{"class":319},[178,111745,33752],{"class":195},[178,111747,111748],{"class":319},"(total_reward, ",[178,111750,2021],{"class":195},[178,111752,32239],{"class":319},[178,111754,111755,111757,111759,111762,111765,111767],{"class":180,"line":18368},[178,111756,1022],{"class":195},[178,111758,944],{"class":319},[178,111760,111761],{"class":188},"\"final obs:\"",[178,111763,111764],{"class":319},", np.round(get_observation(data), ",[178,111766,2021],{"class":195},[178,111768,32239],{"class":319},[178,111770,111771],{"class":180,"line":18391},[178,111772,722],{"emptyLinePlaceholder":721},[178,111774,111775],{"class":180,"line":18397},[178,111776,722],{"emptyLinePlaceholder":721},[178,111778,111779,111781,111783,111785,111787],{"class":180,"line":18420},[178,111780,1085],{"class":699},[178,111782,1088],{"class":195},[178,111784,1091],{"class":699},[178,111786,1094],{"class":188},[178,111788,847],{"class":319},[178,111790,111791],{"class":180,"line":18434},[178,111792,1102],{"class":319},[19,111794,1105],{},[154,111796,111798],{"className":172,"code":111797,"language":174,"meta":160,"style":160},"touch ch6_cartpole.py\n",[70,111799,111800],{"__ignoreMap":160},[178,111801,111802,111804],{"class":180,"line":181},[178,111803,1115],{"class":184},[178,111805,111806],{"class":188}," ch6_cartpole.py\n",[19,111808,111809],{},"运行：",[154,111811,111813],{"className":172,"code":111812,"language":174,"meta":160,"style":160},"python ch6_cartpole.py\n",[70,111814,111815],{"__ignoreMap":160},[178,111816,111817,111819],{"class":180,"line":181},[178,111818,692],{"class":184},[178,111820,111806],{"class":188},[387,111822,1135],{"id":1135},[19,111824,111825],{},"构造观测：",[154,111827,111829],{"className":690,"code":111828,"language":692,"meta":160,"style":160},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[70,111830,111831,111839],{"__ignoreMap":160},[178,111832,111833,111835,111837],{"class":180,"line":181},[178,111834,835],{"class":699},[178,111836,111359],{"class":184},[178,111838,111362],{"class":319},[178,111840,111841,111843],{"class":180,"line":263},[178,111842,5862],{"class":699},[178,111844,111369],{"class":319},[19,111846,111847,111850,111851,111853,111854,111856],{},[70,111848,111849],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[70,111852,1580],{}," 2 维，",[70,111855,105725],{}," 2 维，所以 obs 是 4 维。",[19,111858,111859],{},"设置初始角度：",[154,111861,111863],{"className":690,"code":111862,"language":692,"meta":160,"style":160},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[70,111864,111865,111877],{"__ignoreMap":160},[178,111866,111867,111869,111871,111873,111875],{"class":180,"line":181},[178,111868,106064],{"class":319},[178,111870,1665],{"class":195},[178,111872,6214],{"class":319},[178,111874,330],{"class":699},[178,111876,111505],{"class":195},[178,111878,111879],{"class":180,"line":263},[178,111880,105908],{"class":319},[19,111882,111883],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,111885,111886],{},"简单反馈控制：",[154,111888,111890],{"className":690,"code":111889,"language":692,"meta":160,"style":160},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[70,111891,111892,111912],{"__ignoreMap":160},[178,111893,111894,111896,111898,111900,111902,111904,111906,111908,111910],{"class":180,"line":181},[178,111895,108807],{"class":319},[178,111897,330],{"class":699},[178,111899,111592],{"class":195},[178,111901,8287],{"class":699},[178,111903,111185],{"class":319},[178,111905,2421],{"class":699},[178,111907,63588],{"class":195},[178,111909,8287],{"class":699},[178,111911,111605],{"class":319},[178,111913,111914,111916,111918,111920,111922,111924,111926,111928],{"class":180,"line":263},[178,111915,108807],{"class":319},[178,111917,330],{"class":699},[178,111919,108812],{"class":319},[178,111921,2472],{"class":699},[178,111923,104047],{"class":195},[178,111925,14196],{"class":319},[178,111927,104047],{"class":195},[178,111929,863],{"class":319},[19,111931,111932],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,111934,111935],{},"限制动作：",[154,111937,111939],{"className":690,"code":111938,"language":692,"meta":160,"style":160},"np.clip(action, -1.0, 1.0)\n",[70,111940,111941],{"__ignoreMap":160},[178,111942,111943,111946,111948,111950,111952,111954],{"class":180,"line":181},[178,111944,111945],{"class":319},"np.clip(action, ",[178,111947,2472],{"class":699},[178,111949,104047],{"class":195},[178,111951,14196],{"class":319},[178,111953,104047],{"class":195},[178,111955,863],{"class":319},[19,111957,111958,111959,111962],{},"因为 XML 里 ",[70,111960,111961],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[387,111964,1222],{"id":1222},[154,111966,111967],{"className":690,"code":111828,"language":692,"meta":160,"style":160},[70,111968,111969,111977],{"__ignoreMap":160},[178,111970,111971,111973,111975],{"class":180,"line":181},[178,111972,835],{"class":699},[178,111974,111359],{"class":184},[178,111976,111362],{"class":319},[178,111978,111979,111981],{"class":180,"line":263},[178,111980,5862],{"class":699},[178,111982,111369],{"class":319},[19,111984,111985,111986,111989,111990,111993,111994,111997],{},"这段定义了一个函数，用来获取当前观测。",[70,111987,111988],{},"data.qpos.copy()"," 是位置数组副本，",[70,111991,111992],{},"data.qvel.copy()"," 是速度数组副本。",[70,111995,111996],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,111999,112000],{},"在本章模型里：",[154,112002,112005],{"className":112003,"code":112004,"language":159,"meta":160},[157],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[70,112006,112004],{"__ignoreMap":160},[19,112008,112009],{},"所以返回的 obs 是：",[154,112011,112014],{"className":112012,"code":112013,"language":159,"meta":160},[157],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[70,112015,112013],{"__ignoreMap":160},[154,112017,112019],{"className":690,"code":112018,"language":692,"meta":160,"style":160},"def compute_reward(obs: np.ndarray) -> float:\n",[70,112020,112021],{"__ignoreMap":160},[178,112022,112023,112025,112027,112029,112031],{"class":180,"line":181},[178,112024,835],{"class":699},[178,112026,111384],{"class":184},[178,112028,111387],{"class":319},[178,112030,1991],{"class":195},[178,112032,847],{"class":319},[19,112034,112035,112036,112039],{},"这行定义奖励函数。输入是观测 ",[70,112037,112038],{},"obs","，输出是一个浮点数奖励。",[154,112041,112043],{"className":690,"code":112042,"language":692,"meta":160,"style":160},"cart_x = obs[0]\npole_angle = obs[1]\n",[70,112044,112045,112058],{"__ignoreMap":160},[178,112046,112047,112050,112052,112054,112056],{"class":180,"line":181},[178,112048,112049],{"class":319},"cart_x ",[178,112051,330],{"class":699},[178,112053,111401],{"class":319},[178,112055,2133],{"class":195},[178,112057,34978],{"class":319},[178,112059,112060,112063,112065,112067,112069],{"class":180,"line":263},[178,112061,112062],{"class":319},"pole_angle ",[178,112064,330],{"class":699},[178,112066,111401],{"class":319},[178,112068,1665],{"class":195},[178,112070,34978],{"class":319},[19,112072,112073,112074,112077,112078,112081],{},"数组索引从 0 开始。",[70,112075,112076],{},"obs[0]"," 是第一个元素，也就是小车位置。",[70,112079,112080],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[154,112083,112084],{"className":690,"code":111153,"language":692,"meta":160,"style":160},[70,112085,112086],{"__ignoreMap":160},[178,112087,112088,112090,112092,112094,112096,112098,112100,112102,112104,112106,112108,112110,112112,112114],{"class":180,"line":181},[178,112089,18804],{"class":699},[178,112091,111162],{"class":195},[178,112093,944],{"class":319},[178,112095,104047],{"class":195},[178,112097,53998],{"class":699},[178,112099,111171],{"class":195},[178,112101,8287],{"class":699},[178,112103,111176],{"class":319},[178,112105,2395],{"class":699},[178,112107,111176],{"class":319},[178,112109,2472],{"class":699},[178,112111,111185],{"class":319},[178,112113,2395],{"class":699},[178,112115,111190],{"class":319},[19,112117,112118,112119,112122,112123,112126],{},"这行计算奖励。",[70,112120,112121],{},"cart_x * cart_x"," 是小车位置的平方，",[70,112124,112125],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[154,112128,112130],{"className":690,"code":112129,"language":692,"meta":160,"style":160},"data.qpos[1] = 0.1\n",[70,112131,112132],{"__ignoreMap":160},[178,112133,112134,112136,112138,112140,112142],{"class":180,"line":181},[178,112135,106064],{"class":319},[178,112137,1665],{"class":195},[178,112139,6214],{"class":319},[178,112141,330],{"class":699},[178,112143,111505],{"class":195},[19,112145,112146,112147,112149,112150,112152],{},"手动设置杆子的初始角度。因为 ",[70,112148,106821],{}," 是小车位置，",[70,112151,106824],{}," 是杆子角度，所以这里改的是杆子。",[154,112154,112155],{"className":690,"code":105908,"language":692,"meta":160,"style":160},[70,112156,112157],{"__ignoreMap":160},[178,112158,112159],{"class":180,"line":181},[178,112160,105908],{"class":319},[19,112162,106867,112163,112165],{},[70,112164,1580],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[154,112167,112169],{"className":690,"code":112168,"language":692,"meta":160,"style":160},"total_reward = 0.0\n",[70,112170,112171],{"__ignoreMap":160},[178,112172,112173,112176,112178],{"class":180,"line":181},[178,112174,112175],{"class":319},"total_reward ",[178,112177,330],{"class":699},[178,112179,106126],{"class":195},[19,112181,112182],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[154,112184,112186],{"className":690,"code":112185,"language":692,"meta":160,"style":160},"for step in range(1000):\n",[70,112187,112188],{"__ignoreMap":160},[178,112189,112190,112192,112194,112196,112198,112200,112202],{"class":180,"line":181},[178,112191,1474],{"class":699},[178,112193,33351],{"class":319},[178,112195,994],{"class":699},[178,112197,997],{"class":195},[178,112199,944],{"class":319},[178,112201,8179],{"class":195},[178,112203,1005],{"class":319},[19,112205,112206,112207,112209],{},"循环 1000 步。",[70,112208,108499],{}," 是当前步数，从 0 到 999。",[154,112211,112213],{"className":690,"code":112212,"language":692,"meta":160,"style":160},"obs = get_observation(data)\n",[70,112214,112215],{"__ignoreMap":160},[178,112216,112217,112220,112222],{"class":180,"line":181},[178,112218,112219],{"class":319},"obs ",[178,112221,330],{"class":699},[178,112223,111552],{"class":319},[19,112225,112226,112227,297],{},"读取当前状态，保存到 ",[70,112228,112038],{},[154,112230,112232],{"className":690,"code":112231,"language":692,"meta":160,"style":160},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[70,112233,112234,112246],{"__ignoreMap":160},[178,112235,112236,112238,112240,112242,112244],{"class":180,"line":181},[178,112237,112062],{"class":319},[178,112239,330],{"class":699},[178,112241,111401],{"class":319},[178,112243,1665],{"class":195},[178,112245,34978],{"class":319},[178,112247,112248,112251,112253,112255,112257],{"class":180,"line":263},[178,112249,112250],{"class":319},"pole_angular_velocity ",[178,112252,330],{"class":699},[178,112254,111401],{"class":319},[178,112256,2021],{"class":195},[178,112258,34978],{"class":319},[19,112260,112261,112262,112265,112266,297],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[70,112263,112264],{},"obs[3]","？因为 obs 的顺序是 ",[70,112267,112268],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[154,112270,112272],{"className":690,"code":112271,"language":692,"meta":160,"style":160},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[70,112273,112274],{"__ignoreMap":160},[178,112275,112276,112278,112280,112282,112284,112286,112288,112290,112292],{"class":180,"line":181},[178,112277,108807],{"class":319},[178,112279,330],{"class":699},[178,112281,111592],{"class":195},[178,112283,8287],{"class":699},[178,112285,111185],{"class":319},[178,112287,2421],{"class":699},[178,112289,63588],{"class":195},[178,112291,8287],{"class":699},[178,112293,111605],{"class":319},[19,112295,112296,112297,404,112299,112301],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[70,112298,106625],{},[70,112300,37061],{}," 是人为设置的系数，不是固定公式。",[154,112303,112305],{"className":690,"code":112304,"language":692,"meta":160,"style":160},"action = np.clip(action, -1.0, 1.0)\n",[70,112306,112307],{"__ignoreMap":160},[178,112308,112309,112311,112313,112315,112317,112319,112321,112323],{"class":180,"line":181},[178,112310,108807],{"class":319},[178,112312,330],{"class":699},[178,112314,108812],{"class":319},[178,112316,2472],{"class":699},[178,112318,104047],{"class":195},[178,112320,14196],{"class":319},[178,112322,104047],{"class":195},[178,112324,863],{"class":319},[19,112326,112327],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[154,112329,112330],{"className":690,"code":111138,"language":692,"meta":160,"style":160},[70,112331,112332],{"__ignoreMap":160},[178,112333,112334,112336,112338,112340,112342],{"class":180,"line":181},[178,112335,107236],{"class":319},[178,112337,2133],{"class":195},[178,112339,6214],{"class":319},[178,112341,330],{"class":699},[178,112343,108835],{"class":319},[19,112345,112346],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[154,112348,112349],{"className":690,"code":105870,"language":692,"meta":160,"style":160},[70,112350,112351],{"__ignoreMap":160},[178,112352,112353],{"class":180,"line":181},[178,112354,105870],{"class":319},[19,112356,112357,112358,112360],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[70,112359,107491],{}," 计算小车和杆子的下一刻状态。",[154,112362,112364],{"className":690,"code":112363,"language":692,"meta":160,"style":160},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[70,112365,112366,112375],{"__ignoreMap":160},[178,112367,112368,112371,112373],{"class":180,"line":181},[178,112369,112370],{"class":319},"reward ",[178,112372,330],{"class":699},[178,112374,111657],{"class":319},[178,112376,112377,112379,112381],{"class":180,"line":263},[178,112378,112175],{"class":319},[178,112380,11238],{"class":699},[178,112382,111667],{"class":319},[19,112384,112385,112386,112388,112389,112392,112393,297],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[70,112387,11238],{}," 是简写，",[70,112390,112391],{},"total_reward += reward"," 等价于 ",[70,112394,112395],{},"total_reward = total_reward + reward",[154,112397,112399],{"className":690,"code":112398,"language":692,"meta":160,"style":160},"if step % 100 == 0:\n",[70,112400,112401],{"__ignoreMap":160},[178,112402,112403,112405,112407,112409,112411,112413,112415],{"class":180,"line":181},[178,112404,1085],{"class":699},[178,112406,33351],{"class":319},[178,112408,2268],{"class":699},[178,112410,7523],{"class":195},[178,112412,1091],{"class":699},[178,112414,930],{"class":195},[178,112416,847],{"class":319},[19,112418,112419,112421,112422,112425],{},[70,112420,2268],{}," 是取余数。",[70,112423,112424],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[154,112427,112429],{"className":690,"code":112428,"language":692,"meta":160,"style":160},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[70,112430,112431],{"__ignoreMap":160},[178,112432,112433,112435,112437,112439,112441,112443,112445,112447,112449,112451,112453,112455,112457,112459,112461,112463],{"class":180,"line":181},[178,112434,1504],{"class":195},[178,112436,944],{"class":319},[178,112438,111696],{"class":188},[178,112440,111699],{"class":319},[178,112442,111702],{"class":188},[178,112444,111705],{"class":319},[178,112446,2021],{"class":195},[178,112448,111710],{"class":319},[178,112450,111713],{"class":188},[178,112452,14196],{"class":319},[178,112454,33752],{"class":195},[178,112456,944],{"class":319},[178,112458,1991],{"class":195},[178,112460,111724],{"class":319},[178,112462,2021],{"class":195},[178,112464,32239],{"class":319},[19,112466,112467,112468,112471,112472,112475],{},"打印当前步数、观测和动作。",[70,112469,112470],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[70,112473,112474],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,112477,1570],{"id":1569},[19,112479,112480],{},"观测向量:",[154,112482,112485],{"className":112483,"code":112484,"language":159,"meta":160},[157],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[70,112486,112484],{"__ignoreMap":160},[19,112488,112489],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,112491,112492],{},"每隔 100 步会打印一次：",[154,112494,112497],{"className":112495,"code":112496,"language":159,"meta":160},[157],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[70,112498,112496],{"__ignoreMap":160},[19,112500,112501],{},"重点观察：",[26,112503,112504,112510,112515],{},[29,112505,112506,112509],{},[70,112507,112508],{},"pole_angle"," 是否越来越大。",[29,112511,112512,112514],{},[70,112513,111091],{}," 是否跑得太远。",[29,112516,112517,112518,1815,112520,297],{},"action 是否经常被 clip 到 ",[70,112519,1459],{},[70,112521,1665],{},[19,112523,112524],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,112526,1654],{"id":1653},[26,112528,112529,112535,112538,112544,112554,112560,112563],{},[29,112530,112531,112532,297],{},"把初始角度改为 ",[70,112533,112534],{},"data.qpos[1] = 0.3",[29,112536,112537],{},"重新运行，观察控制是否变差。",[29,112539,112540,112541,112543],{},"把 actuator ",[70,112542,108432],{}," 改小。",[29,112545,112546,112547,112550,112551,297],{},"打印 ",[70,112548,112549],{},"model.nq, model.nv, model.nu","，应为 ",[70,112552,112553],{},"2 2 1",[29,112555,112556,112557,112559],{},"把 reward 里的 ",[70,112558,112125],{}," 系数改大，观察总奖励变化。",[29,112561,112562],{},"把控制器改成反号，观察杆子是否更容易倒。",[29,112564,112565],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,112567,1715],{"id":1714},[387,112569,112570],{"id":112570},"杆子方向和预期不一致",[19,112572,104040,112573,112575,112576,112578],{},[70,112574,107604],{}," 和 capsule 的 ",[70,112577,622],{},"，必要时用 viewer 可视化确认。",[387,112580,112581],{"id":112581},"控制器越控越倒",[19,112583,112584],{},"说明反馈符号可能反了，尝试:",[154,112586,112588],{"className":690,"code":112587,"language":692,"meta":160,"style":160},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[70,112589,112590],{"__ignoreMap":160},[178,112591,112592,112594,112596,112598,112600,112602,112604,112606,112608,112610],{"class":180,"line":181},[178,112593,108807],{"class":319},[178,112595,330],{"class":699},[178,112597,53998],{"class":699},[178,112599,106625],{"class":195},[178,112601,8287],{"class":699},[178,112603,111185],{"class":319},[178,112605,2472],{"class":699},[178,112607,63588],{"class":195},[178,112609,8287],{"class":699},[178,112611,111605],{"class":319},[387,112613,112614],{"id":112614},"小车飞走",[19,112616,112617,112618,112620,112621,112624],{},"降低 ",[70,112619,108432],{}," 或缩小 ",[70,112622,112623],{},"action"," 的 clip 范围。",[387,112626,112628,112630],{"id":112627},"obs3-为什么是杆子角速度",[70,112629,112264],{}," 为什么是杆子角速度",[19,112632,112633],{},"因为这个模型里：",[154,112635,112638],{"className":112636,"code":112637,"language":159,"meta":160},[157],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[70,112639,112637],{"__ignoreMap":160},[19,112641,111112],{},[154,112643,112646],{"className":112644,"code":112645,"language":159,"meta":160},[157],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[70,112647,112645],{"__ignoreMap":160},[387,112649,112651],{"id":112650},"reward-变成负数是否错误","reward 变成负数是否错误",[19,112653,112654],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,112656,1823],{"id":1822},[19,112658,112659],{},"一个控制任务通常包含：",[26,112661,112662,112665,112673,112678,112681],{},[29,112663,112664],{},"模型：Cartpole 的 body、joint、actuator。",[29,112666,112667,112668,1258,112670,112672],{},"观测：从 ",[70,112669,1580],{},[70,112671,105725],{}," 里取状态。",[29,112674,112675,112676,297],{},"动作：写入 ",[70,112677,102768],{},[29,112679,112680],{},"奖励：根据任务目标打分。",[29,112682,112683],{},"循环：obs -> action -> step -> reward。",[19,112685,112686],{},"这就是后面 Gymnasium 环境的基本骨架。",[1853,112688,1855],{},{"title":160,"searchDepth":263,"depth":263,"links":112690},[112691,112692,112693,112698,112702,112703,112704,112712],{"id":16,"depth":263,"text":17},{"id":165,"depth":263,"text":166},{"id":303,"depth":263,"text":304,"children":112694},[112695,112696,112697],{"id":111065,"depth":274,"text":111066},{"id":111130,"depth":274,"text":111131},{"id":111146,"depth":274,"text":111147},{"id":686,"depth":263,"text":687,"children":112699},[112700,112701],{"id":1135,"depth":274,"text":1135},{"id":1222,"depth":274,"text":1222},{"id":1569,"depth":263,"text":1570},{"id":1653,"depth":263,"text":1654},{"id":1714,"depth":263,"text":1715,"children":112705},[112706,112707,112708,112709,112711],{"id":112570,"depth":274,"text":112570},{"id":112581,"depth":274,"text":112581},{"id":112614,"depth":274,"text":112614},{"id":112627,"depth":274,"text":112710},"obs[3] 为什么是杆子角速度",{"id":112650,"depth":274,"text":112651},{"id":1822,"depth":263,"text":1823},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":110801,"description":160},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":112719,"title":112720,"body":112721,"description":160,"extension":1880,"meta":114735,"navigation":721,"path":114736,"seo":114737,"stem":114738,"__hash__":114739},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":112722,"toc":114711},[112723,112726,112728,112731,112733,112750,112753,112756,112762,112765,112767,112769,112793,112795,112809,112811,112852,112854,112872,112874,112877,112883,112886,112914,112918,112924,112949,112952,112983,112990,112993,112996,113002,113005,113011,113014,113020,113024,113027,113052,113055,113057,113817,113819,113831,113833,113844,113846,113849,113866,113869,113871,113882,113885,113887,113933,113936,113949,113952,114034,114037,114039,114055,114065,114078,114081,114120,114130,114141,114151,114164,114167,114196,114199,114209,114212,114218,114235,114246,114248,114254,114271,114282,114303,114306,114318,114321,114342,114345,114353,114361,114378,114381,114450,114457,114465,114468,114481,114488,114490,114493,114499,114502,114505,114511,114517,114519,114559,114561,114567,114576,114579,114581,114601,114604,114607,114613,114617,114619,114646,114649,114652,114679,114685,114688,114691,114693,114696,114699,114705,114708],[10,112724,112720],{"id":112725},"_7控制任务reacher-机械臂到达目标",[14,112727,17],{"id":16},[19,112729,112730],{},"本章搭建一个二维两关节 reacher 任务。",[19,112732,105696],{},[26,112734,112735,112738,112741,112744,112747],{},[29,112736,112737],{},"两个 hinge joint",[29,112739,112740],{},"两个 motor actuator",[29,112742,112743],{},"site 作为末端点和目标点",[29,112745,112746],{},"根据末端和目标距离设计 reward",[29,112748,112749],{},"构造机械臂任务的基本形式",[19,112751,112752],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,112754,112755],{},"Reacher 任务可以理解为：",[154,112757,112760],{"className":112758,"code":112759,"language":159,"meta":160},[157],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[70,112761,112759],{"__ignoreMap":160},[19,112763,112764],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,112766,166],{"id":165},[19,112768,169],{},[154,112770,112771],{"className":172,"code":105753,"language":174,"meta":160,"style":160},[70,112772,112773],{"__ignoreMap":160},[178,112774,112775,112777,112779,112781,112783,112785,112787,112789,112791],{"class":180,"line":181},[178,112776,185],{"class":184},[178,112778,189],{"class":188},[178,112780,192],{"class":188},[178,112782,196],{"class":195},[178,112784,105768],{"class":188},[178,112786,102505],{"class":188},[178,112788,199],{"class":188},[178,112790,202],{"class":188},[178,112792,105777],{"class":188},[19,112794,211],{},[154,112796,112797],{"className":172,"code":214,"language":174,"meta":160,"style":160},[70,112798,112799],{"__ignoreMap":160},[178,112800,112801,112803,112805,112807],{"class":180,"line":181},[178,112802,221],{"class":184},[178,112804,192],{"class":188},[178,112806,226],{"class":188},[178,112808,229],{"class":188},[19,112810,232],{},[154,112812,112814],{"className":172,"code":112813,"language":174,"meta":160,"style":160},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[70,112815,112816,112833,112842],{"__ignoreMap":160},[178,112817,112818,112820,112822,112824,112827,112829,112831],{"class":180,"line":181},[178,112819,242],{"class":184},[178,112821,245],{"class":188},[178,112823,248],{"class":195},[178,112825,112826],{"class":188}," mujoco-reacher",[178,112828,254],{"class":188},[178,112830,257],{"class":195},[178,112832,260],{"class":195},[178,112834,112835,112837,112839],{"class":180,"line":263},[178,112836,242],{"class":184},[178,112838,268],{"class":188},[178,112840,112841],{"class":188}," mujoco-reacher\n",[178,112843,112844,112846,112848,112850],{"class":180,"line":274},[178,112845,221],{"class":184},[178,112847,192],{"class":188},[178,112849,226],{"class":188},[178,112851,229],{"class":188},[19,112853,285],{},[26,112855,112856,112859,112862],{},[29,112857,112858],{},"本章使用低维状态，不使用图像输入。",[29,112860,112861],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[29,112863,112864,112865,1258,112867,1258,112869,112871],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[70,112866,1580],{},[70,112868,105725],{},[70,112870,1218],{}," 的方法一致。",[14,112873,304],{"id":303},[19,112875,112876],{},"Reacher 任务核心:",[154,112878,112881],{"className":112879,"code":112880,"language":159,"meta":160},[157],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[70,112882,112880],{"__ignoreMap":160},[19,112884,112885],{},"读取 site 世界坐标:",[154,112887,112889],{"className":690,"code":112888,"language":692,"meta":160,"style":160},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[70,112890,112891,112904],{"__ignoreMap":160},[178,112892,112893,112895,112897,112899,112902],{"class":180,"line":181},[178,112894,1172],{"class":319},[178,112896,330],{"class":699},[178,112898,906],{"class":319},[178,112900,112901],{"class":188},"\"tip\"",[178,112903,863],{"class":319},[178,112905,112906,112909,112911],{"class":180,"line":263},[178,112907,112908],{"class":319},"tip_pos ",[178,112910,330],{"class":699},[178,112912,112913],{"class":319}," data.site_xpos[site_id]\n",[387,112915,112917],{"id":112916},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,112919,112920,112921,112923],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[70,112922,1580],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[154,112925,112927],{"className":690,"code":112926,"language":692,"meta":160,"style":160},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[70,112928,112929,112939],{"__ignoreMap":160},[178,112930,112931,112934,112936],{"class":180,"line":181},[178,112932,112933],{"class":319},"tip ",[178,112935,330],{"class":699},[178,112937,112938],{"class":319}," data.site_xpos[tip_site_id]\n",[178,112940,112941,112944,112946],{"class":180,"line":263},[178,112942,112943],{"class":319},"target ",[178,112945,330],{"class":699},[178,112947,112948],{"class":319}," data.site_xpos[target_site_id]\n",[19,112950,112951],{},"这样 reward 就很容易写：",[154,112953,112955],{"className":690,"code":112954,"language":692,"meta":160,"style":160},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[70,112956,112957,112972],{"__ignoreMap":160},[178,112958,112959,112962,112964,112967,112969],{"class":180,"line":181},[178,112960,112961],{"class":319},"dist ",[178,112963,330],{"class":699},[178,112965,112966],{"class":319}," np.linalg.norm(tip ",[178,112968,2472],{"class":699},[178,112970,112971],{"class":319}," target)\n",[178,112973,112974,112976,112978,112980],{"class":180,"line":263},[178,112975,112370],{"class":319},[178,112977,330],{"class":699},[178,112979,53998],{"class":699},[178,112981,112982],{"class":319},"dist\n",[19,112984,112985,112986,112989],{},"距离越小，",[70,112987,112988],{},"-dist"," 越接近 0，奖励越高。",[387,112991,112992],{"id":112992},"两关节机械臂的状态",[19,112994,112995],{},"这个模型有两个 hinge joint：",[154,112997,113000],{"className":112998,"code":112999,"language":159,"meta":160},[157],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[70,113001,112999],{"__ignoreMap":160},[19,113003,113004],{},"再加上末端和目标位置：",[154,113006,113009],{"className":113007,"code":113008,"language":159,"meta":160},[157],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[70,113010,113008],{"__ignoreMap":160},[19,113012,113013],{},"总维度：",[154,113015,113018],{"className":113016,"code":113017,"language":159,"meta":160},[157],"2 + 2 + 3 + 3 = 10\n",[70,113019,113017],{"__ignoreMap":160},[387,113021,113023],{"id":113022},"为什么-gravity-是-0","为什么 gravity 是 0",[19,113025,113026],{},"本章把重力设为：",[154,113028,113030],{"className":310,"code":113029,"language":312,"meta":160,"style":160},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[70,113031,113032],{"__ignoreMap":160},[178,113033,113034,113036,113038,113040,113042,113044,113046,113048,113050],{"class":180,"line":181},[178,113035,320],{"class":319},[178,113037,70886],{"class":323},[178,113039,102878],{"class":184},[178,113041,330],{"class":319},[178,113043,102883],{"class":188},[178,113045,102886],{"class":184},[178,113047,330],{"class":319},[178,113049,1313],{"class":188},[178,113051,458],{"class":319},[19,113053,113054],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,113056,687],{"id":686},[154,113058,113060],{"className":690,"code":113059,"language":692,"meta":160,"style":160},"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",[70,113061,113062,113068,113078,113082,113086,113094,113099,113104,113108,113112,113117,113122,113126,113131,113136,113141,113145,113150,113155,113160,113165,113169,113173,113177,113181,113185,113190,113195,113199,113203,113207,113211,113215,113230,113239,113251,113274,113281,113285,113289,113299,113313,113327,113334,113338,113342,113356,113368,113380,113393,113408,113425,113429,113433,113445,113457,113465,113473,113477,113493,113498,113511,113524,113539,113543,113578,113610,113614,113618,113627,113631,113647,113657,113668,113684,113700,113716,113732,113736,113754,113774,113793,113797,113801,113813],{"__ignoreMap":160},[178,113063,113064,113066],{"class":180,"line":181},[178,113065,700],{"class":699},[178,113067,703],{"class":319},[178,113069,113070,113072,113074,113076],{"class":180,"line":263},[178,113071,700],{"class":699},[178,113073,710],{"class":319},[178,113075,713],{"class":699},[178,113077,716],{"class":319},[178,113079,113080],{"class":180,"line":274},[178,113081,722],{"emptyLinePlaceholder":721},[178,113083,113084],{"class":180,"line":354},[178,113085,722],{"emptyLinePlaceholder":721},[178,113087,113088,113090,113092],{"class":180,"line":364},[178,113089,731],{"class":195},[178,113091,734],{"class":699},[178,113093,737],{"class":188},[178,113095,113096],{"class":180,"line":740},[178,113097,113098],{"class":188},"\u003Cmujoco model=\"two_link_reacher\">\n",[178,113100,113101],{"class":180,"line":746},[178,113102,113103],{"class":188},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[178,113105,113106],{"class":180,"line":752},[178,113107,722],{"emptyLinePlaceholder":721},[178,113109,113110],{"class":180,"line":757},[178,113111,760],{"class":188},[178,113113,113114],{"class":180,"line":763},[178,113115,113116],{"class":188},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[178,113118,113119],{"class":180,"line":769},[178,113120,113121],{"class":188},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[178,113123,113124],{"class":180,"line":774},[178,113125,722],{"emptyLinePlaceholder":721},[178,113127,113128],{"class":180,"line":780},[178,113129,113130],{"class":188},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[178,113132,113133],{"class":180,"line":786},[178,113134,113135],{"class":188},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[178,113137,113138],{"class":180,"line":792},[178,113139,113140],{"class":188},"      \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",[178,113142,113143],{"class":180,"line":798},[178,113144,722],{"emptyLinePlaceholder":721},[178,113146,113147],{"class":180,"line":804},[178,113148,113149],{"class":188},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[178,113151,113152],{"class":180,"line":810},[178,113153,113154],{"class":188},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[178,113156,113157],{"class":180,"line":816},[178,113158,113159],{"class":188},"        \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",[178,113161,113162],{"class":180,"line":822},[178,113163,113164],{"class":188},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[178,113166,113167],{"class":180,"line":827},[178,113168,107803],{"class":188},[178,113170,113171],{"class":180,"line":832},[178,113172,801],{"class":188},[178,113174,113175],{"class":180,"line":850},[178,113176,807],{"class":188},[178,113178,113179],{"class":180,"line":866},[178,113180,722],{"emptyLinePlaceholder":721},[178,113182,113183],{"class":180,"line":877},[178,113184,107820],{"class":188},[178,113186,113187],{"class":180,"line":882},[178,113188,113189],{"class":188},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[178,113191,113192],{"class":180,"line":898},[178,113193,113194],{"class":188},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[178,113196,113197],{"class":180,"line":914},[178,113198,107830],{"class":188},[178,113200,113201],{"class":180,"line":919},[178,113202,813],{"class":188},[178,113204,113205],{"class":180,"line":935},[178,113206,819],{"class":188},[178,113208,113209],{"class":180,"line":952},[178,113210,722],{"emptyLinePlaceholder":721},[178,113212,113213],{"class":180,"line":966},[178,113214,722],{"emptyLinePlaceholder":721},[178,113216,113217,113219,113222,113225,113227],{"class":180,"line":980},[178,113218,835],{"class":699},[178,113220,113221],{"class":184}," site_position",[178,113223,113224],{"class":319},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[178,113226,3109],{"class":195},[178,113228,113229],{"class":319},") -> np.ndarray:\n",[178,113231,113232,113234,113236],{"class":180,"line":985},[178,113233,901],{"class":319},[178,113235,330],{"class":699},[178,113237,113238],{"class":319}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[178,113240,113241,113243,113245,113247,113249],{"class":180,"line":1008},[178,113242,922],{"class":699},[178,113244,957],{"class":319},[178,113246,320],{"class":699},[178,113248,930],{"class":195},[178,113250,847],{"class":319},[178,113252,113253,113255,113257,113259,113261,113264,113266,113268,113270,113272],{"class":180,"line":1014},[178,113254,938],{"class":699},[178,113256,941],{"class":195},[178,113258,944],{"class":319},[178,113260,2002],{"class":699},[178,113262,113263],{"class":188},"\"site not found: ",[178,113265,2836],{"class":195},[178,113267,81529],{"class":319},[178,113269,2885],{"class":195},[178,113271,2191],{"class":188},[178,113273,863],{"class":319},[178,113275,113276,113278],{"class":180,"line":1019},[178,113277,5862],{"class":699},[178,113279,113280],{"class":319}," data.site_xpos[site_id].copy()\n",[178,113282,113283],{"class":180,"line":1033},[178,113284,722],{"emptyLinePlaceholder":721},[178,113286,113287],{"class":180,"line":1046},[178,113288,722],{"emptyLinePlaceholder":721},[178,113290,113291,113293,113296],{"class":180,"line":1059},[178,113292,835],{"class":699},[178,113294,113295],{"class":184}," get_obs",[178,113297,113298],{"class":319},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[178,113300,113301,113304,113306,113309,113311],{"class":180,"line":1072},[178,113302,113303],{"class":319},"    tip ",[178,113305,330],{"class":699},[178,113307,113308],{"class":319}," site_position(model, data, ",[178,113310,112901],{"class":188},[178,113312,863],{"class":319},[178,113314,113315,113318,113320,113322,113325],{"class":180,"line":1077},[178,113316,113317],{"class":319},"    target ",[178,113319,330],{"class":699},[178,113321,113308],{"class":319},[178,113323,113324],{"class":188},"\"target\"",[178,113326,863],{"class":319},[178,113328,113329,113331],{"class":180,"line":1082},[178,113330,5862],{"class":699},[178,113332,113333],{"class":319}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[178,113335,113336],{"class":180,"line":1099},[178,113337,722],{"emptyLinePlaceholder":721},[178,113339,113340],{"class":180,"line":9806},[178,113341,722],{"emptyLinePlaceholder":721},[178,113343,113344,113346,113349,113352,113354],{"class":180,"line":9818},[178,113345,835],{"class":699},[178,113347,113348],{"class":184}," reward",[178,113350,113351],{"class":319},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[178,113353,1991],{"class":195},[178,113355,847],{"class":319},[178,113357,113358,113360,113362,113364,113366],{"class":180,"line":11477},[178,113359,113303],{"class":319},[178,113361,330],{"class":699},[178,113363,113308],{"class":319},[178,113365,112901],{"class":188},[178,113367,863],{"class":319},[178,113369,113370,113372,113374,113376,113378],{"class":180,"line":11502},[178,113371,113317],{"class":319},[178,113373,330],{"class":699},[178,113375,113308],{"class":319},[178,113377,113324],{"class":188},[178,113379,863],{"class":319},[178,113381,113382,113385,113387,113389,113391],{"class":180,"line":11525},[178,113383,113384],{"class":319},"    dist ",[178,113386,330],{"class":699},[178,113388,112966],{"class":319},[178,113390,2472],{"class":699},[178,113392,112971],{"class":319},[178,113394,113395,113398,113400,113403,113405],{"class":180,"line":11549},[178,113396,113397],{"class":319},"    control_cost ",[178,113399,330],{"class":699},[178,113401,113402],{"class":195}," 0.01",[178,113404,8287],{"class":699},[178,113406,113407],{"class":319}," np.sum(np.square(data.ctrl))\n",[178,113409,113410,113412,113414,113416,113418,113420,113422],{"class":180,"line":11554},[178,113411,5862],{"class":699},[178,113413,111162],{"class":195},[178,113415,944],{"class":319},[178,113417,2472],{"class":699},[178,113419,112961],{"class":319},[178,113421,2472],{"class":699},[178,113423,113424],{"class":319}," control_cost)\n",[178,113426,113427],{"class":180,"line":11559},[178,113428,722],{"emptyLinePlaceholder":721},[178,113430,113431],{"class":180,"line":11564},[178,113432,722],{"emptyLinePlaceholder":721},[178,113434,113435,113437,113439,113441,113443],{"class":180,"line":11573},[178,113436,835],{"class":699},[178,113438,838],{"class":184},[178,113440,841],{"class":319},[178,113442,844],{"class":195},[178,113444,847],{"class":319},[178,113446,113447,113449,113451,113453,113455],{"class":180,"line":11578},[178,113448,853],{"class":319},[178,113450,330],{"class":699},[178,113452,858],{"class":319},[178,113454,731],{"class":195},[178,113456,863],{"class":319},[178,113458,113459,113461,113463],{"class":180,"line":11584},[178,113460,869],{"class":319},[178,113462,330],{"class":699},[178,113464,874],{"class":319},[178,113466,113467,113469,113471],{"class":180,"line":11605},[178,113468,111518],{"class":319},[178,113470,330],{"class":699},[178,113472,106126],{"class":195},[178,113474,113475],{"class":180,"line":11611},[178,113476,722],{"emptyLinePlaceholder":721},[178,113478,113479,113481,113483,113485,113487,113489,113491],{"class":180,"line":11625},[178,113480,988],{"class":699},[178,113482,33351],{"class":319},[178,113484,994],{"class":699},[178,113486,997],{"class":195},[178,113488,944],{"class":319},[178,113490,66794],{"class":195},[178,113492,1005],{"class":319},[178,113494,113495],{"class":180,"line":11631},[178,113496,113497],{"class":319},"        mujoco.mj_forward(model, data)\n",[178,113499,113500,113503,113505,113507,113509],{"class":180,"line":11658},[178,113501,113502],{"class":319},"        tip ",[178,113504,330],{"class":699},[178,113506,113308],{"class":319},[178,113508,112901],{"class":188},[178,113510,863],{"class":319},[178,113512,113513,113516,113518,113520,113522],{"class":180,"line":11667},[178,113514,113515],{"class":319},"        target ",[178,113517,330],{"class":699},[178,113519,113308],{"class":319},[178,113521,113324],{"class":188},[178,113523,863],{"class":319},[178,113525,113526,113529,113531,113534,113536],{"class":180,"line":11673},[178,113527,113528],{"class":319},"        error ",[178,113530,330],{"class":699},[178,113532,113533],{"class":319}," target ",[178,113535,2472],{"class":699},[178,113537,113538],{"class":319}," tip\n",[178,113540,113541],{"class":180,"line":11681},[178,113542,722],{"emptyLinePlaceholder":721},[178,113544,113545,113547,113549,113551,113553,113556,113558,113560,113563,113565,113568,113570,113572,113574,113576],{"class":180,"line":11686},[178,113546,107982],{"class":319},[178,113548,2133],{"class":195},[178,113550,6214],{"class":319},[178,113552,330],{"class":699},[178,113554,113555],{"class":319}," np.clip(",[178,113557,106625],{"class":195},[178,113559,8287],{"class":699},[178,113561,113562],{"class":319}," error[",[178,113564,1669],{"class":195},[178,113566,113567],{"class":319},"], ",[178,113569,2472],{"class":699},[178,113571,104047],{"class":195},[178,113573,14196],{"class":319},[178,113575,104047],{"class":195},[178,113577,863],{"class":319},[178,113579,113580,113582,113584,113586,113588,113590,113592,113594,113596,113598,113600,113602,113604,113606,113608],{"class":180,"line":18362},[178,113581,107982],{"class":319},[178,113583,1665],{"class":195},[178,113585,6214],{"class":319},[178,113587,330],{"class":699},[178,113589,113555],{"class":319},[178,113591,106625],{"class":195},[178,113593,8287],{"class":699},[178,113595,113562],{"class":319},[178,113597,2133],{"class":195},[178,113599,113567],{"class":319},[178,113601,2472],{"class":699},[178,113603,104047],{"class":195},[178,113605,14196],{"class":319},[178,113607,104047],{"class":195},[178,113609,863],{"class":319},[178,113611,113612],{"class":180,"line":18368},[178,113613,722],{"emptyLinePlaceholder":721},[178,113615,113616],{"class":180,"line":18391},[178,113617,1011],{"class":319},[178,113619,113620,113622,113624],{"class":180,"line":18397},[178,113621,111662],{"class":319},[178,113623,11238],{"class":699},[178,113625,113626],{"class":319}," reward(model, data)\n",[178,113628,113629],{"class":180,"line":18420},[178,113630,722],{"emptyLinePlaceholder":721},[178,113632,113633,113635,113637,113639,113641,113643,113645],{"class":180,"line":18434},[178,113634,4280],{"class":699},[178,113636,33351],{"class":319},[178,113638,2268],{"class":699},[178,113640,7523],{"class":195},[178,113642,1091],{"class":699},[178,113644,930],{"class":195},[178,113646,847],{"class":319},[178,113648,113649,113652,113654],{"class":180,"line":18454},[178,113650,113651],{"class":319},"            obs ",[178,113653,330],{"class":699},[178,113655,113656],{"class":319}," get_obs(model, data)\n",[178,113658,113659,113661,113663,113665],{"class":180,"line":18460},[178,113660,36382],{"class":195},[178,113662,944],{"class":319},[178,113664,111696],{"class":188},[178,113666,113667],{"class":319},", step)\n",[178,113669,113670,113672,113674,113677,113680,113682],{"class":180,"line":18471},[178,113671,36382],{"class":195},[178,113673,944],{"class":319},[178,113675,113676],{"class":188},"\"  tip:\"",[178,113678,113679],{"class":319},", np.round(tip, ",[178,113681,2021],{"class":195},[178,113683,32239],{"class":319},[178,113685,113686,113688,113690,113693,113696,113698],{"class":180,"line":18494},[178,113687,36382],{"class":195},[178,113689,944],{"class":319},[178,113691,113692],{"class":188},"\"  target:\"",[178,113694,113695],{"class":319},", np.round(target, ",[178,113697,2021],{"class":195},[178,113699,32239],{"class":319},[178,113701,113702,113704,113706,113709,113712,113714],{"class":180,"line":18516},[178,113703,36382],{"class":195},[178,113705,944],{"class":319},[178,113707,113708],{"class":188},"\"  ctrl:\"",[178,113710,113711],{"class":319},", np.round(data.ctrl.copy(), ",[178,113713,2021],{"class":195},[178,113715,32239],{"class":319},[178,113717,113718,113720,113722,113725,113728,113730],{"class":180,"line":18521},[178,113719,36382],{"class":195},[178,113721,944],{"class":319},[178,113723,113724],{"class":188},"\"  obs_dim:\"",[178,113726,113727],{"class":319},", obs.shape[",[178,113729,2133],{"class":195},[178,113731,6428],{"class":319},[178,113733,113734],{"class":180,"line":18527},[178,113735,722],{"emptyLinePlaceholder":721},[178,113737,113738,113740,113742,113744,113746,113748,113750,113752],{"class":180,"line":18541},[178,113739,1022],{"class":195},[178,113741,944],{"class":319},[178,113743,111741],{"class":188},[178,113745,14196],{"class":319},[178,113747,33752],{"class":195},[178,113749,111748],{"class":319},[178,113751,2021],{"class":195},[178,113753,32239],{"class":319},[178,113755,113756,113758,113760,113763,113766,113768,113770,113772],{"class":180,"line":18554},[178,113757,1022],{"class":195},[178,113759,944],{"class":319},[178,113761,113762],{"class":188},"\"final tip:\"",[178,113764,113765],{"class":319},", np.round(site_position(model, data, ",[178,113767,112901],{"class":188},[178,113769,111710],{"class":319},[178,113771,2021],{"class":195},[178,113773,32239],{"class":319},[178,113775,113776,113778,113780,113783,113785,113787,113789,113791],{"class":180,"line":18559},[178,113777,1022],{"class":195},[178,113779,944],{"class":319},[178,113781,113782],{"class":188},"\"target:\"",[178,113784,113765],{"class":319},[178,113786,113324],{"class":188},[178,113788,111710],{"class":319},[178,113790,2021],{"class":195},[178,113792,32239],{"class":319},[178,113794,113795],{"class":180,"line":18573},[178,113796,722],{"emptyLinePlaceholder":721},[178,113798,113799],{"class":180,"line":18578},[178,113800,722],{"emptyLinePlaceholder":721},[178,113802,113803,113805,113807,113809,113811],{"class":180,"line":18584},[178,113804,1085],{"class":699},[178,113806,1088],{"class":195},[178,113808,1091],{"class":699},[178,113810,1094],{"class":188},[178,113812,847],{"class":319},[178,113814,113815],{"class":180,"line":18589},[178,113816,1102],{"class":319},[19,113818,1105],{},[154,113820,113822],{"className":172,"code":113821,"language":174,"meta":160,"style":160},"touch ch7_reacher.py\n",[70,113823,113824],{"__ignoreMap":160},[178,113825,113826,113828],{"class":180,"line":181},[178,113827,1115],{"class":184},[178,113829,113830],{"class":188}," ch7_reacher.py\n",[19,113832,111809],{},[154,113834,113836],{"className":172,"code":113835,"language":174,"meta":160,"style":160},"python ch7_reacher.py\n",[70,113837,113838],{"__ignoreMap":160},[178,113839,113840,113842],{"class":180,"line":181},[178,113841,692],{"class":184},[178,113843,113830],{"class":188},[387,113845,1135],{"id":1135},[19,113847,113848],{},"读取 site 坐标：",[154,113850,113852],{"className":690,"code":113851,"language":692,"meta":160,"style":160},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[70,113853,113854],{"__ignoreMap":160},[178,113855,113856,113858,113860,113862,113864],{"class":180,"line":181},[178,113857,835],{"class":699},[178,113859,113221],{"class":184},[178,113861,113224],{"class":319},[178,113863,3109],{"class":195},[178,113865,113229],{"class":319},[19,113867,113868],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,113870,111825],{},[154,113872,113874],{"className":690,"code":113873,"language":692,"meta":160,"style":160},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[70,113875,113876],{"__ignoreMap":160},[178,113877,113878,113880],{"class":180,"line":181},[178,113879,18804],{"class":699},[178,113881,113333],{"class":319},[19,113883,113884],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,113886,111150],{},[154,113888,113890],{"className":690,"code":113889,"language":692,"meta":160,"style":160},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[70,113891,113892,113904,113917],{"__ignoreMap":160},[178,113893,113894,113896,113898,113900,113902],{"class":180,"line":181},[178,113895,112961],{"class":319},[178,113897,330],{"class":699},[178,113899,112966],{"class":319},[178,113901,2472],{"class":699},[178,113903,112971],{"class":319},[178,113905,113906,113909,113911,113913,113915],{"class":180,"line":263},[178,113907,113908],{"class":319},"control_cost ",[178,113910,330],{"class":699},[178,113912,113402],{"class":195},[178,113914,8287],{"class":699},[178,113916,113407],{"class":319},[178,113918,113919,113921,113923,113925,113927,113929,113931],{"class":180,"line":274},[178,113920,18804],{"class":699},[178,113922,111162],{"class":195},[178,113924,944],{"class":319},[178,113926,2472],{"class":699},[178,113928,112961],{"class":319},[178,113930,2472],{"class":699},[178,113932,113424],{"class":319},[19,113934,113935],{},"奖励由两部分组成：",[26,113937,113938,113943],{},[29,113939,113940,113942],{},[70,113941,112988],{},"：末端离目标越远，奖励越低。",[29,113944,113945,113948],{},[70,113946,113947],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,113950,113951],{},"简单控制器：",[154,113953,113955],{"className":690,"code":113954,"language":692,"meta":160,"style":160},"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",[70,113956,113957,113970,114002],{"__ignoreMap":160},[178,113958,113959,113962,113964,113966,113968],{"class":180,"line":181},[178,113960,113961],{"class":319},"error ",[178,113963,330],{"class":699},[178,113965,113533],{"class":319},[178,113967,2472],{"class":699},[178,113969,113538],{"class":319},[178,113971,113972,113974,113976,113978,113980,113982,113984,113986,113988,113990,113992,113994,113996,113998,114000],{"class":180,"line":263},[178,113973,107236],{"class":319},[178,113975,2133],{"class":195},[178,113977,6214],{"class":319},[178,113979,330],{"class":699},[178,113981,113555],{"class":319},[178,113983,106625],{"class":195},[178,113985,8287],{"class":699},[178,113987,113562],{"class":319},[178,113989,1669],{"class":195},[178,113991,113567],{"class":319},[178,113993,2472],{"class":699},[178,113995,104047],{"class":195},[178,113997,14196],{"class":319},[178,113999,104047],{"class":195},[178,114001,863],{"class":319},[178,114003,114004,114006,114008,114010,114012,114014,114016,114018,114020,114022,114024,114026,114028,114030,114032],{"class":180,"line":274},[178,114005,107236],{"class":319},[178,114007,1665],{"class":195},[178,114009,6214],{"class":319},[178,114011,330],{"class":699},[178,114013,113555],{"class":319},[178,114015,106625],{"class":195},[178,114017,8287],{"class":699},[178,114019,113562],{"class":319},[178,114021,2133],{"class":195},[178,114023,113567],{"class":319},[178,114025,2472],{"class":699},[178,114027,104047],{"class":195},[178,114029,14196],{"class":319},[178,114031,104047],{"class":195},[178,114033,863],{"class":319},[19,114035,114036],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[387,114038,1222],{"id":1222},[154,114040,114041],{"className":690,"code":113851,"language":692,"meta":160,"style":160},[70,114042,114043],{"__ignoreMap":160},[178,114044,114045,114047,114049,114051,114053],{"class":180,"line":181},[178,114046,835],{"class":699},[178,114048,113221],{"class":184},[178,114050,113224],{"class":319},[178,114052,3109],{"class":195},[178,114054,113229],{"class":319},[19,114056,114057,114058,114060,114061,1815,114063,297],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[70,114059,81529],{}," 是 site 的名字，比如 ",[70,114062,112901],{},[70,114064,113324],{},[154,114066,114068],{"className":690,"code":114067,"language":692,"meta":160,"style":160},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[70,114069,114070],{"__ignoreMap":160},[178,114071,114072,114074,114076],{"class":180,"line":181},[178,114073,1172],{"class":319},[178,114075,330],{"class":699},[178,114077,113238],{"class":319},[19,114079,114080],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[154,114082,114084],{"className":690,"code":114083,"language":692,"meta":160,"style":160},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[70,114085,114086,114098],{"__ignoreMap":160},[178,114087,114088,114090,114092,114094,114096],{"class":180,"line":181},[178,114089,1085],{"class":699},[178,114091,957],{"class":319},[178,114093,320],{"class":699},[178,114095,930],{"class":195},[178,114097,847],{"class":319},[178,114099,114100,114102,114104,114106,114108,114110,114112,114114,114116,114118],{"class":180,"line":263},[178,114101,1439],{"class":699},[178,114103,941],{"class":195},[178,114105,944],{"class":319},[178,114107,2002],{"class":699},[178,114109,113263],{"class":188},[178,114111,2836],{"class":195},[178,114113,81529],{"class":319},[178,114115,2885],{"class":195},[178,114117,2191],{"class":188},[178,114119,863],{"class":319},[19,114121,114122,114123,114126,114127,114129],{},"如果 site 没找到，就主动报错。",[70,114124,114125],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[70,114128,81529],{}," 的值放进字符串里。",[154,114131,114133],{"className":690,"code":114132,"language":692,"meta":160,"style":160},"return data.site_xpos[site_id].copy()\n",[70,114134,114135],{"__ignoreMap":160},[178,114136,114137,114139],{"class":180,"line":181},[178,114138,18804],{"class":699},[178,114140,113280],{"class":319},[19,114142,114143,114144,114146,114147,114150],{},"返回这个 site 的世界坐标。",[70,114145,1218],{}," 里的每一行都是一个 site 的 ",[70,114148,114149],{},"(x, y, z)"," 坐标。",[154,114152,114154],{"className":690,"code":114153,"language":692,"meta":160,"style":160},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[70,114155,114156],{"__ignoreMap":160},[178,114157,114158,114160,114162],{"class":180,"line":181},[178,114159,835],{"class":699},[178,114161,113295],{"class":184},[178,114163,113298],{"class":319},[19,114165,114166],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[154,114168,114170],{"className":690,"code":114169,"language":692,"meta":160,"style":160},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[70,114171,114172,114184],{"__ignoreMap":160},[178,114173,114174,114176,114178,114180,114182],{"class":180,"line":181},[178,114175,112933],{"class":319},[178,114177,330],{"class":699},[178,114179,113308],{"class":319},[178,114181,112901],{"class":188},[178,114183,863],{"class":319},[178,114185,114186,114188,114190,114192,114194],{"class":180,"line":263},[178,114187,112943],{"class":319},[178,114189,330],{"class":699},[178,114191,113308],{"class":319},[178,114193,113324],{"class":188},[178,114195,863],{"class":319},[19,114197,114198],{},"分别读取末端点和目标点的世界坐标。",[154,114200,114201],{"className":690,"code":113873,"language":692,"meta":160,"style":160},[70,114202,114203],{"__ignoreMap":160},[178,114204,114205,114207],{"class":180,"line":181},[178,114206,18804],{"class":699},[178,114208,113333],{"class":319},[19,114210,114211],{},"把四部分拼成一个观测数组：",[154,114213,114216],{"className":114214,"code":114215,"language":159,"meta":160},[157],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[70,114217,114215],{"__ignoreMap":160},[154,114219,114221],{"className":690,"code":114220,"language":692,"meta":160,"style":160},"dist = np.linalg.norm(tip - target)\n",[70,114222,114223],{"__ignoreMap":160},[178,114224,114225,114227,114229,114231,114233],{"class":180,"line":181},[178,114226,112961],{"class":319},[178,114228,330],{"class":699},[178,114230,112966],{"class":319},[178,114232,2472],{"class":699},[178,114234,112971],{"class":319},[19,114236,114237,114238,114241,114242,114245],{},"计算 tip 到 target 的距离。",[70,114239,114240],{},"tip - target"," 得到一个三维向量，",[70,114243,114244],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,114247,528],{},[154,114249,114252],{"className":114250,"code":114251,"language":159,"meta":160},[157],"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",[70,114253,114251],{"__ignoreMap":160},[154,114255,114257],{"className":690,"code":114256,"language":692,"meta":160,"style":160},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[70,114258,114259],{"__ignoreMap":160},[178,114260,114261,114263,114265,114267,114269],{"class":180,"line":181},[178,114262,113908],{"class":319},[178,114264,330],{"class":699},[178,114266,113402],{"class":195},[178,114268,8287],{"class":699},[178,114270,113407],{"class":319},[19,114272,114273,114274,114277,114278,114281],{},"计算动作惩罚。",[70,114275,114276],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[70,114279,114280],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[154,114283,114285],{"className":690,"code":114284,"language":692,"meta":160,"style":160},"return float(-dist - control_cost)\n",[70,114286,114287],{"__ignoreMap":160},[178,114288,114289,114291,114293,114295,114297,114299,114301],{"class":180,"line":181},[178,114290,18804],{"class":699},[178,114292,111162],{"class":195},[178,114294,944],{"class":319},[178,114296,2472],{"class":699},[178,114298,112961],{"class":319},[178,114300,2472],{"class":699},[178,114302,113424],{"class":319},[19,114304,114305],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[154,114307,114308],{"className":690,"code":112168,"language":692,"meta":160,"style":160},[70,114309,114310],{"__ignoreMap":160},[178,114311,114312,114314,114316],{"class":180,"line":181},[178,114313,112175],{"class":319},[178,114315,330],{"class":699},[178,114317,106126],{"class":195},[19,114319,114320],{},"累计奖励变量，记录整个运行过程的总分。",[154,114322,114324],{"className":690,"code":114323,"language":692,"meta":160,"style":160},"for step in range(500):\n",[70,114325,114326],{"__ignoreMap":160},[178,114327,114328,114330,114332,114334,114336,114338,114340],{"class":180,"line":181},[178,114329,1474],{"class":699},[178,114331,33351],{"class":319},[178,114333,994],{"class":699},[178,114335,997],{"class":195},[178,114337,944],{"class":319},[178,114339,66794],{"class":195},[178,114341,1005],{"class":319},[19,114343,114344],{},"运行 500 个控制步。",[154,114346,114347],{"className":690,"code":105908,"language":692,"meta":160,"style":160},[70,114348,114349],{"__ignoreMap":160},[178,114350,114351],{"class":180,"line":181},[178,114352,105908],{"class":319},[19,114354,114355,114356,404,114358,114360],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[70,114357,679],{},[70,114359,682],{}," 是当前状态下的坐标。",[154,114362,114364],{"className":690,"code":114363,"language":692,"meta":160,"style":160},"error = target - tip\n",[70,114365,114366],{"__ignoreMap":160},[178,114367,114368,114370,114372,114374,114376],{"class":180,"line":181},[178,114369,113961],{"class":319},[178,114371,330],{"class":699},[178,114373,113533],{"class":319},[178,114375,2472],{"class":699},[178,114377,113538],{"class":319},[19,114379,114380],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[154,114382,114384],{"className":690,"code":114383,"language":692,"meta":160,"style":160},"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",[70,114385,114386,114418],{"__ignoreMap":160},[178,114387,114388,114390,114392,114394,114396,114398,114400,114402,114404,114406,114408,114410,114412,114414,114416],{"class":180,"line":181},[178,114389,107236],{"class":319},[178,114391,2133],{"class":195},[178,114393,6214],{"class":319},[178,114395,330],{"class":699},[178,114397,113555],{"class":319},[178,114399,106625],{"class":195},[178,114401,8287],{"class":699},[178,114403,113562],{"class":319},[178,114405,1669],{"class":195},[178,114407,113567],{"class":319},[178,114409,2472],{"class":699},[178,114411,104047],{"class":195},[178,114413,14196],{"class":319},[178,114415,104047],{"class":195},[178,114417,863],{"class":319},[178,114419,114420,114422,114424,114426,114428,114430,114432,114434,114436,114438,114440,114442,114444,114446,114448],{"class":180,"line":263},[178,114421,107236],{"class":319},[178,114423,1665],{"class":195},[178,114425,6214],{"class":319},[178,114427,330],{"class":699},[178,114429,113555],{"class":319},[178,114431,106625],{"class":195},[178,114433,8287],{"class":699},[178,114435,113562],{"class":319},[178,114437,2133],{"class":195},[178,114439,113567],{"class":319},[178,114441,2472],{"class":699},[178,114443,104047],{"class":195},[178,114445,14196],{"class":319},[178,114447,104047],{"class":195},[178,114449,863],{"class":319},[19,114451,114452,114453,114456],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[70,114454,114455],{},"error -> ctrl -> step"," 的流程。",[154,114458,114459],{"className":690,"code":105870,"language":692,"meta":160,"style":160},[70,114460,114461],{"__ignoreMap":160},[178,114462,114463],{"class":180,"line":181},[178,114464,105870],{"class":319},[19,114466,114467],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[154,114469,114471],{"className":690,"code":114470,"language":692,"meta":160,"style":160},"obs = get_obs(model, data)\n",[70,114472,114473],{"__ignoreMap":160},[178,114474,114475,114477,114479],{"class":180,"line":181},[178,114476,112219],{"class":319},[178,114478,330],{"class":699},[178,114480,113656],{"class":319},[19,114482,114483,114484,114487],{},"读取最新观测。后面打印 ",[70,114485,114486],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,114489,1570],{"id":1569},[19,114491,114492],{},"观测维度为:",[154,114494,114497],{"className":114495,"code":114496,"language":159,"meta":160},[157],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[70,114498,114496],{"__ignoreMap":160},[19,114500,114501],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,114503,114504],{},"程序每 100 步打印：",[154,114506,114509],{"className":114507,"code":114508,"language":159,"meta":160},[157],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[70,114510,114508],{"__ignoreMap":160},[19,114512,114513,114514,114516],{},"如果控制有效，你应该看到最终 ",[70,114515,679],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,114518,1654],{"id":1653},[26,114520,114521,114524,114527,114533,114539,114546,114556],{},[29,114522,114523],{},"修改目标点位置。",[29,114525,114526],{},"重新运行，观察最终 tip 是否变化。",[29,114528,114529,114530,114532],{},"把 gravity 改成 ",[70,114531,1758],{},"，观察控制是否变差。",[29,114534,112546,114535,112550,114537,297],{},[70,114536,103807],{},[70,114538,1669],{},[29,114540,1659,114541,1666,114543,114545],{},[70,114542,111961],{},[70,114544,108672],{},"，观察机械臂是否更难移动。",[29,114547,1659,114548,551,114550,1666,114552,114555],{},[70,114549,682],{},[70,114551,1704],{},[70,114553,114554],{},"0.2 0 0.6","，观察 reward 和 final tip。",[29,114557,114558],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,114560,1715],{"id":1714},[387,114562,114564],{"id":114563},"site-not-found",[70,114565,114566],{},"site not found",[19,114568,114569,114570,404,114573,297],{},"检查 XML 中是否有 ",[70,114571,114572],{},"site name=\"tip\"",[70,114574,114575],{},"site name=\"target\"",[387,114577,114578],{"id":114578},"机械臂完全不动",[19,114580,1745],{},[26,114582,114583,114588,114591,114596],{},[29,114584,114585,114587],{},[70,114586,103807],{}," 是否为 2",[29,114589,114590],{},"actuator 是否引用正确 joint",[29,114592,114593,114595],{},[70,114594,102768],{}," 是否被赋值",[29,114597,114598,114599],{},"是否执行了 ",[70,114600,102396],{},[387,114602,114603],{"id":114603},"控制效果不好",[19,114605,114606],{},"正常。本章重点不是控制器最优，而是任务结构:",[154,114608,114611],{"className":114609,"code":114610,"language":159,"meta":160},[157],"obs → action → mj_step → reward → next_obs\n",[70,114612,114610],{"__ignoreMap":160},[387,114614,114616],{"id":114615},"tip-坐标不变化","tip 坐标不变化",[19,114618,104210],{},[26,114620,114621,114626,114634,114643],{},[29,114622,114623,114624,297],{},"是否每步调用了 ",[70,114625,102396],{},[29,114627,114628,114629,404,114631,297],{},"是否写入了 ",[70,114630,107491],{},[70,114632,114633],{},"data.ctrl[1]",[29,114635,114636,114637,1258,114640,297],{},"actuator 是否正确引用 ",[70,114638,114639],{},"joint1",[70,114641,114642],{},"joint2",[29,114644,114645],{},"控制输入是否太小。",[387,114647,114648],{"id":114648},"目标点不会动",[19,114650,114651],{},"本章的 target 是固定 site：",[154,114653,114655],{"className":310,"code":114654,"language":312,"meta":160,"style":160},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[70,114656,114657],{"__ignoreMap":160},[178,114658,114659,114661,114663,114665,114667,114669,114671,114673,114676],{"class":180,"line":181},[178,114660,320],{"class":319},[178,114662,658],{"class":323},[178,114664,426],{"class":184},[178,114666,330],{"class":319},[178,114668,113324],{"class":188},[178,114670,434],{"class":184},[178,114672,330],{"class":319},[178,114674,114675],{"class":188},"\"0.5 0 0.4\"",[178,114677,114678],{"class":319}," ...\u002F>\n",[19,114680,114681,114682,114684],{},"它直接挂在 ",[70,114683,344],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[387,114686,114687],{"id":114687},"机械臂不像真实机械臂",[19,114689,114690],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,114692,1823],{"id":1822},[19,114694,114695],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,114697,114698],{},"核心公式：",[154,114700,114703],{"className":114701,"code":114702,"language":159,"meta":160},[157],"distance = ||tip - target||\nreward = -distance - action_cost\n",[70,114704,114702],{"__ignoreMap":160},[19,114706,114707],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[1853,114709,114710],{},"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":160,"searchDepth":263,"depth":263,"links":114712},[114713,114714,114715,114720,114724,114725,114726,114734],{"id":16,"depth":263,"text":17},{"id":165,"depth":263,"text":166},{"id":303,"depth":263,"text":304,"children":114716},[114717,114718,114719],{"id":112916,"depth":274,"text":112917},{"id":112992,"depth":274,"text":112992},{"id":113022,"depth":274,"text":113023},{"id":686,"depth":263,"text":687,"children":114721},[114722,114723],{"id":1135,"depth":274,"text":1135},{"id":1222,"depth":274,"text":1222},{"id":1569,"depth":263,"text":1570},{"id":1653,"depth":263,"text":1654},{"id":1714,"depth":263,"text":1715,"children":114727},[114728,114729,114730,114731,114732,114733],{"id":114563,"depth":274,"text":114566},{"id":114578,"depth":274,"text":114578},{"id":114603,"depth":274,"text":114603},{"id":114615,"depth":274,"text":114616},{"id":114648,"depth":274,"text":114648},{"id":114687,"depth":274,"text":114687},{"id":1822,"depth":263,"text":1823},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":112720,"description":160},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":114741,"title":114742,"body":114743,"description":160,"extension":1880,"meta":118205,"navigation":721,"path":118206,"seo":118207,"stem":118208,"__hash__":118209},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":114744,"toc":118176},[114745,114748,114750,114753,114756,114781,114784,114790,114793,114799,114801,114803,114827,114829,114847,114849,114892,114894,114921,114923,114926,114978,114981,114987,114996,114999,115037,115040,115079,115082,115090,115097,115100,115106,115108,115162,115169,115214,115217,115221,115237,115247,115249,116510,116512,116524,116526,116537,116539,116542,116563,116566,116569,116602,116608,116611,116644,116647,116650,116691,116696,116710,116713,116726,116731,116754,116756,116771,116781,116796,116803,116823,116838,116856,116859,116876,116884,116900,116906,116938,116951,116983,116993,117028,117042,117088,117102,117144,117155,117168,117174,117207,117210,117237,117247,117287,117297,117314,117321,117339,117342,117383,117396,117411,117414,117437,117440,117452,117455,117474,117479,117500,117503,117518,117521,117555,117567,117582,117585,117610,117613,117632,117635,117667,117670,117694,117700,117730,117737,117750,117753,117755,117757,117763,117766,117769,117781,117784,117786,117840,117842,117846,117852,117861,117864,117871,117873,117896,117899,117903,117905,117923,117929,117931,117964,117967,117973,117977,117980,118000,118005,118009,118016,118036,118041,118045,118048,118068,118071,118157,118161,118164,118170,118173],[10,114746,114742],{"id":114747},"_8gymnasium-风格强化学习接口基础",[14,114749,17],{"id":16},[19,114751,114752],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,114754,114755],{},"你将实现:",[154,114757,114759],{"className":690,"code":114758,"language":692,"meta":160,"style":160},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[70,114760,114761,114771],{"__ignoreMap":160},[178,114762,114763,114766,114768],{"class":180,"line":181},[178,114764,114765],{"class":319},"obs, info ",[178,114767,330],{"class":699},[178,114769,114770],{"class":319}," env.reset()\n",[178,114772,114773,114776,114778],{"class":180,"line":263},[178,114774,114775],{"class":319},"obs, reward, terminated, truncated, info ",[178,114777,330],{"class":699},[178,114779,114780],{"class":319}," env.step(action)\n",[19,114782,114783],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,114785,114786,114787,114789],{},"前面章节的代码都是“脚本式”的：在 ",[70,114788,103944],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,114791,114792],{},"可以先记住 Gymnasium 环境的核心交互：",[154,114794,114797],{"className":114795,"code":114796,"language":159,"meta":160},[157],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[70,114798,114796],{"__ignoreMap":160},[14,114800,166],{"id":165},[19,114802,169],{},[154,114804,114805],{"className":172,"code":105753,"language":174,"meta":160,"style":160},[70,114806,114807],{"__ignoreMap":160},[178,114808,114809,114811,114813,114815,114817,114819,114821,114823,114825],{"class":180,"line":181},[178,114810,185],{"class":184},[178,114812,189],{"class":188},[178,114814,192],{"class":188},[178,114816,196],{"class":195},[178,114818,105768],{"class":188},[178,114820,102505],{"class":188},[178,114822,199],{"class":188},[178,114824,202],{"class":188},[178,114826,105777],{"class":188},[19,114828,211],{},[154,114830,114832],{"className":172,"code":114831,"language":174,"meta":160,"style":160},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[70,114833,114834],{"__ignoreMap":160},[178,114835,114836,114838,114840,114842,114844],{"class":180,"line":181},[178,114837,221],{"class":184},[178,114839,192],{"class":188},[178,114841,226],{"class":188},[178,114843,109076],{"class":188},[178,114845,114846],{"class":188}," gymnasium\n",[19,114848,232],{},[154,114850,114852],{"className":172,"code":114851,"language":174,"meta":160,"style":160},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[70,114853,114854,114871,114880],{"__ignoreMap":160},[178,114855,114856,114858,114860,114862,114865,114867,114869],{"class":180,"line":181},[178,114857,242],{"class":184},[178,114859,245],{"class":188},[178,114861,248],{"class":195},[178,114863,114864],{"class":188}," mujoco-gym-api",[178,114866,254],{"class":188},[178,114868,257],{"class":195},[178,114870,260],{"class":195},[178,114872,114873,114875,114877],{"class":180,"line":263},[178,114874,242],{"class":184},[178,114876,268],{"class":188},[178,114878,114879],{"class":188}," mujoco-gym-api\n",[178,114881,114882,114884,114886,114888,114890],{"class":180,"line":274},[178,114883,221],{"class":184},[178,114885,192],{"class":188},[178,114887,226],{"class":188},[178,114889,109076],{"class":188},[178,114891,114846],{"class":188},[19,114893,285],{},[26,114895,114896,114906,114909,114915],{},[29,114897,114898,114899,114902,114903,297],{},"本章使用 ",[70,114900,114901],{},"gymnasium","，不是旧版 ",[70,114904,114905],{},"gym",[29,114907,114908],{},"Gymnasium API 与旧 Gym API 有差异。",[29,114910,114911,114912,297],{},"旧 Gym 常见返回值是 4 个: ",[70,114913,114914],{},"obs, reward, done, info",[29,114916,114917,114918,297],{},"Gymnasium 返回值是 5 个: ",[70,114919,114920],{},"obs, reward, terminated, truncated, info",[14,114922,304],{"id":303},[19,114924,114925],{},"强化学习环境接口包含:",[45,114927,114928,114937],{},[48,114929,114930],{},[51,114931,114932,114935],{},[54,114933,114934],{"align":56},"方法",[54,114936,60],{"align":56},[62,114938,114939,114949,114959,114969],{},[51,114940,114941,114946],{},[67,114942,114943],{"align":56},[70,114944,114945],{},"reset()",[67,114947,114948],{"align":56},"重置环境",[51,114950,114951,114956],{},[67,114952,114953],{"align":56},[70,114954,114955],{},"step(action)",[67,114957,114958],{"align":56},"执行动作",[51,114960,114961,114966],{},[67,114962,114963],{"align":56},[70,114964,114965],{},"observation_space",[67,114967,114968],{"align":56},"观测空间",[51,114970,114971,114976],{},[67,114972,114973],{"align":56},[70,114974,114975],{},"action_space",[67,114977,25413],{"align":56},[19,114979,114980],{},"一个最小环境需要完成:",[154,114982,114985],{"className":114983,"code":114984,"language":159,"meta":160},[157],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[70,114986,114984],{"__ignoreMap":160},[387,114988,114990,404,114993,106003],{"id":114989},"terminated-和-truncated-的区别",[70,114991,114992],{},"terminated",[70,114994,114995],{},"truncated",[19,114997,114998],{},"Gymnasium 把“结束”拆成两个概念：",[45,115000,115001,115011],{},[48,115002,115003],{},[51,115004,115005,115007,115009],{},[54,115006,105939],{"align":56},[54,115008,573],{"align":56},[54,115010,22945],{"align":56},[62,115012,115013,115025],{},[51,115014,115015,115019,115022],{},[67,115016,115017],{"align":56},[70,115018,114992],{},[67,115020,115021],{"align":56},"任务自然结束",[67,115023,115024],{"align":56},"机械臂到达目标、机器人摔倒",[51,115026,115027,115031,115034],{},[67,115028,115029],{"align":56},[70,115030,114995],{},[67,115032,115033],{"align":56},"因外部限制截断",[67,115035,115036],{"align":56},"达到最大步数、时间限制",[19,115038,115039],{},"本章中：",[154,115041,115043],{"className":690,"code":115042,"language":692,"meta":160,"style":160},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[70,115044,115045,115060],{"__ignoreMap":160},[178,115046,115047,115050,115052,115055,115057],{"class":180,"line":181},[178,115048,115049],{"class":319},"terminated ",[178,115051,330],{"class":699},[178,115053,115054],{"class":319}," dist ",[178,115056,320],{"class":699},[178,115058,115059],{"class":195}," 0.05\n",[178,115061,115062,115065,115067,115069,115072,115074,115076],{"class":180,"line":263},[178,115063,115064],{"class":319},"truncated ",[178,115066,330],{"class":699},[178,115068,40605],{"class":195},[178,115070,115071],{"class":319},".steps ",[178,115073,3505],{"class":699},[178,115075,40605],{"class":195},[178,115077,115078],{"class":319},".max_steps\n",[19,115080,115081],{},"也就是：",[26,115083,115084,115087],{},[29,115085,115086],{},"末端距离目标小于 0.05，任务成功结束。",[29,115088,115089],{},"步数超过上限，episode 被截断。",[387,115091,115093,404,115095],{"id":115092},"observation_space-和-action_space",[70,115094,114965],{},[70,115096,114975],{},[19,115098,115099],{},"这两个对象告诉算法：",[154,115101,115104],{"className":115102,"code":115103,"language":159,"meta":160},[157],"观测长什么样\n动作允许多大\n",[70,115105,115103],{"__ignoreMap":160},[19,115107,528],{},[154,115109,115111],{"className":690,"code":115110,"language":692,"meta":160,"style":160},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[70,115112,115113],{"__ignoreMap":160},[178,115114,115115,115117,115120,115122,115125,115128,115131,115133,115135,115138,115140,115142,115144,115146,115148,115150,115152,115155,115157,115159],{"class":180,"line":181},[178,115116,32564],{"class":195},[178,115118,115119],{"class":319},".action_space ",[178,115121,330],{"class":699},[178,115123,115124],{"class":319}," spaces.Box(",[178,115126,115127],{"class":6985},"low",[178,115129,115130],{"class":699},"=-",[178,115132,104047],{"class":195},[178,115134,14196],{"class":319},[178,115136,115137],{"class":6985},"high",[178,115139,330],{"class":699},[178,115141,104047],{"class":195},[178,115143,14196],{"class":319},[178,115145,97676],{"class":6985},[178,115147,330],{"class":699},[178,115149,944],{"class":319},[178,115151,1669],{"class":195},[178,115153,115154],{"class":319},",), ",[178,115156,95215],{"class":6985},[178,115158,330],{"class":699},[178,115160,115161],{"class":319},"np.float32)\n",[19,115163,115164,115165,115168],{},"表示动作是 2 维数组，每个值都在 ",[70,115166,115167],{},"[-1, 1]"," 范围内。",[154,115170,115172],{"className":690,"code":115171,"language":692,"meta":160,"style":160},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[70,115173,115174],{"__ignoreMap":160},[178,115175,115176,115178,115181,115183,115185,115187,115189,115192,115194,115196,115198,115200,115202,115204,115206,115208,115210,115212],{"class":180,"line":181},[178,115177,32564],{"class":195},[178,115179,115180],{"class":319},".observation_space ",[178,115182,330],{"class":699},[178,115184,115124],{"class":319},[178,115186,115127],{"class":6985},[178,115188,115130],{"class":699},[178,115190,115191],{"class":319},"np.inf, ",[178,115193,115137],{"class":6985},[178,115195,330],{"class":699},[178,115197,115191],{"class":319},[178,115199,97676],{"class":6985},[178,115201,330],{"class":699},[178,115203,944],{"class":319},[178,115205,2386],{"class":195},[178,115207,115154],{"class":319},[178,115209,95215],{"class":6985},[178,115211,330],{"class":699},[178,115213,115161],{"class":319},[19,115215,115216],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[387,115218,115220],{"id":115219},"frame_skip-是什么","frame_skip 是什么",[154,115222,115224],{"className":690,"code":115223,"language":692,"meta":160,"style":160},"self.frame_skip = 5\n",[70,115225,115226],{"__ignoreMap":160},[178,115227,115228,115230,115233,115235],{"class":180,"line":181},[178,115229,32564],{"class":195},[178,115231,115232],{"class":319},".frame_skip ",[178,115234,330],{"class":699},[178,115236,56148],{"class":195},[19,115238,115239,115240,115243,115244,115246],{},"表示外部调用一次 ",[70,115241,115242],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[70,115245,1818],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115248,687],{"id":686},[154,115250,115252],{"className":690,"code":115251,"language":692,"meta":160,"style":160},"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",[70,115253,115254,115266,115272,115282,115293,115297,115301,115309,115314,115318,115322,115326,115330,115334,115338,115342,115347,115351,115355,115359,115364,115368,115372,115376,115380,115384,115388,115392,115396,115400,115404,115408,115412,115416,115434,115449,115453,115466,115476,115491,115508,115512,115533,115552,115577,115591,115595,115605,115617,115627,115631,115673,115711,115715,115725,115741,115756,115775,115782,115786,115799,115814,115829,115842,115861,115877,115881,115922,115937,115952,115956,115995,116006,116019,116023,116033,116042,116046,116056,116071,116089,116093,116104,116121,116134,116138,116148,116152,116163,116174,116178,116192,116206,116222,116226,116239,116256,116271,116278,116282,116286,116298,116308,116326,116338,116350,116354,116362,116378,116387,116396,116404,116446,116459,116464,116468,116486,116490,116494,116506],{"__ignoreMap":160},[178,115255,115256,115258,115261,115263],{"class":180,"line":181},[178,115257,700],{"class":699},[178,115259,115260],{"class":319}," gymnasium ",[178,115262,713],{"class":699},[178,115264,115265],{"class":319}," gym\n",[178,115267,115268,115270],{"class":180,"line":263},[178,115269,700],{"class":699},[178,115271,703],{"class":319},[178,115273,115274,115276,115278,115280],{"class":180,"line":274},[178,115275,700],{"class":699},[178,115277,710],{"class":319},[178,115279,713],{"class":699},[178,115281,716],{"class":319},[178,115283,115284,115286,115288,115290],{"class":180,"line":354},[178,115285,32479],{"class":699},[178,115287,115260],{"class":319},[178,115289,700],{"class":699},[178,115291,115292],{"class":319}," spaces\n",[178,115294,115295],{"class":180,"line":364},[178,115296,722],{"emptyLinePlaceholder":721},[178,115298,115299],{"class":180,"line":740},[178,115300,722],{"emptyLinePlaceholder":721},[178,115302,115303,115305,115307],{"class":180,"line":746},[178,115304,731],{"class":195},[178,115306,734],{"class":699},[178,115308,737],{"class":188},[178,115310,115311],{"class":180,"line":752},[178,115312,115313],{"class":188},"\u003Cmujoco model=\"gym_reacher\">\n",[178,115315,115316],{"class":180,"line":757},[178,115317,113103],{"class":188},[178,115319,115320],{"class":180,"line":763},[178,115321,722],{"emptyLinePlaceholder":721},[178,115323,115324],{"class":180,"line":769},[178,115325,760],{"class":188},[178,115327,115328],{"class":180,"line":774},[178,115329,113121],{"class":188},[178,115331,115332],{"class":180,"line":780},[178,115333,722],{"emptyLinePlaceholder":721},[178,115335,115336],{"class":180,"line":786},[178,115337,113130],{"class":188},[178,115339,115340],{"class":180,"line":792},[178,115341,113135],{"class":188},[178,115343,115344],{"class":180,"line":798},[178,115345,115346],{"class":188},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[178,115348,115349],{"class":180,"line":804},[178,115350,722],{"emptyLinePlaceholder":721},[178,115352,115353],{"class":180,"line":810},[178,115354,113149],{"class":188},[178,115356,115357],{"class":180,"line":816},[178,115358,113154],{"class":188},[178,115360,115361],{"class":180,"line":822},[178,115362,115363],{"class":188},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[178,115365,115366],{"class":180,"line":827},[178,115367,113164],{"class":188},[178,115369,115370],{"class":180,"line":832},[178,115371,107803],{"class":188},[178,115373,115374],{"class":180,"line":850},[178,115375,801],{"class":188},[178,115377,115378],{"class":180,"line":866},[178,115379,807],{"class":188},[178,115381,115382],{"class":180,"line":877},[178,115383,722],{"emptyLinePlaceholder":721},[178,115385,115386],{"class":180,"line":882},[178,115387,107820],{"class":188},[178,115389,115390],{"class":180,"line":898},[178,115391,113189],{"class":188},[178,115393,115394],{"class":180,"line":914},[178,115395,113194],{"class":188},[178,115397,115398],{"class":180,"line":919},[178,115399,107830],{"class":188},[178,115401,115402],{"class":180,"line":935},[178,115403,813],{"class":188},[178,115405,115406],{"class":180,"line":952},[178,115407,819],{"class":188},[178,115409,115410],{"class":180,"line":966},[178,115411,722],{"emptyLinePlaceholder":721},[178,115413,115414],{"class":180,"line":980},[178,115415,722],{"emptyLinePlaceholder":721},[178,115417,115418,115420,115423,115425,115427,115429,115432],{"class":180,"line":985},[178,115419,16453],{"class":699},[178,115421,115422],{"class":184}," ReacherEnv",[178,115424,944],{"class":319},[178,115426,114905],{"class":184},[178,115428,2498],{"class":319},[178,115430,115431],{"class":184},"Env",[178,115433,1005],{"class":319},[178,115435,115436,115439,115441,115443,115446],{"class":180,"line":1008},[178,115437,115438],{"class":319},"    metadata ",[178,115440,330],{"class":699},[178,115442,6219],{"class":319},[178,115444,115445],{"class":188},"\"render_modes\"",[178,115447,115448],{"class":319},": []}\n",[178,115450,115451],{"class":180,"line":1014},[178,115452,722],{"emptyLinePlaceholder":721},[178,115454,115455,115457,115459,115462,115464],{"class":180,"line":1019},[178,115456,32542],{"class":699},[178,115458,32545],{"class":195},[178,115460,115461],{"class":319},"(self) -> ",[178,115463,844],{"class":195},[178,115465,847],{"class":319},[178,115467,115468,115470,115472,115474],{"class":180,"line":1033},[178,115469,32558],{"class":195},[178,115471,19019],{"class":319},[178,115473,32570],{"class":195},[178,115475,3760],{"class":319},[178,115477,115478,115480,115483,115485,115487,115489],{"class":180,"line":1046},[178,115479,32586],{"class":195},[178,115481,115482],{"class":319},".model ",[178,115484,330],{"class":699},[178,115486,858],{"class":319},[178,115488,731],{"class":195},[178,115490,863],{"class":319},[178,115492,115493,115495,115498,115500,115503,115505],{"class":180,"line":1059},[178,115494,32586],{"class":195},[178,115496,115497],{"class":319},".data ",[178,115499,330],{"class":699},[178,115501,115502],{"class":319}," mujoco.MjData(",[178,115504,32564],{"class":195},[178,115506,115507],{"class":319},".model)\n",[178,115509,115510],{"class":180,"line":1072},[178,115511,722],{"emptyLinePlaceholder":721},[178,115513,115514,115516,115519,115521,115524,115526,115529,115531],{"class":180,"line":1077},[178,115515,32586],{"class":195},[178,115517,115518],{"class":319},".tip_site_id ",[178,115520,330],{"class":699},[178,115522,115523],{"class":319}," mujoco.mj_name2id(",[178,115525,32564],{"class":195},[178,115527,115528],{"class":319},".model, mujoco.mjtObj.mjOBJ_SITE, ",[178,115530,112901],{"class":188},[178,115532,863],{"class":319},[178,115534,115535,115537,115540,115542,115544,115546,115548,115550],{"class":180,"line":1082},[178,115536,32586],{"class":195},[178,115538,115539],{"class":319},".target_site_id ",[178,115541,330],{"class":699},[178,115543,115523],{"class":319},[178,115545,32564],{"class":195},[178,115547,115528],{"class":319},[178,115549,113324],{"class":188},[178,115551,863],{"class":319},[178,115553,115554,115556,115558,115560,115562,115564,115567,115569,115571,115573,115575],{"class":180,"line":1099},[178,115555,4280],{"class":699},[178,115557,40605],{"class":195},[178,115559,115518],{"class":319},[178,115561,320],{"class":699},[178,115563,930],{"class":195},[178,115565,115566],{"class":699}," or",[178,115568,40605],{"class":195},[178,115570,115539],{"class":319},[178,115572,320],{"class":699},[178,115574,930],{"class":195},[178,115576,847],{"class":319},[178,115578,115579,115582,115584,115586,115589],{"class":180,"line":9806},[178,115580,115581],{"class":699},"            raise",[178,115583,941],{"class":195},[178,115585,944],{"class":319},[178,115587,115588],{"class":188},"\"required sites not found\"",[178,115590,863],{"class":319},[178,115592,115593],{"class":180,"line":9818},[178,115594,722],{"emptyLinePlaceholder":721},[178,115596,115597,115599,115601,115603],{"class":180,"line":11477},[178,115598,32586],{"class":195},[178,115600,115232],{"class":319},[178,115602,330],{"class":699},[178,115604,56148],{"class":195},[178,115606,115607,115609,115612,115614],{"class":180,"line":11502},[178,115608,32586],{"class":195},[178,115610,115611],{"class":319},".max_steps ",[178,115613,330],{"class":699},[178,115615,115616],{"class":195}," 200\n",[178,115618,115619,115621,115623,115625],{"class":180,"line":11525},[178,115620,32586],{"class":195},[178,115622,115071],{"class":319},[178,115624,330],{"class":699},[178,115626,49065],{"class":195},[178,115628,115629],{"class":180,"line":11549},[178,115630,722],{"emptyLinePlaceholder":721},[178,115632,115633,115635,115637,115639,115641,115643,115645,115647,115649,115651,115653,115655,115657,115659,115661,115663,115665,115667,115669,115671],{"class":180,"line":11554},[178,115634,32586],{"class":195},[178,115636,115119],{"class":319},[178,115638,330],{"class":699},[178,115640,115124],{"class":319},[178,115642,115127],{"class":6985},[178,115644,115130],{"class":699},[178,115646,104047],{"class":195},[178,115648,14196],{"class":319},[178,115650,115137],{"class":6985},[178,115652,330],{"class":699},[178,115654,104047],{"class":195},[178,115656,14196],{"class":319},[178,115658,97676],{"class":6985},[178,115660,330],{"class":699},[178,115662,944],{"class":319},[178,115664,1669],{"class":195},[178,115666,115154],{"class":319},[178,115668,95215],{"class":6985},[178,115670,330],{"class":699},[178,115672,115161],{"class":319},[178,115674,115675,115677,115679,115681,115683,115685,115687,115689,115691,115693,115695,115697,115699,115701,115703,115705,115707,115709],{"class":180,"line":11559},[178,115676,32586],{"class":195},[178,115678,115180],{"class":319},[178,115680,330],{"class":699},[178,115682,115124],{"class":319},[178,115684,115127],{"class":6985},[178,115686,115130],{"class":699},[178,115688,115191],{"class":319},[178,115690,115137],{"class":6985},[178,115692,330],{"class":699},[178,115694,115191],{"class":319},[178,115696,97676],{"class":6985},[178,115698,330],{"class":699},[178,115700,944],{"class":319},[178,115702,2386],{"class":195},[178,115704,115154],{"class":319},[178,115706,95215],{"class":6985},[178,115708,330],{"class":699},[178,115710,115161],{"class":319},[178,115712,115713],{"class":180,"line":11564},[178,115714,722],{"emptyLinePlaceholder":721},[178,115716,115717,115719,115722],{"class":180,"line":11573},[178,115718,32542],{"class":699},[178,115720,115721],{"class":184}," _get_obs",[178,115723,115724],{"class":319},"(self) -> np.ndarray:\n",[178,115726,115727,115729,115731,115733,115736,115738],{"class":180,"line":11578},[178,115728,113502],{"class":319},[178,115730,330],{"class":699},[178,115732,40605],{"class":195},[178,115734,115735],{"class":319},".data.site_xpos[",[178,115737,32564],{"class":195},[178,115739,115740],{"class":319},".tip_site_id].copy()\n",[178,115742,115743,115745,115747,115749,115751,115753],{"class":180,"line":11584},[178,115744,113515],{"class":319},[178,115746,330],{"class":699},[178,115748,40605],{"class":195},[178,115750,115735],{"class":319},[178,115752,32564],{"class":195},[178,115754,115755],{"class":319},".target_site_id].copy()\n",[178,115757,115758,115760,115762,115765,115767,115770,115772],{"class":180,"line":11605},[178,115759,111547],{"class":319},[178,115761,330],{"class":699},[178,115763,115764],{"class":319}," np.concatenate([",[178,115766,32564],{"class":195},[178,115768,115769],{"class":319},".data.qpos.copy(), ",[178,115771,32564],{"class":195},[178,115773,115774],{"class":319},".data.qvel.copy(), tip, target])\n",[178,115776,115777,115779],{"class":180,"line":11611},[178,115778,16511],{"class":699},[178,115780,115781],{"class":319}," obs.astype(np.float32)\n",[178,115783,115784],{"class":180,"line":11625},[178,115785,722],{"emptyLinePlaceholder":721},[178,115787,115788,115790,115793,115795,115797],{"class":180,"line":11631},[178,115789,32542],{"class":699},[178,115791,115792],{"class":184}," _get_reward",[178,115794,115461],{"class":319},[178,115796,1991],{"class":195},[178,115798,847],{"class":319},[178,115800,115801,115803,115805,115807,115809,115811],{"class":180,"line":11658},[178,115802,113502],{"class":319},[178,115804,330],{"class":699},[178,115806,40605],{"class":195},[178,115808,115735],{"class":319},[178,115810,32564],{"class":195},[178,115812,115813],{"class":319},".tip_site_id]\n",[178,115815,115816,115818,115820,115822,115824,115826],{"class":180,"line":11667},[178,115817,113515],{"class":319},[178,115819,330],{"class":699},[178,115821,40605],{"class":195},[178,115823,115735],{"class":319},[178,115825,32564],{"class":195},[178,115827,115828],{"class":319},".target_site_id]\n",[178,115830,115831,115834,115836,115838,115840],{"class":180,"line":11673},[178,115832,115833],{"class":319},"        dist ",[178,115835,330],{"class":699},[178,115837,112966],{"class":319},[178,115839,2472],{"class":699},[178,115841,112971],{"class":319},[178,115843,115844,115847,115849,115851,115853,115856,115858],{"class":180,"line":11681},[178,115845,115846],{"class":319},"        control_cost ",[178,115848,330],{"class":699},[178,115850,113402],{"class":195},[178,115852,8287],{"class":699},[178,115854,115855],{"class":319}," np.sum(np.square(",[178,115857,32564],{"class":195},[178,115859,115860],{"class":319},".data.ctrl))\n",[178,115862,115863,115865,115867,115869,115871,115873,115875],{"class":180,"line":11686},[178,115864,16511],{"class":699},[178,115866,111162],{"class":195},[178,115868,944],{"class":319},[178,115870,2472],{"class":699},[178,115872,112961],{"class":319},[178,115874,2472],{"class":699},[178,115876,113424],{"class":319},[178,115878,115879],{"class":180,"line":18362},[178,115880,722],{"emptyLinePlaceholder":721},[178,115882,115883,115885,115888,115891,115893,115896,115898,115900,115902,115904,115906,115909,115912,115914,115916,115918,115920],{"class":180,"line":18368},[178,115884,32542],{"class":699},[178,115886,115887],{"class":184}," reset",[178,115889,115890],{"class":319},"(self, ",[178,115892,2395],{"class":699},[178,115894,115895],{"class":319},", seed: ",[178,115897,1956],{"class":195},[178,115899,26862],{"class":699},[178,115901,40665],{"class":195},[178,115903,734],{"class":699},[178,115905,40665],{"class":195},[178,115907,115908],{"class":319},", options: ",[178,115910,115911],{"class":195},"dict",[178,115913,26862],{"class":699},[178,115915,40665],{"class":195},[178,115917,734],{"class":699},[178,115919,40665],{"class":195},[178,115921,1005],{"class":319},[178,115923,115924,115926,115929,115932,115934],{"class":180,"line":18391},[178,115925,32558],{"class":195},[178,115927,115928],{"class":319},"().reset(",[178,115930,115931],{"class":6985},"seed",[178,115933,330],{"class":699},[178,115935,115936],{"class":319},"seed)\n",[178,115938,115939,115942,115944,115947,115949],{"class":180,"line":18397},[178,115940,115941],{"class":319},"        mujoco.mj_resetData(",[178,115943,32564],{"class":195},[178,115945,115946],{"class":319},".model, ",[178,115948,32564],{"class":195},[178,115950,115951],{"class":319},".data)\n",[178,115953,115954],{"class":180,"line":18420},[178,115955,722],{"emptyLinePlaceholder":721},[178,115957,115958,115960,115963,115965,115967,115970,115972,115974,115976,115978,115980,115982,115984,115986,115988,115990,115992],{"class":180,"line":18434},[178,115959,32586],{"class":195},[178,115961,115962],{"class":319},".data.qpos[:] ",[178,115964,330],{"class":699},[178,115966,40605],{"class":195},[178,115968,115969],{"class":319},".np_random.uniform(",[178,115971,115127],{"class":6985},[178,115973,115130],{"class":699},[178,115975,87925],{"class":195},[178,115977,14196],{"class":319},[178,115979,115137],{"class":6985},[178,115981,330],{"class":699},[178,115983,87925],{"class":195},[178,115985,14196],{"class":319},[178,115987,554],{"class":6985},[178,115989,330],{"class":699},[178,115991,32564],{"class":195},[178,115993,115994],{"class":319},".model.nq)\n",[178,115996,115997,115999,116002,116004],{"class":180,"line":18454},[178,115998,32586],{"class":195},[178,116000,116001],{"class":319},".data.qvel[:] ",[178,116003,330],{"class":699},[178,116005,106126],{"class":195},[178,116007,116008,116011,116013,116015,116017],{"class":180,"line":18460},[178,116009,116010],{"class":319},"        mujoco.mj_forward(",[178,116012,32564],{"class":195},[178,116014,115946],{"class":319},[178,116016,32564],{"class":195},[178,116018,115951],{"class":319},[178,116020,116021],{"class":180,"line":18471},[178,116022,722],{"emptyLinePlaceholder":721},[178,116024,116025,116027,116029,116031],{"class":180,"line":18494},[178,116026,32586],{"class":195},[178,116028,115071],{"class":319},[178,116030,330],{"class":699},[178,116032,49065],{"class":195},[178,116034,116035,116037,116039],{"class":180,"line":18516},[178,116036,16511],{"class":699},[178,116038,40605],{"class":195},[178,116040,116041],{"class":319},"._get_obs(), {}\n",[178,116043,116044],{"class":180,"line":18521},[178,116045,722],{"emptyLinePlaceholder":721},[178,116047,116048,116050,116053],{"class":180,"line":18527},[178,116049,32542],{"class":699},[178,116051,116052],{"class":184}," step",[178,116054,116055],{"class":319},"(self, action):\n",[178,116057,116058,116060,116062,116065,116067,116069],{"class":180,"line":18541},[178,116059,111587],{"class":319},[178,116061,330],{"class":699},[178,116063,116064],{"class":319}," np.asarray(action, ",[178,116066,95215],{"class":6985},[178,116068,330],{"class":699},[178,116070,115161],{"class":319},[178,116072,116073,116075,116077,116079,116081,116084,116086],{"class":180,"line":18554},[178,116074,111587],{"class":319},[178,116076,330],{"class":699},[178,116078,108812],{"class":319},[178,116080,32564],{"class":195},[178,116082,116083],{"class":319},".action_space.low, ",[178,116085,32564],{"class":195},[178,116087,116088],{"class":319},".action_space.high)\n",[178,116090,116091],{"class":180,"line":18559},[178,116092,722],{"emptyLinePlaceholder":721},[178,116094,116095,116097,116100,116102],{"class":180,"line":18573},[178,116096,32586],{"class":195},[178,116098,116099],{"class":319},".data.ctrl[:] ",[178,116101,330],{"class":699},[178,116103,108835],{"class":319},[178,116105,116106,116108,116110,116112,116114,116116,116118],{"class":180,"line":18578},[178,116107,5176],{"class":699},[178,116109,991],{"class":319},[178,116111,994],{"class":699},[178,116113,997],{"class":195},[178,116115,944],{"class":319},[178,116117,32564],{"class":195},[178,116119,116120],{"class":319},".frame_skip):\n",[178,116122,116123,116126,116128,116130,116132],{"class":180,"line":18584},[178,116124,116125],{"class":319},"            mujoco.mj_step(",[178,116127,32564],{"class":195},[178,116129,115946],{"class":319},[178,116131,32564],{"class":195},[178,116133,115951],{"class":319},[178,116135,116136],{"class":180,"line":18589},[178,116137,722],{"emptyLinePlaceholder":721},[178,116139,116140,116142,116144,116146],{"class":180,"line":18603},[178,116141,32586],{"class":195},[178,116143,115071],{"class":319},[178,116145,11238],{"class":699},[178,116147,57420],{"class":195},[178,116149,116150],{"class":180,"line":18608},[178,116151,722],{"emptyLinePlaceholder":721},[178,116153,116154,116156,116158,116160],{"class":180,"line":18613},[178,116155,111547],{"class":319},[178,116157,330],{"class":699},[178,116159,40605],{"class":195},[178,116161,116162],{"class":319},"._get_obs()\n",[178,116164,116165,116167,116169,116171],{"class":180,"line":18627},[178,116166,111652],{"class":319},[178,116168,330],{"class":699},[178,116170,40605],{"class":195},[178,116172,116173],{"class":319},"._get_reward()\n",[178,116175,116176],{"class":180,"line":18639},[178,116177,722],{"emptyLinePlaceholder":721},[178,116179,116180,116182,116184,116186,116188,116190],{"class":180,"line":18644},[178,116181,113502],{"class":319},[178,116183,330],{"class":699},[178,116185,40605],{"class":195},[178,116187,115735],{"class":319},[178,116189,32564],{"class":195},[178,116191,115813],{"class":319},[178,116193,116194,116196,116198,116200,116202,116204],{"class":180,"line":18657},[178,116195,113515],{"class":319},[178,116197,330],{"class":699},[178,116199,40605],{"class":195},[178,116201,115735],{"class":319},[178,116203,32564],{"class":195},[178,116205,115828],{"class":319},[178,116207,116208,116210,116212,116214,116217,116219],{"class":180,"line":18662},[178,116209,115833],{"class":319},[178,116211,330],{"class":699},[178,116213,111162],{"class":195},[178,116215,116216],{"class":319},"(np.linalg.norm(tip ",[178,116218,2472],{"class":699},[178,116220,116221],{"class":319}," target))\n",[178,116223,116224],{"class":180,"line":18667},[178,116225,722],{"emptyLinePlaceholder":721},[178,116227,116228,116231,116233,116235,116237],{"class":180,"line":18672},[178,116229,116230],{"class":319},"        terminated ",[178,116232,330],{"class":699},[178,116234,115054],{"class":319},[178,116236,320],{"class":699},[178,116238,115059],{"class":195},[178,116240,116241,116244,116246,116248,116250,116252,116254],{"class":180,"line":18685},[178,116242,116243],{"class":319},"        truncated ",[178,116245,330],{"class":699},[178,116247,40605],{"class":195},[178,116249,115071],{"class":319},[178,116251,3505],{"class":699},[178,116253,40605],{"class":195},[178,116255,115078],{"class":319},[178,116257,116258,116261,116263,116265,116268],{"class":180,"line":18690},[178,116259,116260],{"class":319},"        info ",[178,116262,330],{"class":699},[178,116264,6219],{"class":319},[178,116266,116267],{"class":188},"\"distance\"",[178,116269,116270],{"class":319},": dist}\n",[178,116272,116273,116275],{"class":180,"line":34365},[178,116274,16511],{"class":699},[178,116276,116277],{"class":319}," obs, reward, terminated, truncated, info\n",[178,116279,116280],{"class":180,"line":34371},[178,116281,722],{"emptyLinePlaceholder":721},[178,116283,116284],{"class":180,"line":34377},[178,116285,722],{"emptyLinePlaceholder":721},[178,116287,116288,116290,116292,116294,116296],{"class":180,"line":34383},[178,116289,835],{"class":699},[178,116291,838],{"class":184},[178,116293,841],{"class":319},[178,116295,844],{"class":195},[178,116297,847],{"class":319},[178,116299,116300,116303,116305],{"class":180,"line":34389},[178,116301,116302],{"class":319},"    env ",[178,116304,330],{"class":699},[178,116306,116307],{"class":319}," ReacherEnv()\n",[178,116309,116310,116313,116315,116318,116320,116322,116324],{"class":180,"line":34400},[178,116311,116312],{"class":319},"    obs, info ",[178,116314,330],{"class":699},[178,116316,116317],{"class":319}," env.reset(",[178,116319,115931],{"class":6985},[178,116321,330],{"class":699},[178,116323,2133],{"class":195},[178,116325,863],{"class":319},[178,116327,116328,116330,116332,116335],{"class":180,"line":34406},[178,116329,1022],{"class":195},[178,116331,944],{"class":319},[178,116333,116334],{"class":188},"\"initial obs shape:\"",[178,116336,116337],{"class":319},", obs.shape)\n",[178,116339,116340,116342,116344,116347],{"class":180,"line":34426},[178,116341,1022],{"class":195},[178,116343,944],{"class":319},[178,116345,116346],{"class":188},"\"initial info:\"",[178,116348,116349],{"class":319},", info)\n",[178,116351,116352],{"class":180,"line":34432},[178,116353,722],{"emptyLinePlaceholder":721},[178,116355,116356,116358,116360],{"class":180,"line":34443},[178,116357,111518],{"class":319},[178,116359,330],{"class":699},[178,116361,106126],{"class":195},[178,116363,116364,116366,116368,116370,116372,116374,116376],{"class":180,"line":34449},[178,116365,988],{"class":699},[178,116367,33351],{"class":319},[178,116369,994],{"class":699},[178,116371,997],{"class":195},[178,116373,944],{"class":319},[178,116375,2640],{"class":195},[178,116377,1005],{"class":319},[178,116379,116380,116382,116384],{"class":180,"line":34455},[178,116381,111587],{"class":319},[178,116383,330],{"class":699},[178,116385,116386],{"class":319}," env.action_space.sample()\n",[178,116388,116389,116392,116394],{"class":180,"line":34461},[178,116390,116391],{"class":319},"        obs, reward, terminated, truncated, info ",[178,116393,330],{"class":699},[178,116395,114780],{"class":319},[178,116397,116398,116400,116402],{"class":180,"line":34467},[178,116399,111662],{"class":319},[178,116401,11238],{"class":699},[178,116403,111667],{"class":319},[178,116405,116406,116408,116410,116412,116414,116417,116419,116421,116424,116426,116428,116431,116433,116435,116438,116440,116442,116444],{"class":180,"line":34473},[178,116407,34183],{"class":195},[178,116409,944],{"class":319},[178,116411,111696],{"class":188},[178,116413,111699],{"class":319},[178,116415,116416],{"class":188},"\"reward:\"",[178,116418,14196],{"class":319},[178,116420,33752],{"class":195},[178,116422,116423],{"class":319},"(reward, ",[178,116425,2021],{"class":195},[178,116427,111710],{"class":319},[178,116429,116430],{"class":188},"\"distance:\"",[178,116432,14196],{"class":319},[178,116434,33752],{"class":195},[178,116436,116437],{"class":319},"(info[",[178,116439,116267],{"class":188},[178,116441,113567],{"class":319},[178,116443,2021],{"class":195},[178,116445,32239],{"class":319},[178,116447,116448,116450,116453,116456],{"class":180,"line":34479},[178,116449,4280],{"class":699},[178,116451,116452],{"class":319}," terminated ",[178,116454,116455],{"class":699},"or",[178,116457,116458],{"class":319}," truncated:\n",[178,116460,116461],{"class":180,"line":34485},[178,116462,116463],{"class":699},"            break\n",[178,116465,116466],{"class":180,"line":34505},[178,116467,722],{"emptyLinePlaceholder":721},[178,116469,116470,116472,116474,116476,116478,116480,116482,116484],{"class":180,"line":34511},[178,116471,1022],{"class":195},[178,116473,944],{"class":319},[178,116475,111741],{"class":188},[178,116477,14196],{"class":319},[178,116479,33752],{"class":195},[178,116481,111748],{"class":319},[178,116483,2021],{"class":195},[178,116485,32239],{"class":319},[178,116487,116488],{"class":180,"line":34527},[178,116489,722],{"emptyLinePlaceholder":721},[178,116491,116492],{"class":180,"line":34533},[178,116493,722],{"emptyLinePlaceholder":721},[178,116495,116496,116498,116500,116502,116504],{"class":180,"line":34547},[178,116497,1085],{"class":699},[178,116499,1088],{"class":195},[178,116501,1091],{"class":699},[178,116503,1094],{"class":188},[178,116505,847],{"class":319},[178,116507,116508],{"class":180,"line":34553},[178,116509,1102],{"class":319},[19,116511,1105],{},[154,116513,116515],{"className":172,"code":116514,"language":174,"meta":160,"style":160},"touch ch8_gym_env.py\n",[70,116516,116517],{"__ignoreMap":160},[178,116518,116519,116521],{"class":180,"line":181},[178,116520,1115],{"class":184},[178,116522,116523],{"class":188}," ch8_gym_env.py\n",[19,116525,111809],{},[154,116527,116529],{"className":172,"code":116528,"language":174,"meta":160,"style":160},"python ch8_gym_env.py\n",[70,116530,116531],{"__ignoreMap":160},[178,116532,116533,116535],{"class":180,"line":181},[178,116534,692],{"class":184},[178,116536,116523],{"class":188},[387,116538,1135],{"id":1135},[19,116540,116541],{},"继承 Gymnasium 环境：",[154,116543,116545],{"className":690,"code":116544,"language":692,"meta":160,"style":160},"class ReacherEnv(gym.Env):\n",[70,116546,116547],{"__ignoreMap":160},[178,116548,116549,116551,116553,116555,116557,116559,116561],{"class":180,"line":181},[178,116550,16453],{"class":699},[178,116552,115422],{"class":184},[178,116554,944],{"class":319},[178,116556,114905],{"class":184},[178,116558,2498],{"class":319},[178,116560,115431],{"class":184},[178,116562,1005],{"class":319},[19,116564,116565],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,116567,116568],{},"初始化模型：",[154,116570,116572],{"className":690,"code":116571,"language":692,"meta":160,"style":160},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[70,116573,116574,116588],{"__ignoreMap":160},[178,116575,116576,116578,116580,116582,116584,116586],{"class":180,"line":181},[178,116577,32564],{"class":195},[178,116579,115482],{"class":319},[178,116581,330],{"class":699},[178,116583,858],{"class":319},[178,116585,731],{"class":195},[178,116587,863],{"class":319},[178,116589,116590,116592,116594,116596,116598,116600],{"class":180,"line":263},[178,116591,32564],{"class":195},[178,116593,115497],{"class":319},[178,116595,330],{"class":699},[178,116597,115502],{"class":319},[178,116599,32564],{"class":195},[178,116601,115507],{"class":319},[19,116603,116604,116605,116607],{},"这和前面章节一样，只是现在放到了类的 ",[70,116606,32570],{}," 里。",[19,116609,116610],{},"缓存 site ID：",[154,116612,116614],{"className":690,"code":116613,"language":692,"meta":160,"style":160},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[70,116615,116616,116630],{"__ignoreMap":160},[178,116617,116618,116620,116622,116624,116626,116628],{"class":180,"line":181},[178,116619,32564],{"class":195},[178,116621,115518],{"class":319},[178,116623,330],{"class":699},[178,116625,115523],{"class":319},[178,116627,91269],{"class":195},[178,116629,863],{"class":319},[178,116631,116632,116634,116636,116638,116640,116642],{"class":180,"line":263},[178,116633,32564],{"class":195},[178,116635,115539],{"class":319},[178,116637,330],{"class":699},[178,116639,115523],{"class":319},[178,116641,91269],{"class":195},[178,116643,863],{"class":319},[19,116645,116646],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,116648,116649],{},"reset：",[154,116651,116653],{"className":690,"code":116652,"language":692,"meta":160,"style":160},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[70,116654,116655],{"__ignoreMap":160},[178,116656,116657,116659,116661,116663,116665,116667,116669,116671,116673,116675,116677,116679,116681,116683,116685,116687,116689],{"class":180,"line":181},[178,116658,835],{"class":699},[178,116660,115887],{"class":184},[178,116662,115890],{"class":319},[178,116664,2395],{"class":699},[178,116666,115895],{"class":319},[178,116668,1956],{"class":195},[178,116670,26862],{"class":699},[178,116672,40665],{"class":195},[178,116674,734],{"class":699},[178,116676,40665],{"class":195},[178,116678,115908],{"class":319},[178,116680,115911],{"class":195},[178,116682,26862],{"class":699},[178,116684,40665],{"class":195},[178,116686,734],{"class":699},[178,116688,40665],{"class":195},[178,116690,1005],{"class":319},[19,116692,116693,116695],{},[70,116694,71776],{}," 做四件事：",[26,116697,116698,116701,116704,116707],{},[29,116699,116700],{},"设置随机种子。",[29,116702,116703],{},"重置 MuJoCo data。",[29,116705,116706],{},"随机初始化关节角。",[29,116708,116709],{},"返回初始观测和 info。",[19,116711,116712],{},"step：",[154,116714,116716],{"className":690,"code":116715,"language":692,"meta":160,"style":160},"def step(self, action):\n",[70,116717,116718],{"__ignoreMap":160},[178,116719,116720,116722,116724],{"class":180,"line":181},[178,116721,835],{"class":699},[178,116723,116052],{"class":184},[178,116725,116055],{"class":319},[19,116727,116728,116730],{},[70,116729,108499],{}," 做六件事：",[26,116732,116733,116736,116742,116745,116748,116751],{},[29,116734,116735],{},"检查并裁剪 action。",[29,116737,116738,116739,297],{},"写入 ",[70,116740,116741],{},"self.data.ctrl",[29,116743,116744],{},"连续推进若干个 MuJoCo 物理步。",[29,116746,116747],{},"计算新观测。",[29,116749,116750],{},"计算奖励和结束条件。",[29,116752,116753],{},"返回 Gymnasium 标准五元组。",[387,116755,1222],{"id":1222},[154,116757,116759],{"className":690,"code":116758,"language":692,"meta":160,"style":160},"import gymnasium as gym\n",[70,116760,116761],{"__ignoreMap":160},[178,116762,116763,116765,116767,116769],{"class":180,"line":181},[178,116764,700],{"class":699},[178,116766,115260],{"class":319},[178,116768,713],{"class":699},[178,116770,115265],{"class":319},[19,116772,116773,116774,116776,116777,116780],{},"导入 Gymnasium，并起别名 ",[70,116775,114905],{},"。后面写 ",[70,116778,116779],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[154,116782,116784],{"className":690,"code":116783,"language":692,"meta":160,"style":160},"from gymnasium import spaces\n",[70,116785,116786],{"__ignoreMap":160},[178,116787,116788,116790,116792,116794],{"class":180,"line":181},[178,116789,32479],{"class":699},[178,116791,115260],{"class":319},[178,116793,700],{"class":699},[178,116795,115292],{"class":319},[19,116797,116798,116799,116802],{},"导入空间定义工具。",[70,116800,116801],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[154,116804,116805],{"className":690,"code":116544,"language":692,"meta":160,"style":160},[70,116806,116807],{"__ignoreMap":160},[178,116808,116809,116811,116813,116815,116817,116819,116821],{"class":180,"line":181},[178,116810,16453],{"class":699},[178,116812,115422],{"class":184},[178,116814,944],{"class":319},[178,116816,114905],{"class":184},[178,116818,2498],{"class":319},[178,116820,115431],{"class":184},[178,116822,1005],{"class":319},[19,116824,116825,116826,116829,116830,116832,116833,404,116835,116837],{},"定义一个类，名字叫 ",[70,116827,116828],{},"ReacherEnv","。括号里的 ",[70,116831,116779],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[70,116834,71776],{},[70,116836,108499],{}," 这两个核心方法。",[154,116839,116841],{"className":690,"code":116840,"language":692,"meta":160,"style":160},"metadata = {\"render_modes\": []}\n",[70,116842,116843],{"__ignoreMap":160},[178,116844,116845,116848,116850,116852,116854],{"class":180,"line":181},[178,116846,116847],{"class":319},"metadata ",[178,116849,330],{"class":699},[178,116851,6219],{"class":319},[178,116853,115445],{"class":188},[178,116855,115448],{"class":319},[19,116857,116858],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[154,116860,116862],{"className":690,"code":116861,"language":692,"meta":160,"style":160},"def __init__(self) -> None:\n",[70,116863,116864],{"__ignoreMap":160},[178,116865,116866,116868,116870,116872,116874],{"class":180,"line":181},[178,116867,835],{"class":699},[178,116869,32545],{"class":195},[178,116871,115461],{"class":319},[178,116873,844],{"class":195},[178,116875,847],{"class":319},[19,116877,116878,116880,116881,297],{},[70,116879,32570],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[70,116882,116883],{},"env = ReacherEnv()",[154,116885,116887],{"className":690,"code":116886,"language":692,"meta":160,"style":160},"super().__init__()\n",[70,116888,116889],{"__ignoreMap":160},[178,116890,116891,116894,116896,116898],{"class":180,"line":181},[178,116892,116893],{"class":195},"super",[178,116895,19019],{"class":319},[178,116897,32570],{"class":195},[178,116899,3760],{"class":319},[19,116901,116902,116903,116905],{},"调用父类 ",[70,116904,116779],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[154,116907,116908],{"className":690,"code":116571,"language":692,"meta":160,"style":160},[70,116909,116910,116924],{"__ignoreMap":160},[178,116911,116912,116914,116916,116918,116920,116922],{"class":180,"line":181},[178,116913,32564],{"class":195},[178,116915,115482],{"class":319},[178,116917,330],{"class":699},[178,116919,858],{"class":319},[178,116921,731],{"class":195},[178,116923,863],{"class":319},[178,116925,116926,116928,116930,116932,116934,116936],{"class":180,"line":263},[178,116927,32564],{"class":195},[178,116929,115497],{"class":319},[178,116931,330],{"class":699},[178,116933,115502],{"class":319},[178,116935,32564],{"class":195},[178,116937,115507],{"class":319},[19,116939,116940,116941,116943,116944,404,116947,116950],{},"把 MuJoCo 模型和状态保存到 ",[70,116942,32564],{}," 上。",[70,116945,116946],{},"self.model",[70,116948,116949],{},"self.data"," 表示这个环境对象自己的模型和状态。",[154,116952,116953],{"className":690,"code":116613,"language":692,"meta":160,"style":160},[70,116954,116955,116969],{"__ignoreMap":160},[178,116956,116957,116959,116961,116963,116965,116967],{"class":180,"line":181},[178,116958,32564],{"class":195},[178,116960,115518],{"class":319},[178,116962,330],{"class":699},[178,116964,115523],{"class":319},[178,116966,91269],{"class":195},[178,116968,863],{"class":319},[178,116970,116971,116973,116975,116977,116979,116981],{"class":180,"line":263},[178,116972,32564],{"class":195},[178,116974,115539],{"class":319},[178,116976,330],{"class":699},[178,116978,115523],{"class":319},[178,116980,91269],{"class":195},[178,116982,863],{"class":319},[19,116984,116985,116986,404,116989,116992],{},"提前查好 tip 和 target 的 site ID。这样 ",[70,116987,116988],{},"_get_obs",[70,116990,116991],{},"_get_reward"," 里就不用每次按名字查找。",[154,116994,116996],{"className":690,"code":116995,"language":692,"meta":160,"style":160},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[70,116997,116998,117008,117018],{"__ignoreMap":160},[178,116999,117000,117002,117004,117006],{"class":180,"line":181},[178,117001,32564],{"class":195},[178,117003,115232],{"class":319},[178,117005,330],{"class":699},[178,117007,56148],{"class":195},[178,117009,117010,117012,117014,117016],{"class":180,"line":263},[178,117011,32564],{"class":195},[178,117013,115611],{"class":319},[178,117015,330],{"class":699},[178,117017,115616],{"class":195},[178,117019,117020,117022,117024,117026],{"class":180,"line":274},[178,117021,32564],{"class":195},[178,117023,115071],{"class":319},[178,117025,330],{"class":699},[178,117027,49065],{"class":195},[19,117029,117030,117033,117034,117037,117038,117041],{},[70,117031,117032],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[70,117035,117036],{},"max_steps"," 是一个 episode 最多运行多少步。",[70,117039,117040],{},"steps"," 记录当前 episode 已经走了多少步。",[154,117043,117044],{"className":690,"code":115110,"language":692,"meta":160,"style":160},[70,117045,117046],{"__ignoreMap":160},[178,117047,117048,117050,117052,117054,117056,117058,117060,117062,117064,117066,117068,117070,117072,117074,117076,117078,117080,117082,117084,117086],{"class":180,"line":181},[178,117049,32564],{"class":195},[178,117051,115119],{"class":319},[178,117053,330],{"class":699},[178,117055,115124],{"class":319},[178,117057,115127],{"class":6985},[178,117059,115130],{"class":699},[178,117061,104047],{"class":195},[178,117063,14196],{"class":319},[178,117065,115137],{"class":6985},[178,117067,330],{"class":699},[178,117069,104047],{"class":195},[178,117071,14196],{"class":319},[178,117073,97676],{"class":6985},[178,117075,330],{"class":699},[178,117077,944],{"class":319},[178,117079,1669],{"class":195},[178,117081,115154],{"class":319},[178,117083,95215],{"class":6985},[178,117085,330],{"class":699},[178,117087,115161],{"class":319},[19,117089,117090,117091,117094,117095,404,117098,117101],{},"定义动作空间。",[70,117092,117093],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[70,117096,117097],{},"low=-1.0",[70,117099,117100],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[154,117103,117104],{"className":690,"code":115171,"language":692,"meta":160,"style":160},[70,117105,117106],{"__ignoreMap":160},[178,117107,117108,117110,117112,117114,117116,117118,117120,117122,117124,117126,117128,117130,117132,117134,117136,117138,117140,117142],{"class":180,"line":181},[178,117109,32564],{"class":195},[178,117111,115180],{"class":319},[178,117113,330],{"class":699},[178,117115,115124],{"class":319},[178,117117,115127],{"class":6985},[178,117119,115130],{"class":699},[178,117121,115191],{"class":319},[178,117123,115137],{"class":6985},[178,117125,330],{"class":699},[178,117127,115191],{"class":319},[178,117129,97676],{"class":6985},[178,117131,330],{"class":699},[178,117133,944],{"class":319},[178,117135,2386],{"class":195},[178,117137,115154],{"class":319},[178,117139,95215],{"class":6985},[178,117141,330],{"class":699},[178,117143,115161],{"class":319},[19,117145,117146,117147,117150,117151,117154],{},"定义观测空间。",[70,117148,117149],{},"shape=(10,)"," 表示观测是 10 个数。",[70,117152,117153],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[154,117156,117158],{"className":690,"code":117157,"language":692,"meta":160,"style":160},"def _get_obs(self) -> np.ndarray:\n",[70,117159,117160],{"__ignoreMap":160},[178,117161,117162,117164,117166],{"class":180,"line":181},[178,117163,835],{"class":699},[178,117165,115721],{"class":184},[178,117167,115724],{"class":319},[19,117169,117170,117171,117173],{},"定义内部函数，用来生成观测。函数名前面的 ",[70,117172,2931],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[154,117175,117177],{"className":690,"code":117176,"language":692,"meta":160,"style":160},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[70,117178,117179,117193],{"__ignoreMap":160},[178,117180,117181,117183,117185,117187,117189,117191],{"class":180,"line":181},[178,117182,112933],{"class":319},[178,117184,330],{"class":699},[178,117186,40605],{"class":195},[178,117188,115735],{"class":319},[178,117190,32564],{"class":195},[178,117192,115740],{"class":319},[178,117194,117195,117197,117199,117201,117203,117205],{"class":180,"line":263},[178,117196,112943],{"class":319},[178,117198,330],{"class":699},[178,117200,40605],{"class":195},[178,117202,115735],{"class":319},[178,117204,32564],{"class":195},[178,117206,115755],{"class":319},[19,117208,117209],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[154,117211,117213],{"className":690,"code":117212,"language":692,"meta":160,"style":160},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[70,117214,117215,117231],{"__ignoreMap":160},[178,117216,117217,117219,117221,117223,117225,117227,117229],{"class":180,"line":181},[178,117218,112219],{"class":319},[178,117220,330],{"class":699},[178,117222,115764],{"class":319},[178,117224,32564],{"class":195},[178,117226,115769],{"class":319},[178,117228,32564],{"class":195},[178,117230,115774],{"class":319},[178,117232,117233,117235],{"class":180,"line":263},[178,117234,18804],{"class":699},[178,117236,115781],{"class":319},[19,117238,117239,117240,117243,117244,117246],{},"拼接观测，并转换成 ",[70,117241,117242],{},"float32","。很多强化学习库默认使用 ",[70,117245,117242],{},"，所以这里主动转换。",[154,117248,117249],{"className":690,"code":116652,"language":692,"meta":160,"style":160},[70,117250,117251],{"__ignoreMap":160},[178,117252,117253,117255,117257,117259,117261,117263,117265,117267,117269,117271,117273,117275,117277,117279,117281,117283,117285],{"class":180,"line":181},[178,117254,835],{"class":699},[178,117256,115887],{"class":184},[178,117258,115890],{"class":319},[178,117260,2395],{"class":699},[178,117262,115895],{"class":319},[178,117264,1956],{"class":195},[178,117266,26862],{"class":699},[178,117268,40665],{"class":195},[178,117270,734],{"class":699},[178,117272,40665],{"class":195},[178,117274,115908],{"class":319},[178,117276,115911],{"class":195},[178,117278,26862],{"class":699},[178,117280,40665],{"class":195},[178,117282,734],{"class":699},[178,117284,40665],{"class":195},[178,117286,1005],{"class":319},[19,117288,117289,117290,117292,117293,117296],{},"定义 reset。",[70,117291,115931],{}," 用来控制随机数，保证实验可以复现。",[70,117294,117295],{},"options"," 用来接收额外配置，本章暂时不用。",[154,117298,117300],{"className":690,"code":117299,"language":692,"meta":160,"style":160},"super().reset(seed=seed)\n",[70,117301,117302],{"__ignoreMap":160},[178,117303,117304,117306,117308,117310,117312],{"class":180,"line":181},[178,117305,116893],{"class":195},[178,117307,115928],{"class":319},[178,117309,115931],{"class":6985},[178,117311,330],{"class":699},[178,117313,115936],{"class":319},[19,117315,117316,117317,117320],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[70,117318,117319],{},"self.np_random"," 生成可复现的随机数。",[154,117322,117324],{"className":690,"code":117323,"language":692,"meta":160,"style":160},"mujoco.mj_resetData(self.model, self.data)\n",[70,117325,117326],{"__ignoreMap":160},[178,117327,117328,117331,117333,117335,117337],{"class":180,"line":181},[178,117329,117330],{"class":319},"mujoco.mj_resetData(",[178,117332,32564],{"class":195},[178,117334,115946],{"class":319},[178,117336,32564],{"class":195},[178,117338,115951],{"class":319},[19,117340,117341],{},"把 MuJoCo 状态重置到默认状态。",[154,117343,117345],{"className":690,"code":117344,"language":692,"meta":160,"style":160},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[70,117346,117347],{"__ignoreMap":160},[178,117348,117349,117351,117353,117355,117357,117359,117361,117363,117365,117367,117369,117371,117373,117375,117377,117379,117381],{"class":180,"line":181},[178,117350,32564],{"class":195},[178,117352,115962],{"class":319},[178,117354,330],{"class":699},[178,117356,40605],{"class":195},[178,117358,115969],{"class":319},[178,117360,115127],{"class":6985},[178,117362,115130],{"class":699},[178,117364,87925],{"class":195},[178,117366,14196],{"class":319},[178,117368,115137],{"class":6985},[178,117370,330],{"class":699},[178,117372,87925],{"class":195},[178,117374,14196],{"class":319},[178,117376,554],{"class":6985},[178,117378,330],{"class":699},[178,117380,32564],{"class":195},[178,117382,115994],{"class":319},[19,117384,116706,117385,117388,117389,117392,117393,117395],{},[70,117386,117387],{},"[:]"," 表示修改整个数组。",[70,117390,117391],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[70,117394,103799],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[154,117397,117399],{"className":690,"code":117398,"language":692,"meta":160,"style":160},"self.data.qvel[:] = 0.0\n",[70,117400,117401],{"__ignoreMap":160},[178,117402,117403,117405,117407,117409],{"class":180,"line":181},[178,117404,32564],{"class":195},[178,117406,116001],{"class":319},[178,117408,330],{"class":699},[178,117410,106126],{"class":195},[19,117412,117413],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[154,117415,117417],{"className":690,"code":117416,"language":692,"meta":160,"style":160},"self.steps = 0\nreturn self._get_obs(), {}\n",[70,117418,117419,117429],{"__ignoreMap":160},[178,117420,117421,117423,117425,117427],{"class":180,"line":181},[178,117422,32564],{"class":195},[178,117424,115071],{"class":319},[178,117426,330],{"class":699},[178,117428,49065],{"class":195},[178,117430,117431,117433,117435],{"class":180,"line":263},[178,117432,18804],{"class":699},[178,117434,40605],{"class":195},[178,117436,116041],{"class":319},[19,117438,117439],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[154,117441,117442],{"className":690,"code":116715,"language":692,"meta":160,"style":160},[70,117443,117444],{"__ignoreMap":160},[178,117445,117446,117448,117450],{"class":180,"line":181},[178,117447,835],{"class":699},[178,117449,116052],{"class":184},[178,117451,116055],{"class":319},[19,117453,117454],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[154,117456,117458],{"className":690,"code":117457,"language":692,"meta":160,"style":160},"action = np.asarray(action, dtype=np.float32)\n",[70,117459,117460],{"__ignoreMap":160},[178,117461,117462,117464,117466,117468,117470,117472],{"class":180,"line":181},[178,117463,108807],{"class":319},[178,117465,330],{"class":699},[178,117467,116064],{"class":319},[178,117469,95215],{"class":6985},[178,117471,330],{"class":699},[178,117473,115161],{"class":319},[19,117475,117476,117477,297],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[70,117478,117242],{},[154,117480,117482],{"className":690,"code":117481,"language":692,"meta":160,"style":160},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[70,117483,117484],{"__ignoreMap":160},[178,117485,117486,117488,117490,117492,117494,117496,117498],{"class":180,"line":181},[178,117487,108807],{"class":319},[178,117489,330],{"class":699},[178,117491,108812],{"class":319},[178,117493,32564],{"class":195},[178,117495,116083],{"class":319},[178,117497,32564],{"class":195},[178,117499,116088],{"class":319},[19,117501,117502],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[154,117504,117506],{"className":690,"code":117505,"language":692,"meta":160,"style":160},"self.data.ctrl[:] = action\n",[70,117507,117508],{"__ignoreMap":160},[178,117509,117510,117512,117514,117516],{"class":180,"line":181},[178,117511,32564],{"class":195},[178,117513,116099],{"class":319},[178,117515,330],{"class":699},[178,117517,108835],{"class":319},[19,117519,117520],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[154,117522,117524],{"className":690,"code":117523,"language":692,"meta":160,"style":160},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[70,117525,117526,117542],{"__ignoreMap":160},[178,117527,117528,117530,117532,117534,117536,117538,117540],{"class":180,"line":181},[178,117529,1474],{"class":699},[178,117531,991],{"class":319},[178,117533,994],{"class":699},[178,117535,997],{"class":195},[178,117537,944],{"class":319},[178,117539,32564],{"class":195},[178,117541,116120],{"class":319},[178,117543,117544,117547,117549,117551,117553],{"class":180,"line":263},[178,117545,117546],{"class":319},"    mujoco.mj_step(",[178,117548,32564],{"class":195},[178,117550,115946],{"class":319},[178,117552,32564],{"class":195},[178,117554,115951],{"class":319},[19,117556,117557,117558,117561,117562,117564,117565,297],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[70,117559,117560],{},"frame_skip=5","，所以外部调用一次 ",[70,117563,115242],{},"，内部实际执行 5 次 ",[70,117566,1818],{},[154,117568,117570],{"className":690,"code":117569,"language":692,"meta":160,"style":160},"self.steps += 1\n",[70,117571,117572],{"__ignoreMap":160},[178,117573,117574,117576,117578,117580],{"class":180,"line":181},[178,117575,32564],{"class":195},[178,117577,115071],{"class":319},[178,117579,11238],{"class":699},[178,117581,57420],{"class":195},[19,117583,117584],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[154,117586,117588],{"className":690,"code":117587,"language":692,"meta":160,"style":160},"obs = self._get_obs()\nreward = self._get_reward()\n",[70,117589,117590,117600],{"__ignoreMap":160},[178,117591,117592,117594,117596,117598],{"class":180,"line":181},[178,117593,112219],{"class":319},[178,117595,330],{"class":699},[178,117597,40605],{"class":195},[178,117599,116162],{"class":319},[178,117601,117602,117604,117606,117608],{"class":180,"line":263},[178,117603,112370],{"class":319},[178,117605,330],{"class":699},[178,117607,40605],{"class":195},[178,117609,116173],{"class":319},[19,117611,117612],{},"计算新的观测和奖励。",[154,117614,117616],{"className":690,"code":117615,"language":692,"meta":160,"style":160},"dist = float(np.linalg.norm(tip - target))\n",[70,117617,117618],{"__ignoreMap":160},[178,117619,117620,117622,117624,117626,117628,117630],{"class":180,"line":181},[178,117621,112961],{"class":319},[178,117623,330],{"class":699},[178,117625,111162],{"class":195},[178,117627,116216],{"class":319},[178,117629,2472],{"class":699},[178,117631,116221],{"class":319},[19,117633,117634],{},"计算末端到目标的距离，并转换成 Python float。",[154,117636,117637],{"className":690,"code":115042,"language":692,"meta":160,"style":160},[70,117638,117639,117651],{"__ignoreMap":160},[178,117640,117641,117643,117645,117647,117649],{"class":180,"line":181},[178,117642,115049],{"class":319},[178,117644,330],{"class":699},[178,117646,115054],{"class":319},[178,117648,320],{"class":699},[178,117650,115059],{"class":195},[178,117652,117653,117655,117657,117659,117661,117663,117665],{"class":180,"line":263},[178,117654,115064],{"class":319},[178,117656,330],{"class":699},[178,117658,40605],{"class":195},[178,117660,115071],{"class":319},[178,117662,3505],{"class":699},[178,117664,40605],{"class":195},[178,117666,115078],{"class":319},[19,117668,117669],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[154,117671,117673],{"className":690,"code":117672,"language":692,"meta":160,"style":160},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[70,117674,117675,117688],{"__ignoreMap":160},[178,117676,117677,117680,117682,117684,117686],{"class":180,"line":181},[178,117678,117679],{"class":319},"info ",[178,117681,330],{"class":699},[178,117683,6219],{"class":319},[178,117685,116267],{"class":188},[178,117687,116270],{"class":319},[178,117689,117690,117692],{"class":180,"line":263},[178,117691,18804],{"class":699},[178,117693,116277],{"class":319},[19,117695,117696,117699],{},[70,117697,117698],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[154,117701,117703],{"className":690,"code":117702,"language":692,"meta":160,"style":160},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[70,117704,117705,117714],{"__ignoreMap":160},[178,117706,117707,117710,117712],{"class":180,"line":181},[178,117708,117709],{"class":319},"env ",[178,117711,330],{"class":699},[178,117713,116307],{"class":319},[178,117715,117716,117718,117720,117722,117724,117726,117728],{"class":180,"line":263},[178,117717,114765],{"class":319},[178,117719,330],{"class":699},[178,117721,116317],{"class":319},[178,117723,115931],{"class":6985},[178,117725,330],{"class":699},[178,117727,2133],{"class":195},[178,117729,863],{"class":319},[19,117731,117732,117733,117736],{},"创建环境并重置。",[70,117734,117735],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[154,117738,117740],{"className":690,"code":117739,"language":692,"meta":160,"style":160},"action = env.action_space.sample()\n",[70,117741,117742],{"__ignoreMap":160},[178,117743,117744,117746,117748],{"class":180,"line":181},[178,117745,108807],{"class":319},[178,117747,330],{"class":699},[178,117749,116386],{"class":319},[19,117751,117752],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,117754,1570],{"id":1569},[19,117756,106849],{},[154,117758,117761],{"className":117759,"code":117760,"language":159,"meta":160},[157],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[70,117762,117760],{"__ignoreMap":160},[19,117764,117765],{},"这个环境已经具备强化学习环境的基本结构。",[19,117767,117768],{},"主函数里使用随机动作：",[154,117770,117771],{"className":690,"code":117739,"language":692,"meta":160,"style":160},[70,117772,117773],{"__ignoreMap":160},[178,117774,117775,117777,117779],{"class":180,"line":181},[178,117776,108807],{"class":319},[178,117778,330],{"class":699},[178,117780,116386],{"class":319},[19,117782,117783],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,117785,1654],{"id":1653},[26,117787,117788,117791,117797,117806,117815,117824,117830],{},[29,117789,117790],{},"运行程序。",[29,117792,117793,117794,297],{},"确认 ",[70,117795,117796],{},"obs.shape == (10,)",[29,117798,112546,117799,117802,117803,297],{},[70,117800,117801],{},"env.action_space","，应类似 ",[70,117804,117805],{},"Box(-1.0, 1.0, (2,), float32)",[29,117807,106950,117808,117811,117812,297],{},[70,117809,117810],{},"self.max_steps = 10","，确认环境会更快 ",[70,117813,117814],{},"truncated=True",[29,117816,1659,117817,1666,117820,117823],{},[70,117818,117819],{},"terminated = dist \u003C 0.05",[70,117821,117822],{},"dist \u003C 0.2","，观察是否更容易结束。",[29,117825,1659,117826,117829],{},[70,117827,117828],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[29,117831,117832,117833,117835,117836,117839],{},"在 ",[70,117834,117698],{}," 里加入 ",[70,117837,117838],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,117841,1715],{"id":1714},[387,117843,117845],{"id":117844},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,117847,117848,117849,117851],{},"Gymnasium 的 ",[70,117850,108499],{}," 返回 5 个值:",[154,117853,117855],{"className":690,"code":117854,"language":692,"meta":160,"style":160},"obs, reward, terminated, truncated, info\n",[70,117856,117857],{"__ignoreMap":160},[178,117858,117859],{"class":180,"line":181},[178,117860,117854],{"class":319},[19,117862,117863],{},"不是旧 Gym 的 4 个值。",[387,117865,117867,117870],{"id":117866},"datactrl-action-维度错误",[70,117868,117869],{},"data.ctrl[:] = action"," 维度错误",[19,117872,1745],{},[154,117874,117876],{"className":690,"code":117875,"language":692,"meta":160,"style":160},"print(self.model.nu)\nprint(action.shape)\n",[70,117877,117878,117889],{"__ignoreMap":160},[178,117879,117880,117882,117884,117886],{"class":180,"line":181},[178,117881,1504],{"class":195},[178,117883,944],{"class":319},[178,117885,32564],{"class":195},[178,117887,117888],{"class":319},".model.nu)\n",[178,117890,117891,117893],{"class":180,"line":263},[178,117892,1504],{"class":195},[178,117894,117895],{"class":319},"(action.shape)\n",[19,117897,117898],{},"两者必须匹配。",[387,117900,117902],{"id":117901},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,117904,104102],{},[154,117906,117908],{"className":690,"code":117907,"language":692,"meta":160,"style":160},"mujoco.mj_forward(self.model, self.data)\n",[70,117909,117910],{"__ignoreMap":160},[178,117911,117912,117915,117917,117919,117921],{"class":180,"line":181},[178,117913,117914],{"class":319},"mujoco.mj_forward(",[178,117916,32564],{"class":195},[178,117918,115946],{"class":319},[178,117920,32564],{"class":195},[178,117922,115951],{"class":319},[387,117924,117926,117928],{"id":117925},"observation_space-维度和-obs-不一致",[70,117927,114965],{}," 维度和 obs 不一致",[19,117930,104210],{},[154,117932,117934],{"className":690,"code":117933,"language":692,"meta":160,"style":160},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[70,117935,117936,117946,117953],{"__ignoreMap":160},[178,117937,117938,117940,117942,117944],{"class":180,"line":181},[178,117939,112219],{"class":319},[178,117941,330],{"class":699},[178,117943,40605],{"class":195},[178,117945,116162],{"class":319},[178,117947,117948,117950],{"class":180,"line":263},[178,117949,1504],{"class":195},[178,117951,117952],{"class":319},"(obs.shape)\n",[178,117954,117955,117957,117959,117961],{"class":180,"line":274},[178,117956,1504],{"class":195},[178,117958,944],{"class":319},[178,117960,32564],{"class":195},[178,117962,117963],{"class":319},".observation_space.shape)\n",[19,117965,117966],{},"两者必须一致。本章观测是：",[154,117968,117971],{"className":117969,"code":117970,"language":159,"meta":160},[157],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[70,117972,117970],{"__ignoreMap":160},[387,117974,117976],{"id":117975},"action-超过范围","action 超过范围",[19,117978,117979],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[154,117981,117982],{"className":690,"code":117481,"language":692,"meta":160,"style":160},[70,117983,117984],{"__ignoreMap":160},[178,117985,117986,117988,117990,117992,117994,117996,117998],{"class":180,"line":181},[178,117987,108807],{"class":319},[178,117989,330],{"class":699},[178,117991,108812],{"class":319},[178,117993,32564],{"class":195},[178,117995,116083],{"class":319},[178,117997,32564],{"class":195},[178,117999,116088],{"class":319},[19,118001,118002,118003,297],{},"这能避免无效动作直接写入 ",[70,118004,102768],{},[387,118006,118008],{"id":118007},"忘记返回-info","忘记返回 info",[19,118010,117848,118011,404,118013,118015],{},[70,118012,71776],{},[70,118014,108499],{}," 都会返回 info：",[154,118017,118018],{"className":690,"code":114758,"language":692,"meta":160,"style":160},[70,118019,118020,118028],{"__ignoreMap":160},[178,118021,118022,118024,118026],{"class":180,"line":181},[178,118023,114765],{"class":319},[178,118025,330],{"class":699},[178,118027,114770],{"class":319},[178,118029,118030,118032,118034],{"class":180,"line":263},[178,118031,114775],{"class":319},[178,118033,330],{"class":699},[178,118035,114780],{"class":319},[19,118037,118038,118039,297],{},"即使暂时没有额外信息，也返回 ",[70,118040,34191],{},[14,118042,118044],{"id":118043},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,118046,118047],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[26,118049,118050,118053,118056,118059,118062,118065],{},[29,118051,118052],{},"更稳定的 reward。",[29,118054,118055],{},"合理的 episode 长度。",[29,118057,118058],{},"可重复的随机目标采样。",[29,118060,118061],{},"render 接口。",[29,118063,118064],{},"环境注册代码。",[29,118066,118067],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,118069,118070],{},"如果只是自己写训练循环，最小形式是：",[154,118072,118074],{"className":690,"code":118073,"language":692,"meta":160,"style":160},"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",[70,118075,118076,118084,118100,118104,118120,118129,118138,118148],{"__ignoreMap":160},[178,118077,118078,118080,118082],{"class":180,"line":181},[178,118079,117709],{"class":319},[178,118081,330],{"class":699},[178,118083,116307],{"class":319},[178,118085,118086,118088,118090,118092,118094,118096,118098],{"class":180,"line":263},[178,118087,114765],{"class":319},[178,118089,330],{"class":699},[178,118091,116317],{"class":319},[178,118093,115931],{"class":6985},[178,118095,330],{"class":699},[178,118097,2133],{"class":195},[178,118099,863],{"class":319},[178,118101,118102],{"class":180,"line":274},[178,118103,722],{"emptyLinePlaceholder":721},[178,118105,118106,118108,118110,118112,118114,118116,118118],{"class":180,"line":354},[178,118107,1474],{"class":699},[178,118109,991],{"class":319},[178,118111,994],{"class":699},[178,118113,997],{"class":195},[178,118115,944],{"class":319},[178,118117,8179],{"class":195},[178,118119,1005],{"class":319},[178,118121,118122,118125,118127],{"class":180,"line":364},[178,118123,118124],{"class":319},"    action ",[178,118126,330],{"class":699},[178,118128,116386],{"class":319},[178,118130,118131,118134,118136],{"class":180,"line":740},[178,118132,118133],{"class":319},"    obs, reward, terminated, truncated, info ",[178,118135,330],{"class":699},[178,118137,114780],{"class":319},[178,118139,118140,118142,118144,118146],{"class":180,"line":746},[178,118141,922],{"class":699},[178,118143,116452],{"class":319},[178,118145,116455],{"class":699},[178,118147,116458],{"class":319},[178,118149,118150,118153,118155],{"class":180,"line":752},[178,118151,118152],{"class":319},"        obs, info ",[178,118154,330],{"class":699},[178,118156,114770],{"class":319},[14,118158,118160],{"id":118159},"_9本章小结","9.本章小结",[19,118162,118163],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[154,118165,118168],{"className":118166,"code":118167,"language":159,"meta":160},[157],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[70,118169,118167],{"__ignoreMap":160},[19,118171,118172],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[1853,118174,118175],{},"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":160,"searchDepth":263,"depth":263,"links":118177},[118178,118179,118180,118187,118191,118192,118193,118203,118204],{"id":16,"depth":263,"text":17},{"id":165,"depth":263,"text":166},{"id":303,"depth":263,"text":304,"children":118181},[118182,118184,118186],{"id":114989,"depth":274,"text":118183},"terminated 和 truncated 的区别",{"id":115092,"depth":274,"text":118185},"observation_space 和 action_space",{"id":115219,"depth":274,"text":115220},{"id":686,"depth":263,"text":687,"children":118188},[118189,118190],{"id":1135,"depth":274,"text":1135},{"id":1222,"depth":274,"text":1222},{"id":1569,"depth":263,"text":1570},{"id":1653,"depth":263,"text":1654},{"id":1714,"depth":263,"text":1715,"children":118194},[118195,118196,118198,118199,118201,118202],{"id":117844,"depth":274,"text":117845},{"id":117866,"depth":274,"text":118197},"data.ctrl[:] = action 维度错误",{"id":117901,"depth":274,"text":117902},{"id":117925,"depth":274,"text":118200},"observation_space 维度和 obs 不一致",{"id":117975,"depth":274,"text":117976},{"id":118007,"depth":274,"text":118008},{"id":118043,"depth":263,"text":118044},{"id":118159,"depth":263,"text":118160},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":114742,"description":160},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118211,"title":118212,"body":118213,"description":118636,"extension":1880,"meta":118637,"navigation":721,"path":118638,"seo":118639,"stem":118640,"__hash__":118641},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118214,"toc":118626},[118215,118219,118222,118225,118245,118251,118257,118267,118270,118273,118293,118296,118300,118303,118309,118312,118326,118329,118332,118406,118409,118415,118418,118441,118444,118494,118497,118503,118506,118509,118512,118531,118534,118540,118543,118546,118549,118569,118572,118575,118578,118623],[10,118216,118218],{"id":118217},"mujoco-学习","MuJoCo 学习",[19,118220,118221],{},"初版",[19,118223,118224],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[26,118226,118227,118230,118233,118242],{},[29,118228,118229],{},"MuJoCo 模型文件在描述什么。",[29,118231,118232],{},"Python 代码怎样读取和推进仿真。",[29,118234,118235,1258,118237,1258,118239,118241],{},[70,118236,1580],{},[70,118238,105725],{},[70,118240,105728],{}," 这些数组为什么重要。",[29,118243,118244],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,118246,118247,118248,118250],{},"默认环境为 Fedora 44、Python >= 3.10、",[70,118249,296],{}," 官方 Python bindings。",[19,118252,118253,118254,118256],{},"注意：本文禁止使用 ",[70,118255,102710],{},"。所有示例均使用：",[154,118258,118259],{"className":690,"code":103238,"language":692,"meta":160,"style":160},[70,118260,118261],{"__ignoreMap":160},[178,118262,118263,118265],{"class":180,"line":181},[178,118264,700],{"class":699},[178,118266,703],{"class":319},[14,118268,118269],{"id":118269},"适合谁阅读",[19,118271,118272],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[26,118274,118275,118278,118281,118284],{},[29,118276,118277],{},"没学过 MuJoCo，只会一点 Python。",[29,118279,118280],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[29,118282,118283],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[29,118285,118286,118287,118289,118290,118292],{},"以前接触过 ",[70,118288,102710],{},"，现在想迁移到官方 ",[70,118291,324],{}," Python bindings。",[19,118294,118295],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118297,118299],{"id":118298},"mujoco-到底是什么","MuJoCo 到底是什么",[19,118301,118302],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[154,118304,118307],{"className":118305,"code":118306,"language":159,"meta":160},[157],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[70,118308,118306],{"__ignoreMap":160},[19,118310,118311],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[26,118313,118314,118317,118320,118323],{},[29,118315,118316],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[29,118318,118319],{},"快速测试控制算法，不必一开始就上真实机器人。",[29,118321,118322],{},"生成强化学习环境。",[29,118324,118325],{},"采集状态、动作、图像、奖励等训练数据。",[14,118327,118328],{"id":118328},"学习前的心智模型",[19,118330,118331],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[45,118333,118334,118346],{},[48,118335,118336],{},[51,118337,118338,118341,118344],{},[54,118339,118340],{"align":56},"部分",[54,118342,118343],{"align":56},"负责什么",[54,118345,22945],{"align":56},[62,118347,118348,118359,118371,118383,118395],{},[51,118349,118350,118353,118356],{},[67,118351,118352],{"align":56},"MJCF XML",[67,118354,118355],{"align":56},"定义世界和机器人结构",[67,118357,118358],{"align":56},"地面、盒子、关节、电机、摄像头",[51,118360,118361,118365,118368],{},[67,118362,118363],{"align":56},[70,118364,102419],{},[67,118366,118367],{"align":56},"编译后的静态模型",[67,118369,118370],{"align":56},"有几个关节、有几个电机、时间步长是多少",[51,118372,118373,118377,118380],{},[67,118374,118375],{"align":56},[70,118376,102429],{},[67,118378,118379],{"align":56},"运行中的动态状态",[67,118381,118382],{"align":56},"当前时间、位置、速度、电机输入",[51,118384,118385,118389,118392],{},[67,118386,118387],{"align":56},[70,118388,1818],{},[67,118390,118391],{"align":56},"推进一步物理仿真",[67,118393,118394],{"align":56},"根据重力、力、碰撞更新状态",[51,118396,118397,118400,118403],{},[67,118398,118399],{"align":56},"Viewer \u002F Renderer",[67,118401,118402],{"align":56},"把仿真显示出来",[67,118404,118405],{"align":56},"打开窗口或保存图片",[19,118407,118408],{},"一句话总结：",[154,118410,118413],{"className":118411,"code":118412,"language":159,"meta":160},[157],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[70,118414,118412],{"__ignoreMap":160},[19,118416,118417],{},"参考来源：",[2946,118419,118420,118427,118434],{},[29,118421,118422,118423],{},"MuJoCo Python 官方文档：",[2178,118424,118425],{"href":118425,"rel":118426},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[25619],[29,118428,118429,118430],{},"MuJoCo XML Reference：",[2178,118431,118432],{"href":118432,"rel":118433},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[25619],[29,118435,118436,118437],{},"MuJoCo Overview：",[2178,118438,118439],{"href":118439,"rel":118440},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[25619],[14,118442,118443],{"id":118443},"章节目录",[26,118445,118446,118452,118458,118464,118470,118476,118482,118488],{},[29,118447,118448],{},[2178,118449,118451],{"href":118450},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[29,118453,118454],{},[2178,118455,118457],{"href":118456},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[29,118459,118460],{},[2178,118461,118463],{"href":118462},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[29,118465,118466],{},[2178,118467,118469],{"href":118468},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[29,118471,118472],{},[2178,118473,118475],{"href":118474},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[29,118477,118478],{},[2178,118479,118481],{"href":118480},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[29,118483,118484],{},[2178,118485,118487],{"href":118486},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[29,118489,118490],{},[2178,118491,118493],{"href":118492},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,118495,118496],{"id":118496},"推荐学习路线",[154,118498,118501],{"className":118499,"code":118500,"language":159,"meta":160},[157],"环境安装\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",[70,118502,118500],{"__ignoreMap":160},[19,118504,118505],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,118507,118508],{"id":118508},"建议的目录结构",[19,118510,118511],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[154,118513,118515],{"className":172,"code":118514,"language":174,"meta":160,"style":160},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[70,118516,118517,118525],{"__ignoreMap":160},[178,118518,118519,118521,118523],{"class":180,"line":181},[178,118520,102947],{"class":184},[178,118522,30963],{"class":195},[178,118524,102952],{"class":188},[178,118526,118527,118529],{"class":180,"line":263},[178,118528,102957],{"class":195},[178,118530,102952],{"class":188},[19,118532,118533],{},"每一章的代码都单独保存：",[154,118535,118538],{"className":118536,"code":118537,"language":159,"meta":160},[157],"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",[70,118539,118537],{"__ignoreMap":160},[19,118541,118542],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,118544,118545],{"id":118545},"学习方法",[19,118547,118548],{},"每章建议按这个顺序操作：",[26,118550,118551,118554,118557,118560,118563,118566],{},[29,118552,118553],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[29,118555,118556],{},"复制最小可运行代码，保存成指定文件。",[29,118558,118559],{},"运行代码，确认没有报错。",[29,118561,118562],{},"对照“运行结果说明”理解输出。",[29,118564,118565],{},"做“验证步骤”，主动改一两个参数。",[29,118567,118568],{},"遇到报错先看“常见错误与解决方案”。",[19,118570,118571],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,118573,118574],{"id":118574},"全局排错顺序",[19,118576,118577],{},"遇到问题时，按下面顺序查：",[26,118579,118580,118586,118592,118597,118600,118603,118610,118620],{},[29,118581,118582,118583],{},"Python 环境是否激活：",[70,118584,118585],{},"which python",[29,118587,118588,118589],{},"MuJoCo 是否能导入：",[70,118590,118591],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[29,118593,118594,118595],{},"是否误装了 ",[70,118596,102710],{},[29,118598,118599],{},"XML 标签是否闭合、属性是否拼写正确",[29,118601,118602],{},"actuator 引用的 joint 名字是否存在",[29,118604,118605,118607,118608],{},[70,118606,102768],{}," 的长度是否等于 ",[70,118609,103807],{},[29,118611,106950,118612,1815,118614,118616,118617],{},[70,118613,1580],{},[70,118615,105725],{}," 后是否调用了 ",[70,118618,118619],{},"mujoco.mj_forward",[29,118621,118622],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[1853,118624,118625],{},"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":160,"searchDepth":263,"depth":263,"links":118627},[118628,118629,118630,118631,118632,118633,118634,118635],{"id":118269,"depth":263,"text":118269},{"id":118298,"depth":263,"text":118299},{"id":118328,"depth":263,"text":118328},{"id":118443,"depth":263,"text":118443},{"id":118496,"depth":263,"text":118496},{"id":118508,"depth":263,"text":118508},{"id":118545,"depth":263,"text":118545},{"id":118574,"depth":263,"text":118574},"仿真搭建。",{"category":25137},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118212,"description":118636},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":118643,"title":118644,"body":118645,"description":25135,"extension":1880,"meta":119100,"navigation":721,"path":119101,"seo":119102,"stem":119103,"__hash__":119104},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":118646,"toc":119098},[118647,118650,118653,118659,119095],[10,118648,118644],{"id":118649},"_1-最常用的基本操作更新",[19,118651,118652],{},"装linux系统教程：",[19,118654,118655],{},[2178,118656,118657],{"href":118657,"rel":118658},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[25619],[154,118660,118664],{"className":118661,"code":118662,"language":118663,"meta":160,"style":160},"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",[70,118665,118666,118671,118676,118685,118690,118699,118704,118724,118729,118740,118745,118754,118759,118787,118792,118811,118816,118835,118839,118844,118860,118864,118869,118899,118903,118908,118924,118928,118933,118948,118952,118957,118973,118977,118982,118994,119006,119010,119015,119032,119036,119041,119059,119063,119068,119077,119081,119086],{"__ignoreMap":160},[178,118667,118668],{"class":180,"line":181},[178,118669,118670],{"class":2008},"#更新相关的知识\n",[178,118672,118673],{"class":180,"line":263},[178,118674,118675],{"class":2008},"# 更新软件包列表（从服务器获取最新软件信息）\n",[178,118677,118678,118680,118683],{"class":180,"line":274},[178,118679,185],{"class":184},[178,118681,118682],{"class":188}," apt",[178,118684,27993],{"class":188},[178,118686,118687],{"class":180,"line":354},[178,118688,118689],{"class":2008},"# 升级所有可更新的软件包（不删除旧包）\n",[178,118691,118692,118694,118696],{"class":180,"line":364},[178,118693,185],{"class":184},[178,118695,118682],{"class":188},[178,118697,118698],{"class":188}," upgrade\n",[178,118700,118701],{"class":180,"line":740},[178,118702,118703],{"class":2008},"#更新和升级软件包\n",[178,118705,118706,118708,118710,118713,118715,118717,118719,118722],{"class":180,"line":746},[178,118707,185],{"class":184},[178,118709,118682],{"class":188},[178,118711,118712],{"class":188}," update",[178,118714,27941],{"class":319},[178,118716,185],{"class":184},[178,118718,118682],{"class":188},[178,118720,118721],{"class":188}," upgrade",[178,118723,260],{"class":195},[178,118725,118726],{"class":180,"line":752},[178,118727,118728],{"class":2008},"#列出可更新的软件包及版本信息\n",[178,118730,118731,118734,118737],{"class":180,"line":757},[178,118732,118733],{"class":184},"apt",[178,118735,118736],{"class":188}," list",[178,118738,118739],{"class":195}," --upgradable\n",[178,118741,118742],{"class":180,"line":763},[178,118743,118744],{"class":2008},"#彻底升级（处理依赖关系，可能删除旧包）\n",[178,118746,118747,118749,118751],{"class":180,"line":769},[178,118748,185],{"class":184},[178,118750,118682],{"class":188},[178,118752,118753],{"class":188}," full-upgrade\n",[178,118755,118756],{"class":180,"line":774},[178,118757,118758],{"class":2008},"#设置指定版本\n",[178,118760,118761,118763,118765,118767,118769,118772,118774,118776,118778,118780,118783,118785],{"class":180,"line":780},[178,118762,185],{"class":184},[178,118764,118682],{"class":188},[178,118766,192],{"class":188},[178,118768,30650],{"class":699},[178,118770,118771],{"class":188},"package_nam",[178,118773,2024],{"class":319},[178,118775,2899],{"class":699},[178,118777,330],{"class":188},[178,118779,320],{"class":699},[178,118781,118782],{"class":188},"version_numbe",[178,118784,2610],{"class":319},[178,118786,336],{"class":699},[178,118788,118789],{"class":180,"line":786},[178,118790,118791],{"class":2008},"#只安装软件包不升级\n",[178,118793,118794,118796,118798,118800,118802,118804,118806,118808],{"class":180,"line":792},[178,118795,185],{"class":184},[178,118797,118682],{"class":188},[178,118799,192],{"class":188},[178,118801,30650],{"class":699},[178,118803,118771],{"class":188},[178,118805,2024],{"class":319},[178,118807,2899],{"class":699},[178,118809,118810],{"class":195}," --no-upgrade\n",[178,118812,118813],{"class":180,"line":798},[178,118814,118815],{"class":2008},"#只升级，不存在就不安装\n",[178,118817,118818,118820,118822,118824,118826,118828,118830,118832],{"class":180,"line":804},[178,118819,185],{"class":184},[178,118821,118682],{"class":188},[178,118823,192],{"class":188},[178,118825,30650],{"class":699},[178,118827,118771],{"class":188},[178,118829,2024],{"class":319},[178,118831,2899],{"class":699},[178,118833,118834],{"class":195}," --only-upgrade\n",[178,118836,118837],{"class":180,"line":810},[178,118838,722],{"emptyLinePlaceholder":721},[178,118840,118841],{"class":180,"line":816},[178,118842,118843],{"class":2008},"#安装指定的软件命令\n",[178,118845,118846,118848,118850,118852,118854,118856,118858],{"class":180,"line":822},[178,118847,185],{"class":184},[178,118849,118682],{"class":188},[178,118851,192],{"class":188},[178,118853,30650],{"class":699},[178,118855,118771],{"class":188},[178,118857,2024],{"class":319},[178,118859,336],{"class":699},[178,118861,118862],{"class":180,"line":827},[178,118863,722],{"emptyLinePlaceholder":721},[178,118865,118866],{"class":180,"line":832},[178,118867,118868],{"class":2008},"#安装多个软件包\n",[178,118870,118871,118873,118875,118877,118879,118882,118885,118887,118889,118892,118894,118896],{"class":180,"line":850},[178,118872,185],{"class":184},[178,118874,118682],{"class":188},[178,118876,192],{"class":188},[178,118878,30650],{"class":699},[178,118880,118881],{"class":188},"package_",[178,118883,118884],{"class":699},"1>",[178,118886,30650],{"class":699},[178,118888,118881],{"class":188},[178,118890,118891],{"class":699},"2>",[178,118893,30650],{"class":699},[178,118895,118881],{"class":188},[178,118897,118898],{"class":699},"3>\n",[178,118900,118901],{"class":180,"line":866},[178,118902,722],{"emptyLinePlaceholder":721},[178,118904,118905],{"class":180,"line":877},[178,118906,118907],{"class":2008},"#更新指定的软件命令\n",[178,118909,118910,118912,118914,118916,118918,118920,118922],{"class":180,"line":882},[178,118911,185],{"class":184},[178,118913,118682],{"class":188},[178,118915,118712],{"class":188},[178,118917,30650],{"class":699},[178,118919,118771],{"class":188},[178,118921,2024],{"class":319},[178,118923,336],{"class":699},[178,118925,118926],{"class":180,"line":898},[178,118927,722],{"emptyLinePlaceholder":721},[178,118929,118930],{"class":180,"line":914},[178,118931,118932],{"class":2008},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[178,118934,118935,118937,118940,118942,118944,118946],{"class":180,"line":919},[178,118936,118733],{"class":184},[178,118938,118939],{"class":188}," show",[178,118941,30650],{"class":699},[178,118943,118771],{"class":188},[178,118945,2024],{"class":319},[178,118947,336],{"class":699},[178,118949,118950],{"class":180,"line":935},[178,118951,722],{"emptyLinePlaceholder":721},[178,118953,118954],{"class":180,"line":952},[178,118955,118956],{"class":2008},"#删除软件包命令\n",[178,118958,118959,118961,118963,118965,118967,118969,118971],{"class":180,"line":966},[178,118960,185],{"class":184},[178,118962,118682],{"class":188},[178,118964,27830],{"class":188},[178,118966,30650],{"class":699},[178,118968,118771],{"class":188},[178,118970,2024],{"class":319},[178,118972,336],{"class":699},[178,118974,118975],{"class":180,"line":980},[178,118976,722],{"emptyLinePlaceholder":721},[178,118978,118979],{"class":180,"line":985},[178,118980,118981],{"class":2008},"# 清理旧版本和缓存（释放磁盘空间）\n",[178,118983,118984,118986,118988,118991],{"class":180,"line":1008},[178,118985,185],{"class":184},[178,118987,118682],{"class":188},[178,118989,118990],{"class":188}," autoremove",[178,118992,118993],{"class":2008},"  # 删除不再需要的依赖和库文件\n",[178,118995,118996,118998,119000,119003],{"class":180,"line":1014},[178,118997,185],{"class":184},[178,118999,118682],{"class":188},[178,119001,119002],{"class":188}," clean",[178,119004,119005],{"class":2008},"       # 清理下载的缓存包\n",[178,119007,119008],{"class":180,"line":1019},[178,119009,722],{"emptyLinePlaceholder":721},[178,119011,119012],{"class":180,"line":1033},[178,119013,119014],{"class":2008},"#移除软件包及配置文件\n",[178,119016,119017,119019,119021,119024,119026,119028,119030],{"class":180,"line":1046},[178,119018,185],{"class":184},[178,119020,118682],{"class":188},[178,119022,119023],{"class":188}," purge",[178,119025,30650],{"class":699},[178,119027,118771],{"class":188},[178,119029,2024],{"class":319},[178,119031,336],{"class":699},[178,119033,119034],{"class":180,"line":1059},[178,119035,722],{"emptyLinePlaceholder":721},[178,119037,119038],{"class":180,"line":1072},[178,119039,119040],{"class":2008},"#查找软件包命令\n",[178,119042,119043,119045,119047,119050,119052,119055,119057],{"class":180,"line":1077},[178,119044,185],{"class":184},[178,119046,118682],{"class":188},[178,119048,119049],{"class":188}," search",[178,119051,30650],{"class":699},[178,119053,119054],{"class":188},"keywor",[178,119056,2254],{"class":319},[178,119058,336],{"class":699},[178,119060,119061],{"class":180,"line":1082},[178,119062,722],{"emptyLinePlaceholder":721},[178,119064,119065],{"class":180,"line":1099},[178,119066,119067],{"class":2008},"#列出所有已安装的包\n",[178,119069,119070,119072,119074],{"class":180,"line":9806},[178,119071,118733],{"class":184},[178,119073,118736],{"class":188},[178,119075,119076],{"class":195}," --installed\n",[178,119078,119079],{"class":180,"line":9818},[178,119080,722],{"emptyLinePlaceholder":721},[178,119082,119083],{"class":180,"line":11477},[178,119084,119085],{"class":2008},"#列出所有已安装的包的版本信息\n",[178,119087,119088,119090,119092],{"class":180,"line":11502},[178,119089,118733],{"class":184},[178,119091,118736],{"class":188},[178,119093,119094],{"class":195}," --all-versions\n",[1853,119096,119097],{},"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":160,"searchDepth":263,"depth":263,"links":119099},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":118644,"description":25135},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119106,"title":119107,"body":119108,"description":25135,"extension":1880,"meta":119849,"navigation":721,"path":119850,"seo":119851,"stem":119852,"__hash__":119853},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119109,"toc":119836},[119110,119113,119117,119120,119126,119130,119134,119140,119145,119150,119155,119160,119165,119168,119171,119174,119177,119181,119184,119189,119192,119197,119200,119205,119212,119215,119218,119221,119224,119227,119238,119242,119246,119251,119256,119260,119265,119269,119274,119278,119282,119287,119290,119335,119340,119344,119348,119353,119359,119364,119374,119379,119389,119394,119399,119426,119430,119433,119438,119441,119466,119470,119475,119478,119483,119488,119508,119513,119516,119531,119535,119588,119591,119596,119600,119603,119618,119621,119624,119629,119633,119637,119640,119644,119648,119651,119656,119661,119665,119672,119680,119683,119690,119695,119700,119703,119708,119715,119720,119727,119731,119733,119738,119742,119745,119748,119753,119756,119761,119764,119769,119774,119779,119783,119788,119792,119833],[10,119111,119107],{"id":119112},"_2-linux装机教程",[14,119114,119116],{"id":119115},"_21-实体机","2.1 实体机",[19,119118,119119],{},"使用清华源：（Ubuntu24.04）",[19,119121,119122],{},[2178,119123,119124],{"href":119124,"rel":119125},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[25619],[14,119127,119129],{"id":119128},"_22-普通虚拟机","2.2 普通虚拟机",[387,119131,119133],{"id":119132},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,119135,119136],{},[2178,119137,119138],{"href":119138,"rel":119139},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[25619],[19,119141,119142],{},[3269,119143],{"alt":160,"src":119144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,119146,119147],{},[3269,119148],{"alt":160,"src":119149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,119151,119152],{},[3269,119153],{"alt":160,"src":119154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,119156,119157],{},[3269,119158],{"alt":160,"src":119159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,119161,119162],{},[3269,119163],{"alt":160,"src":119164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,119166,119167],{},"内存4G（4096MB）；",[19,119169,119170],{},"CPU给4个核；",[19,119172,119173],{},"硬盘动态分配60G；",[19,119175,119176],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[387,119178,119180],{"id":119179},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,119182,119183],{},"按照1.1的步骤下载Ubuntu",[19,119185,119186],{},[3269,119187],{"alt":160,"src":119188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,119190,119191],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,119193,119194],{},[3269,119195],{"alt":160,"src":119196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,119198,119199],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,119201,119202],{},[3269,119203],{"alt":160,"src":119204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,119206,119207,119208,119211],{},"选择“正常安装”(找不到都用Alt+F7)， ",[2093,119209,119210],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,119213,119214],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,119216,119217],{},"将改动写入磁盘吗 继续",[19,119219,119220],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,119222,119223],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,119225,119226],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,119228,119229,119230,119233,119234,119237],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[2093,119231,119232],{},"除了"," 选不发送系统信息与不升级之外， ",[2093,119235,119236],{},"其它"," 都跳过或前进）",[387,119239,119241],{"id":119240},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[23756,119243,119245],{"id":119244},"_2231-全屏","2.2.3.1 全屏",[19,119247,119248],{},[3269,119249],{"alt":160,"src":119250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,119252,119253],{},[3269,119254],{"alt":160,"src":119255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[23756,119257,119259],{"id":119258},"_2232-文件交换","2.2.3.2 文件交换",[19,119261,119262],{},[3269,119263],{"alt":160,"src":119264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[23756,119266,119268],{"id":119267},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,119270,119271],{},[3269,119272],{"alt":160,"src":119273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119275,119277],{"id":119276},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[387,119279,119281],{"id":119280},"_231-简介与优缺点","2.3.1 简介与优缺点",[26,119283,119284],{},[29,119285,119286],{},"什么情况下推荐？",[19,119288,119289],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[26,119291,119292],{"start":263},[29,119293,119294,119295],{},"优缺点：",[26,119296,119297,119327],{},[29,119298,119299,119300],{},"优点：",[26,119301,119302,119305,119312,119315,119318,119321,119324],{},[29,119303,119304],{},"WSL2是最好的Linux发行版;(bushi)",[29,119306,119307,119308,119311],{},"性能损耗极低。且比在Windows上跑深度性能 ",[2093,119309,119310],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[29,119313,119314],{},"非常方便调用USB设备，可以USB直通;",[29,119316,119317],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[29,119319,119320],{},"非常方便Win与WSL2互相传文件等协同操作;",[29,119322,119323],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[29,119325,119326],{},"非常方便使用Windows的VScode远程开发;",[29,119328,119329,119330],{},"缺点：",[26,119331,119332],{},[29,119333,119334],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,119336,119337],{},[3269,119338],{"alt":160,"src":119339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[387,119341,119343],{"id":119342},"_232-安装教程","2.3.2 安装教程",[23756,119345,119347],{"id":119346},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[26,119349,119350],{},[29,119351,119352],{},"方法一(图形界面)",[19,119354,119355,119356,26372],{},"用Win+R输入",[70,119357,119358],{},"appwiz.cpl",[19,119360,119361],{},[3269,119362],{"alt":160,"src":119363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,119365,119366,119367,119370,119371,28222],{},"点击OK进入 ",[2093,119368,119369],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[2093,119372,119373],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,119375,119376],{},[3269,119377],{"alt":160,"src":119378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,119380,119381,119382,404,119385,119388],{},"选择 ",[2093,119383,119384],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[2093,119386,119387],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,119390,119391],{},[3269,119392],{"alt":160,"src":119393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[26,119395,119396],{"start":263},[29,119397,119398],{},"方法二(命令行)",[154,119400,119404],{"className":119401,"code":119402,"language":119403,"meta":160,"style":160},"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",[70,119405,119406,119411,119416,119421],{"__ignoreMap":160},[178,119407,119408],{"class":180,"line":181},[178,119409,119410],{},"# 开启 Linux 子系统\n",[178,119412,119413],{"class":180,"line":263},[178,119414,119415],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[178,119417,119418],{"class":180,"line":274},[178,119419,119420],{},"# 开启虚拟机平台\n",[178,119422,119423],{"class":180,"line":354},[178,119424,119425],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[23756,119427,119429],{"id":119428},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,119431,119432],{},"用管理员权限打开powershell",[19,119434,119435],{},[3269,119436],{"alt":160,"src":119437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,119439,119440],{},"升级WSL并设置默认版本为WSL2",[154,119442,119444],{"className":119401,"code":119443,"language":119403,"meta":160,"style":160},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[70,119445,119446,119451,119456,119461],{"__ignoreMap":160},[178,119447,119448],{"class":180,"line":181},[178,119449,119450],{},"# 更新 wsl\n",[178,119452,119453],{"class":180,"line":263},[178,119454,119455],{},"wsl --update\n",[178,119457,119458],{"class":180,"line":274},[178,119459,119460],{},"# 将 wsl 版本设置为 wsl2\n",[178,119462,119463],{"class":180,"line":354},[178,119464,119465],{},"wsl --set-default-version 2\n",[23756,119467,119469],{"id":119468},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[26,119471,119472],{},[29,119473,119474],{},"方式一(商店下载)",[19,119476,119477],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,119479,119480],{},[3269,119481],{"alt":160,"src":119482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[26,119484,119485],{"start":263},[29,119486,119487],{},"方式二(命令行安装)",[154,119489,119491],{"className":119401,"code":119490,"language":119403,"meta":160,"style":160},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[70,119492,119493,119498,119503],{"__ignoreMap":160},[178,119494,119495],{"class":180,"line":181},[178,119496,119497],{},"# 列出可安装的 Linux 版本\n",[178,119499,119500],{"class":180,"line":263},[178,119501,119502],{},"#（需要科学手段）\n",[178,119504,119505],{"class":180,"line":274},[178,119506,119507],{},"wsl --list --online\n",[19,119509,119510],{},[3269,119511],{"alt":160,"src":119512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,119514,119515],{},"选择对应发行版并安装",[154,119517,119519],{"className":119401,"code":119518,"language":119403,"meta":160,"style":160},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[70,119520,119521,119526],{"__ignoreMap":160},[178,119522,119523],{"class":180,"line":181},[178,119524,119525],{},"# Ubuntu安装完毕后需要重启系统\n",[178,119527,119528],{"class":180,"line":263},[178,119529,119530],{},"wsl --install -d Ubuntu-24.04\n",[23756,119532,119534],{"id":119533},"_2324-查看系统状态","2.3.2.4 查看系统状态",[154,119536,119538],{"className":119401,"code":119537,"language":119403,"meta":160,"style":160},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[70,119539,119540,119545,119550,119555,119560,119564,119568,119573,119578,119583],{"__ignoreMap":160},[178,119541,119542],{"class":180,"line":181},[178,119543,119544],{},"# 查看 wsl\n",[178,119546,119547],{"class":180,"line":263},[178,119548,119549],{},"wsl -l\n",[178,119551,119552],{"class":180,"line":274},[178,119553,119554],{},"# 查看 wsl 运行版本或模式\n",[178,119556,119557],{"class":180,"line":354},[178,119558,119559],{},"wsl -l -v\n",[178,119561,119562],{"class":180,"line":364},[178,119563,722],{"emptyLinePlaceholder":721},[178,119565,119566],{"class":180,"line":740},[178,119567,722],{"emptyLinePlaceholder":721},[178,119569,119570],{"class":180,"line":746},[178,119571,119572],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[178,119574,119575],{"class":180,"line":752},[178,119576,119577],{},"wsl --set-version \u003Cdistro> 2\n",[178,119579,119580],{"class":180,"line":757},[178,119581,119582],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[178,119584,119585],{"class":180,"line":763},[178,119586,119587],{},"wsl --unregister \u003Cdistro>\n",[19,119589,119590],{},"输出Version为2即正常",[19,119592,119593],{},[3269,119594],{"alt":160,"src":119595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[23756,119597,119599],{"id":119598},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,119601,119602],{},"直接在Powershell里输入wsl命令进入子系统",[154,119604,119606],{"className":119401,"code":119605,"language":119403,"meta":160,"style":160},"# 进入子系统\nwsl\n",[70,119607,119608,119613],{"__ignoreMap":160},[178,119609,119610],{"class":180,"line":181},[178,119611,119612],{},"# 进入子系统\n",[178,119614,119615],{"class":180,"line":263},[178,119616,119617],{},"wsl\n",[19,119619,119620],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,119622,119623],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,119625,119626],{},[3269,119627],{"alt":160,"src":119628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[387,119630,119632],{"id":119631},"_233-配置各种环境","2.3.3 配置各种环境",[23756,119634,119636],{"id":119635},"_2331-换源","2.3.3.1 换源",[19,119638,119639],{},"(同实体机LINUX，往下找教程)",[23756,119641,119643],{"id":119642},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24668,119645,119647],{"id":119646},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,119649,119650],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,119652,119653],{},[3269,119654],{"alt":160,"src":119655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,119657,119658],{},[3269,119659],{"alt":160,"src":119660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24668,119662,119664],{"id":119663},"_23322-cuda","2.3.3.2.2 CUDA",[19,119666,119667,119668],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[2178,119669,119670],{"href":119670,"rel":119671},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[25619],[19,119673,119674,119677],{},[3269,119675],{"alt":160,"src":119676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[3269,119678],{"alt":160,"src":119679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,119681,119682],{},"在下方的网站，选择合适的版本。",[19,119684,119685,119686],{},"WSL2 专属 CUDA 指南：",[2178,119687,119688],{"href":119688,"rel":119689},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[25619],[19,119691,119692],{},[2093,119693,119694],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,119696,119697],{},[3269,119698],{"alt":160,"src":119699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,119701,119702],{},"挨行敲一遍",[19,119704,119705],{},[3269,119706],{"alt":160,"src":119707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,119709,119710,119711,119714],{},"敲完后，输入",[70,119712,119713],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,119716,119717],{},[3269,119718],{"alt":160,"src":119719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,119721,119722,119723,119726],{},"（请详看下方教程的",[2093,119724,119725],{},"安装CUDA的配置环境来看","如何配置环境）",[24668,119728,119730],{"id":119729},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,119732,119639],{},[19,119734,119735],{},[3269,119736],{"alt":160,"src":119737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[23756,119739,119741],{"id":119740},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,119743,119744],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,119746,119747],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,119749,119750],{},[3269,119751],{"alt":160,"src":119752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,119754,119755],{},"连接WSL2",[19,119757,119758],{},[3269,119759],{"alt":160,"src":119760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,119762,119763],{},"远程开发成功。",[19,119765,119766],{},[3269,119767],{"alt":160,"src":119768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,119770,119771],{},[3269,119772],{"alt":160,"src":119773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,119775,119776],{},[3269,119777],{"alt":160,"src":119778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[23756,119780,119782],{"id":119781},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,119784,119785],{},[3269,119786],{"alt":160,"src":119787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[23756,119789,119791],{"id":119790},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[154,119793,119795],{"className":118661,"code":119794,"language":118663,"meta":160,"style":160},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[70,119796,119797,119805,119813,119824,119828],{"__ignoreMap":160},[178,119798,119799,119801,119803],{"class":180,"line":181},[178,119800,185],{"class":184},[178,119802,118682],{"class":188},[178,119804,27993],{"class":188},[178,119806,119807,119809,119811],{"class":180,"line":263},[178,119808,185],{"class":184},[178,119810,118682],{"class":188},[178,119812,118698],{"class":188},[178,119814,119815,119817,119819,119821],{"class":180,"line":274},[178,119816,185],{"class":184},[178,119818,118682],{"class":188},[178,119820,192],{"class":188},[178,119822,119823],{"class":188}," mesa-utils\n",[178,119825,119826],{"class":180,"line":354},[178,119827,722],{"emptyLinePlaceholder":721},[178,119829,119830],{"class":180,"line":364},[178,119831,119832],{"class":2008},"#然后重启wsl2即可\n",[1853,119834,119835],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":160,"searchDepth":263,"depth":263,"links":119837},[119838,119839,119844],{"id":119115,"depth":263,"text":119116},{"id":119128,"depth":263,"text":119129,"children":119840},[119841,119842,119843],{"id":119132,"depth":274,"text":119133},{"id":119179,"depth":274,"text":119180},{"id":119240,"depth":274,"text":119241},{"id":119276,"depth":263,"text":119277,"children":119845},[119846,119847,119848],{"id":119280,"depth":274,"text":119281},{"id":119342,"depth":274,"text":119343},{"id":119631,"depth":274,"text":119632},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119107,"description":25135},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":119855,"title":119856,"body":119857,"description":25135,"extension":1880,"meta":122793,"navigation":721,"path":122794,"seo":122795,"stem":122796,"__hash__":122797},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":119858,"toc":122765},[119859,119862,119866,119872,119876,119882,119886,120074,120077,120082,120086,120090,120093,120096,120102,120107,120110,120113,120118,120151,120156,120160,120237,120240,120245,120249,120252,120291,120294,120303,120321,120326,120333,120450,120455,120458,120485,120490,120494,120503,120553,120560,120564,120567,120581,120588,120622,120627,120631,120654,120657,120662,120666,120669,120672,120675,120717,120721,120724,120727,120768,120772,120776,120779,120784,120789,120792,120815,120818,120826,120831,120834,120839,120844,120847,120852,120856,120861,120884,120889,120951,120959,120964,120969,120972,120977,120980,120985,120990,121008,121013,121019,121024,121038,121042,121045,121048,121051,121094,121097,121102,121203,121206,121211,121215,121219,121256,121260,121264,121268,121314,121318,121363,121367,121374,121382,121437,121440,121517,121520,121543,121547,121550,121555,121560,121568,121571,121576,121581,121586,121589,121594,121603,121606,121611,121614,121685,121690,121693,121698,121701,121706,121709,121714,121717,121722,121727,121730,121805,121808,121821,121826,121829,121843,121846,121875,121880,121909,121912,121917,121921,121926,121935,121938,121943,121946,121951,121954,121957,121962,121965,121970,121975,121978,121983,121986,122111,122116,122146,122149,122154,122159,122176,122179,122222,122225,122252,122257,122270,122413,122417,122422,122436,122439,122490,122493,122523,122526,122542,122547,122561,122564,122631,122636,122645,122650,122653,122665,122670,122677,122701,122704,122709,122712,122731,122736,122743,122755,122762],[10,119860,119856],{"id":119861},"_3-安装必备配置",[14,119863,119865],{"id":119864},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[154,119867,119870],{"className":119868,"code":119869,"language":159},[157],"  打开下方网站（注意，该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",[70,119871,119869],{"__ignoreMap":160},[387,119873,119875],{"id":119874},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[154,119877,119880],{"className":119878,"code":119879,"language":159},[157],"  输入以下命令\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",[70,119881,119879],{"__ignoreMap":160},[387,119883,119885],{"id":119884},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[154,119887,119891],{"className":119888,"code":119889,"language":119890,"meta":160,"style":160},"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",[70,119892,119893,119901,119912,119924,119938,119942,119952,119957,119961,119965,119970,119974,119986,119990,119995,119999,120010,120014,120030,120034,120045,120049,120054,120058,120066],{"__ignoreMap":160},[178,119894,119895,119897,119899],{"class":180,"line":181},[178,119896,185],{"class":184},[178,119898,118682],{"class":188},[178,119900,27993],{"class":188},[178,119902,119903,119905,119907,119909],{"class":180,"line":263},[178,119904,185],{"class":184},[178,119906,118682],{"class":188},[178,119908,192],{"class":188},[178,119910,119911],{"class":188}," vim\n",[178,119913,119914,119916,119919,119921],{"class":180,"line":274},[178,119915,185],{"class":184},[178,119917,119918],{"class":188}," rm",[178,119920,27077],{"class":195},[178,119922,119923],{"class":188}," \u002Fetc\u002Fapt\u002Fsources.list\n",[178,119925,119926,119928,119930,119932,119935],{"class":180,"line":354},[178,119927,185],{"class":184},[178,119929,119918],{"class":188},[178,119931,27077],{"class":195},[178,119933,119934],{"class":188}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[178,119936,119937],{"class":195},"**\n",[178,119939,119940],{"class":180,"line":364},[178,119941,722],{"emptyLinePlaceholder":721},[178,119943,119944,119946,119949],{"class":180,"line":740},[178,119945,185],{"class":184},[178,119947,119948],{"class":188}," vim",[178,119950,119951],{"class":188}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[178,119953,119954],{"class":180,"line":746},[178,119955,119956],{"class":188},"```\n",[178,119958,119959],{"class":180,"line":752},[178,119960,722],{"emptyLinePlaceholder":721},[178,119962,119963],{"class":180,"line":757},[178,119964,722],{"emptyLinePlaceholder":721},[178,119966,119967],{"class":180,"line":763},[178,119968,119969],{"class":184},"选择好Ubuntu版本后，复制下方的内容。\n",[178,119971,119972],{"class":180,"line":769},[178,119973,722],{"emptyLinePlaceholder":721},[178,119975,119976,119978,119981,119984],{"class":180,"line":774},[178,119977,2166],{"class":699},[178,119979,119980],{"class":188},"[](",[178,119982,119983],{"class":184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[178,119985,863],{"class":188},[178,119987,119988],{"class":180,"line":780},[178,119989,722],{"emptyLinePlaceholder":721},[178,119991,119992],{"class":180,"line":786},[178,119993,119994],{"class":184},"粘贴进去\n",[178,119996,119997],{"class":180,"line":792},[178,119998,722],{"emptyLinePlaceholder":721},[178,120000,120001,120003,120005,120008],{"class":180,"line":798},[178,120002,2166],{"class":699},[178,120004,119980],{"class":188},[178,120006,120007],{"class":184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[178,120009,863],{"class":188},[178,120011,120012],{"class":180,"line":804},[178,120013,722],{"emptyLinePlaceholder":721},[178,120015,120016,120019,120022,120025,120027],{"class":180,"line":810},[178,120017,120018],{"class":184},"按一下ESC，然后英文冒号，输入",[178,120020,120021],{"class":188}," `",[178,120023,120024],{"class":184},":wq!",[178,120026,2911],{"class":188},[178,120028,120029],{"class":184},"然后回车\n",[178,120031,120032],{"class":180,"line":816},[178,120033,722],{"emptyLinePlaceholder":721},[178,120035,120036,120038,120040,120043],{"class":180,"line":822},[178,120037,2166],{"class":699},[178,120039,119980],{"class":188},[178,120041,120042],{"class":184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[178,120044,863],{"class":188},[178,120046,120047],{"class":180,"line":827},[178,120048,722],{"emptyLinePlaceholder":721},[178,120050,120051],{"class":180,"line":832},[178,120052,120053],{"class":184},"输入以下命令\n",[178,120055,120056],{"class":180,"line":850},[178,120057,722],{"emptyLinePlaceholder":721},[178,120059,120060,120063],{"class":180,"line":866},[178,120061,120062],{"class":188},"```",[178,120064,120065],{"class":184},"Bash\n",[178,120067,120068,120070,120072],{"class":180,"line":877},[178,120069,185],{"class":184},[178,120071,118682],{"class":188},[178,120073,27993],{"class":188},[19,120075,120076],{},"这里被替换成对应学校则成功",[19,120078,120079],{},[3269,120080],{"alt":160,"src":120081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120083,120085],{"id":120084},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[387,120087,120089],{"id":120088},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,120091,120092],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,120094,120095],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,120097,120098],{},[2178,120099,120100],{"href":120100,"rel":120101},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[25619],[19,120103,120104],{},[3269,120105],{"alt":160,"src":120106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,120108,120109],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,120111,120112],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,120114,120115],{},[3269,120116],{"alt":160,"src":120117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[154,120119,120121],{"className":118661,"code":120120,"language":118663,"meta":160,"style":160},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[70,120122,120123,120128,120135,120140],{"__ignoreMap":160},[178,120124,120125],{"class":180,"line":181},[178,120126,120127],{"class":2008},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[178,120129,120130,120132],{"class":180,"line":263},[178,120131,102957],{"class":195},[178,120133,120134],{"class":188}," ~\u002FDownloads\n",[178,120136,120137],{"class":180,"line":274},[178,120138,120139],{"class":2008},"#下方chrome安装包名不一定是这个，根据名字来看\n",[178,120141,120142,120144,120146,120148],{"class":180,"line":354},[178,120143,185],{"class":184},[178,120145,118682],{"class":188},[178,120147,192],{"class":188},[178,120149,120150],{"class":188}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,120152,120153],{},[3269,120154],{"alt":160,"src":120155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[387,120157,120159],{"id":120158},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[154,120161,120163],{"className":118661,"code":120162,"language":118663,"meta":160,"style":160},"# 老版\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",[70,120164,120165,120170,120178,120189,120194,120198,120203,120213,120221,120232],{"__ignoreMap":160},[178,120166,120167],{"class":180,"line":181},[178,120168,120169],{"class":2008},"# 老版\n",[178,120171,120172,120174,120176],{"class":180,"line":263},[178,120173,185],{"class":184},[178,120175,118682],{"class":188},[178,120177,27993],{"class":188},[178,120179,120180,120182,120184,120186],{"class":180,"line":274},[178,120181,185],{"class":184},[178,120183,118682],{"class":188},[178,120185,192],{"class":188},[178,120187,120188],{"class":188}," neofetch\n",[178,120190,120191],{"class":180,"line":354},[178,120192,120193],{"class":184},"neofetch\n",[178,120195,120196],{"class":180,"line":364},[178,120197,722],{"emptyLinePlaceholder":721},[178,120199,120200],{"class":180,"line":740},[178,120201,120202],{"class":2008},"# 新版\n",[178,120204,120205,120207,120210],{"class":180,"line":746},[178,120206,185],{"class":184},[178,120208,120209],{"class":188}," add-apt-repository",[178,120211,120212],{"class":188}," ppa:zhangsongcui3371\u002Ffastfetch\n",[178,120214,120215,120217,120219],{"class":180,"line":752},[178,120216,185],{"class":184},[178,120218,118682],{"class":188},[178,120220,27993],{"class":188},[178,120222,120223,120225,120227,120229],{"class":180,"line":757},[178,120224,185],{"class":184},[178,120226,118682],{"class":188},[178,120228,192],{"class":188},[178,120230,120231],{"class":188}," fastfetch\n",[178,120233,120234],{"class":180,"line":763},[178,120235,120236],{"class":184},"fastfetch\n",[19,120238,120239],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,120241,120242],{},[3269,120243],{"alt":160,"src":120244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[387,120246,120248],{"id":120247},"_323-移除snap应用","3.2.3 移除snap应用",[19,120250,120251],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[154,120253,120255],{"className":118661,"code":120254,"language":118663,"meta":160,"style":160},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[70,120256,120257,120269,120280],{"__ignoreMap":160},[178,120258,120259,120261,120263,120266],{"class":180,"line":181},[178,120260,185],{"class":184},[178,120262,28262],{"class":188},[178,120264,120265],{"class":188}," disable",[178,120267,120268],{"class":188}," snapd.service\n",[178,120270,120271,120273,120275,120277],{"class":180,"line":263},[178,120272,185],{"class":184},[178,120274,28262],{"class":188},[178,120276,120265],{"class":188},[178,120278,120279],{"class":188}," snapd.socket\n",[178,120281,120282,120284,120286,120288],{"class":180,"line":274},[178,120283,185],{"class":184},[178,120285,28262],{"class":188},[178,120287,120265],{"class":188},[178,120289,120290],{"class":188}," snapd.seeded.service\n",[19,120292,120293],{},"然后查看snap应用列表",[19,120295,120296,120297,120302],{},"根据你安装的选择不同（最小安装或普通安装），有",[2178,120298,120301],{"href":120299,"rel":120300},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[25619],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[154,120304,120306],{"className":118661,"code":120305,"language":118663,"meta":160,"style":160},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[70,120307,120308,120313],{"__ignoreMap":160},[178,120309,120310],{"class":180,"line":181},[178,120311,120312],{"class":2008},"# 查询当前系统上snap安装了哪些app\n",[178,120314,120315,120318],{"class":180,"line":263},[178,120316,120317],{"class":184},"snap",[178,120319,120320],{"class":188}," list\n",[19,120322,120323],{},[3269,120324],{"alt":160,"src":120325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,120327,120328,120329,120332],{},"卸载掉图中所有应用，按照 ",[2093,120330,120331],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[154,120334,120336],{"className":118661,"code":120335,"language":118663,"meta":160,"style":160},"#移除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",[70,120337,120338,120343,120355,120360,120371,120376,120387,120392,120403,120408,120412,120417,120428,120439],{"__ignoreMap":160},[178,120339,120340],{"class":180,"line":181},[178,120341,120342],{"class":2008},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[178,120344,120345,120347,120350,120352],{"class":180,"line":263},[178,120346,185],{"class":184},[178,120348,120349],{"class":188}," snap",[178,120351,27830],{"class":188},[178,120353,120354],{"class":188}," snap-store\n",[178,120356,120357],{"class":180,"line":274},[178,120358,120359],{"class":2008},"#移除firefox浏览器\n",[178,120361,120362,120364,120366,120368],{"class":180,"line":354},[178,120363,185],{"class":184},[178,120365,120349],{"class":188},[178,120367,27830],{"class":188},[178,120369,120370],{"class":188}," firefox\n",[178,120372,120373],{"class":180,"line":364},[178,120374,120375],{"class":2008},"#移除gnome-42-2204\n",[178,120377,120378,120380,120382,120384],{"class":180,"line":740},[178,120379,185],{"class":184},[178,120381,120349],{"class":188},[178,120383,27830],{"class":188},[178,120385,120386],{"class":188}," gnome-42-2204\n",[178,120388,120389],{"class":180,"line":746},[178,120390,120391],{"class":2008},"#移除gtk-common-themes\n",[178,120393,120394,120396,120398,120400],{"class":180,"line":752},[178,120395,185],{"class":184},[178,120397,120349],{"class":188},[178,120399,27830],{"class":188},[178,120401,120402],{"class":188}," gtk-common-themes\n",[178,120404,120405],{"class":180,"line":757},[178,120406,120407],{"class":2008},"#移除其它...\n",[178,120409,120410],{"class":180,"line":763},[178,120411,4450],{"class":319},[178,120413,120414],{"class":180,"line":769},[178,120415,120416],{"class":2008},"#移除core22,bare以及snapd\n",[178,120418,120419,120421,120423,120425],{"class":180,"line":774},[178,120420,185],{"class":184},[178,120422,120349],{"class":188},[178,120424,27830],{"class":188},[178,120426,120427],{"class":188}," core22\n",[178,120429,120430,120432,120434,120436],{"class":180,"line":780},[178,120431,185],{"class":184},[178,120433,120349],{"class":188},[178,120435,27830],{"class":188},[178,120437,120438],{"class":188}," bare\n",[178,120440,120441,120443,120445,120447],{"class":180,"line":786},[178,120442,185],{"class":184},[178,120444,120349],{"class":188},[178,120446,27830],{"class":188},[178,120448,120449],{"class":188}," snapd\n",[19,120451,120452],{},[3269,120453],{"alt":160,"src":120454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,120456,120457],{},"输入以下命令查看是否还有snap包",[154,120459,120461],{"className":118661,"code":120460,"language":118663,"meta":160,"style":160},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[70,120462,120463,120469,120473,120477,120481],{"__ignoreMap":160},[178,120464,120465,120467],{"class":180,"line":181},[178,120466,120317],{"class":184},[178,120468,120320],{"class":188},[178,120470,120471],{"class":180,"line":263},[178,120472,120169],{"class":2008},[178,120474,120475],{"class":180,"line":274},[178,120476,120193],{"class":184},[178,120478,120479],{"class":180,"line":354},[178,120480,120202],{"class":2008},[178,120482,120483],{"class":180,"line":364},[178,120484,120236],{"class":184},[19,120486,120487],{},[3269,120488],{"alt":160,"src":120489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[387,120491,120493],{"id":120492},"_324-移除snap","3.2.4 移除snap",[19,120495,120496,120497,120502],{},"在删除掉",[2178,120498,120501],{"href":120499,"rel":120500},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[25619],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[154,120504,120506],{"className":118661,"code":120505,"language":118663,"meta":160,"style":160}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[70,120507,120508,120513,120526,120531,120542],{"__ignoreMap":160},[178,120509,120510],{"class":180,"line":181},[178,120511,120512],{"class":2008}," #使用apt移除掉snap\n",[178,120514,120515,120517,120519,120521,120524],{"class":180,"line":263},[178,120516,185],{"class":184},[178,120518,118682],{"class":188},[178,120520,118990],{"class":188},[178,120522,120523],{"class":195}," --purge",[178,120525,120449],{"class":188},[178,120527,120528],{"class":180,"line":274},[178,120529,120530],{"class":2008},"#移除snapd的一些目录\n",[178,120532,120533,120535,120537,120539],{"class":180,"line":354},[178,120534,185],{"class":184},[178,120536,119918],{"class":188},[178,120538,27077],{"class":195},[178,120540,120541],{"class":188}," \u002Fvar\u002Fcache\u002Fsnapd\n",[178,120543,120544,120546,120548,120550],{"class":180,"line":364},[178,120545,185],{"class":184},[178,120547,119918],{"class":188},[178,120549,27077],{"class":195},[178,120551,120552],{"class":188}," ~\u002Fsnap\n",[19,120554,120555,120556,120559],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[70,120557,120558],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[387,120561,120563],{"id":120562},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,120565,120566],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[154,120568,120570],{"className":118661,"code":120569,"language":118663,"meta":160,"style":160},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[70,120571,120572],{"__ignoreMap":160},[178,120573,120574,120576,120578],{"class":180,"line":181},[178,120575,185],{"class":184},[178,120577,119948],{"class":188},[178,120579,120580],{"class":188}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,120582,120583,120584,120587],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[70,120585,120586],{},":wq"," 回车",[154,120589,120591],{"className":118661,"code":120590,"language":118663,"meta":160,"style":160},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[70,120592,120593,120600,120614],{"__ignoreMap":160},[178,120594,120595,120598],{"class":180,"line":181},[178,120596,120597],{"class":184},"Package:",[178,120599,120449],{"class":188},[178,120601,120602,120605,120608,120611],{"class":180,"line":263},[178,120603,120604],{"class":184},"Pin:",[178,120606,120607],{"class":188}," release",[178,120609,120610],{"class":188}," a=",[178,120612,120613],{"class":195},"*\n",[178,120615,120616,120619],{"class":180,"line":274},[178,120617,120618],{"class":184},"Pin-Priority:",[178,120620,120621],{"class":195}," -10\n",[19,120623,120624],{},[3269,120625],{"alt":160,"src":120626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[387,120628,120630],{"id":120629},"_326-测试是否成功","3.2.6 测试是否成功",[154,120632,120634],{"className":118661,"code":120633,"language":118663,"meta":160,"style":160},"sudo apt update\nsudo apt install firefox\n",[70,120635,120636,120644],{"__ignoreMap":160},[178,120637,120638,120640,120642],{"class":180,"line":181},[178,120639,185],{"class":184},[178,120641,118682],{"class":188},[178,120643,27993],{"class":188},[178,120645,120646,120648,120650,120652],{"class":180,"line":263},[178,120647,185],{"class":184},[178,120649,118682],{"class":188},[178,120651,192],{"class":188},[178,120653,120370],{"class":188},[19,120655,120656],{},"这里提示snapd无法被安装，就证明成功了",[19,120658,120659],{},[3269,120660],{"alt":160,"src":120661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[387,120663,120665],{"id":120664},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,120667,120668],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,120670,120671],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,120673,120674],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[154,120676,120678],{"className":118661,"code":120677,"language":118663,"meta":160,"style":160},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[70,120679,120680,120685,120694,120699,120707],{"__ignoreMap":160},[178,120681,120682],{"class":180,"line":181},[178,120683,120684],{"class":2008},"# 添加Mozilla提供的源\n",[178,120686,120687,120689,120691],{"class":180,"line":263},[178,120688,185],{"class":184},[178,120690,120209],{"class":188},[178,120692,120693],{"class":188}," ppa:mozillateam\u002Fppa\n",[178,120695,120696],{"class":180,"line":274},[178,120697,120698],{"class":2008},"# 安装Firefox\n",[178,120700,120701,120703,120705],{"class":180,"line":354},[178,120702,185],{"class":184},[178,120704,118682],{"class":188},[178,120706,27993],{"class":188},[178,120708,120709,120711,120713,120715],{"class":180,"line":364},[178,120710,185],{"class":184},[178,120712,118682],{"class":188},[178,120714,192],{"class":188},[178,120716,120370],{"class":188},[387,120718,120720],{"id":120719},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,120722,120723],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,120725,120726],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[154,120728,120730],{"className":118661,"code":120729,"language":118663,"meta":160,"style":160},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[70,120731,120732,120737,120747,120755,120759],{"__ignoreMap":160},[178,120733,120734],{"class":180,"line":181},[178,120735,120736],{"class":2008},"#删掉禁止安装snap的配置文件\n",[178,120738,120739,120741,120743,120745],{"class":180,"line":263},[178,120740,185],{"class":184},[178,120742,119918],{"class":188},[178,120744,27077],{"class":195},[178,120746,120580],{"class":188},[178,120748,120749,120751,120753],{"class":180,"line":274},[178,120750,185],{"class":184},[178,120752,118682],{"class":188},[178,120754,27993],{"class":188},[178,120756,120757],{"class":180,"line":354},[178,120758,722],{"emptyLinePlaceholder":721},[178,120760,120761,120763,120765],{"class":180,"line":364},[178,120762,185],{"class":184},[178,120764,118682],{"class":188},[178,120766,120767],{"class":188}," dist-update\n",[14,120769,120771],{"id":120770},"_33-中文输入法","3.3 中文输入法",[387,120773,120775],{"id":120774},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,120777,120778],{},"官网下载搜狗输入法",[19,120780,120781],{},[3269,120782],{"alt":160,"src":120783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,120785,120786],{},[3269,120787],{"alt":160,"src":120788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,120790,120791],{},"打开终端输入如下",[154,120793,120795],{"className":118661,"code":120794,"language":118663,"meta":160,"style":160},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[70,120796,120797,120804],{"__ignoreMap":160},[178,120798,120799,120801],{"class":180,"line":181},[178,120800,102957],{"class":195},[178,120802,120803],{"class":188}," ~\u002FDownloads\u002F\n",[178,120805,120806,120808,120810,120812],{"class":180,"line":263},[178,120807,185],{"class":184},[178,120809,118682],{"class":188},[178,120811,192],{"class":188},[178,120813,120814],{"class":188}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,120816,120817],{},"打开Fcitx",[19,120819,120820,120823],{},[3269,120821],{"alt":160,"src":120822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[3269,120824],{"alt":160,"src":120825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,120827,120828],{},[3269,120829],{"alt":160,"src":120830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,120832,120833],{},"添加搜狗输入法",[19,120835,120836],{},[3269,120837],{"alt":160,"src":120838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,120840,120841],{},[3269,120842],{"alt":160,"src":120843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,120845,120846],{},"将搜狗输入法设置为唯一输入法",[19,120848,120849],{},[3269,120850],{"alt":160,"src":120851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[387,120853,120855],{"id":120854},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[26,120857,120858],{},[29,120859,120860],{},"卸载旧输入法",[154,120862,120864],{"className":119888,"code":120863,"language":119890,"meta":160,"style":160},"sudo apt purge fcitx* ibus*\n",[70,120865,120866],{"__ignoreMap":160},[178,120867,120868,120870,120872,120874,120877,120879,120882],{"class":180,"line":181},[178,120869,185],{"class":184},[178,120871,118682],{"class":188},[178,120873,119023],{"class":188},[178,120875,120876],{"class":188}," fcitx",[178,120878,2395],{"class":195},[178,120880,120881],{"class":188}," ibus",[178,120883,120613],{"class":195},[26,120885,120886],{"start":263},[29,120887,120888],{},"安装Fcitx5",[154,120890,120892],{"className":118661,"code":120891,"language":118663,"meta":160,"style":160},"# 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",[70,120893,120894,120899,120913,120917,120922,120931,120939],{"__ignoreMap":160},[178,120895,120896],{"class":180,"line":181},[178,120897,120898],{"class":2008},"# Ubuntu22.04及以上、Debian12及以上\n",[178,120900,120901,120903,120905,120907,120910],{"class":180,"line":263},[178,120902,185],{"class":184},[178,120904,118682],{"class":188},[178,120906,192],{"class":188},[178,120908,120909],{"class":188}," fcitx5",[178,120911,120912],{"class":188}," fcitx5-chinese-addons\n",[178,120914,120915],{"class":180,"line":274},[178,120916,722],{"emptyLinePlaceholder":721},[178,120918,120919],{"class":180,"line":354},[178,120920,120921],{"class":2008},"# Ubuntu20.04\n",[178,120923,120924,120926,120928],{"class":180,"line":364},[178,120925,185],{"class":184},[178,120927,120209],{"class":188},[178,120929,120930],{"class":188}," ppa:zhsj\u002Ffcitx5\n",[178,120932,120933,120935,120937],{"class":180,"line":740},[178,120934,185],{"class":184},[178,120936,118682],{"class":188},[178,120938,27993],{"class":188},[178,120940,120941,120943,120945,120947,120949],{"class":180,"line":746},[178,120942,185],{"class":184},[178,120944,118682],{"class":188},[178,120946,192],{"class":188},[178,120948,120909],{"class":188},[178,120950,120912],{"class":188},[26,120952,120953,120956],{"start":274},[29,120954,120955],{},"Reboot System",[29,120957,120958],{},"启动Fcitx5",[19,120960,120961],{},[3269,120962],{"alt":160,"src":120963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[26,120965,120966],{"start":364},[29,120967,120968],{},"修改一些设置",[19,120970,120971],{},"将Pinyin和Keyboard - English US加入到左边。",[19,120973,120974],{},[3269,120975],{"alt":160,"src":120976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,120978,120979],{},"添加快捷键以便于更好切换中英文",[19,120981,120982],{},[3269,120983],{"alt":160,"src":120984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[26,120986,120987],{"start":740},[29,120988,120989],{},"重启",[154,120991,120993],{"className":119888,"code":120992,"language":119890,"meta":160,"style":160},"sudo shutdown -r now\n",[70,120994,120995],{"__ignoreMap":160},[178,120996,120997,120999,121002,121005],{"class":180,"line":181},[178,120998,185],{"class":184},[178,121000,121001],{"class":188}," shutdown",[178,121003,121004],{"class":195}," -r",[178,121006,121007],{"class":188}," now\n",[26,121009,121010],{"start":746},[29,121011,121012],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,121014,121015],{},[2178,121016,121017],{"href":121017,"rel":121018},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[25619],[26,121020,121021],{"start":752},[29,121022,121023],{},"再重启",[154,121025,121026],{"className":119888,"code":120992,"language":119890,"meta":160,"style":160},[70,121027,121028],{"__ignoreMap":160},[178,121029,121030,121032,121034,121036],{"class":180,"line":181},[178,121031,185],{"class":184},[178,121033,121001],{"class":188},[178,121035,121004],{"class":195},[178,121037,121007],{"class":188},[14,121039,121041],{"id":121040},"_34-pip3源替换","3.4 pip3源替换",[19,121043,121044],{},"非Debian系发行版需要做。",[19,121046,121047],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,121049,121050],{},"使用dnf的系统也可能不用做。",[154,121052,121054],{"className":118661,"code":121053,"language":118663,"meta":160,"style":160},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[70,121055,121056,121061,121068,121073,121078],{"__ignoreMap":160},[178,121057,121058],{"class":180,"line":181},[178,121059,121060],{"class":2008},"# 检查是否已安装 pip\n",[178,121062,121063,121066],{"class":180,"line":263},[178,121064,121065],{"class":184},"pip3",[178,121067,28044],{"class":195},[178,121069,121070],{"class":180,"line":274},[178,121071,121072],{"class":2008},"# 如果未安装，先安装 pip3（见下方）\n",[178,121074,121075],{"class":180,"line":354},[178,121076,121077],{"class":2008},"# 配置 pip 使用清华源\n",[178,121079,121080,121082,121085,121088,121091],{"class":180,"line":364},[178,121081,121065],{"class":184},[178,121083,121084],{"class":188}," config",[178,121086,121087],{"class":188}," set",[178,121089,121090],{"class":188}," global.index-url",[178,121092,121093],{"class":188}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,121095,121096],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,121098,121099],{},[3269,121100],{"alt":160,"src":121101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[154,121103,121105],{"className":118661,"code":121104,"language":118663,"meta":160,"style":160},"#安装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",[70,121106,121107,121112,121120,121131,121135,121140,121159,121163,121168,121180,121184,121189],{"__ignoreMap":160},[178,121108,121109],{"class":180,"line":181},[178,121110,121111],{"class":2008},"#安装pip3\n",[178,121113,121114,121116,121118],{"class":180,"line":263},[178,121115,185],{"class":184},[178,121117,118682],{"class":188},[178,121119,27993],{"class":188},[178,121121,121122,121124,121126,121128],{"class":180,"line":274},[178,121123,185],{"class":184},[178,121125,27827],{"class":188},[178,121127,192],{"class":188},[178,121129,121130],{"class":188}," python3-pip\n",[178,121132,121133],{"class":180,"line":354},[178,121134,722],{"emptyLinePlaceholder":721},[178,121136,121137],{"class":180,"line":364},[178,121138,121139],{"class":2008},"#更新pip3\n",[178,121141,121142,121144,121146,121148,121150,121152,121155,121157],{"class":180,"line":740},[178,121143,102585],{"class":184},[178,121145,102588],{"class":195},[178,121147,102611],{"class":188},[178,121149,192],{"class":188},[178,121151,28179],{"class":195},[178,121153,121154],{"class":188}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[178,121156,102616],{"class":195},[178,121158,102619],{"class":188},[178,121160,121161],{"class":180,"line":746},[178,121162,722],{"emptyLinePlaceholder":721},[178,121164,121165],{"class":180,"line":752},[178,121166,121167],{"class":2008},"#设置pip源为清华源\n",[178,121169,121170,121172,121174,121176,121178],{"class":180,"line":757},[178,121171,121065],{"class":184},[178,121173,121084],{"class":188},[178,121175,121087],{"class":188},[178,121177,121090],{"class":188},[178,121179,121093],{"class":188},[178,121181,121182],{"class":180,"line":763},[178,121183,722],{"emptyLinePlaceholder":721},[178,121185,121186],{"class":180,"line":769},[178,121187,121188],{"class":2008},"#测试\n",[178,121190,121191,121193,121195,121197,121199,121201],{"class":180,"line":774},[178,121192,102585],{"class":184},[178,121194,102588],{"class":195},[178,121196,102611],{"class":188},[178,121198,192],{"class":188},[178,121200,102616],{"class":195},[178,121202,102619],{"class":188},[19,121204,121205],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,121207,121208],{},[3269,121209],{"alt":160,"src":121210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121212,121214],{"id":121213},"_35-显卡驱动安装","3.5 显卡驱动安装",[387,121216,121218],{"id":121217},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[154,121220,121222],{"className":119888,"code":121221,"language":119890,"meta":160,"style":160},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[70,121223,121224,121229,121244,121249],{"__ignoreMap":160},[178,121225,121226],{"class":180,"line":181},[178,121227,121228],{"class":2008},"# 如果是使用apt安装的驱动\n",[178,121230,121231,121233,121235,121237,121239,121242],{"class":180,"line":263},[178,121232,185],{"class":184},[178,121234,27827],{"class":188},[178,121236,27830],{"class":188},[178,121238,120523],{"class":195},[178,121240,121241],{"class":188}," nvidia",[178,121243,120613],{"class":195},[178,121245,121246],{"class":180,"line":274},[178,121247,121248],{"class":2008},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[178,121250,121251,121253],{"class":180,"line":354},[178,121252,185],{"class":184},[178,121254,121255],{"class":188}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[387,121257,121259],{"id":121258},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[23756,121261,121263],{"id":121262},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24668,121265,121267],{"id":121266},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[154,121269,121271],{"className":119888,"code":121270,"language":119890,"meta":160,"style":160},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[70,121272,121273,121278,121289,121294,121304,121309],{"__ignoreMap":160},[178,121274,121275],{"class":180,"line":181},[178,121276,121277],{"class":2008},"# 安装英伟达驱动\n",[178,121279,121280,121282,121284,121286],{"class":180,"line":263},[178,121281,185],{"class":184},[178,121283,118682],{"class":188},[178,121285,192],{"class":188},[178,121287,121288],{"class":188}," nvidia-driver-版本号\n",[178,121290,121291],{"class":180,"line":274},[178,121292,121293],{"class":2008},"# 重启 \n",[178,121295,121296,121298,121300,121302],{"class":180,"line":354},[178,121297,185],{"class":184},[178,121299,121001],{"class":188},[178,121301,121004],{"class":195},[178,121303,121007],{"class":188},[178,121305,121306],{"class":180,"line":364},[178,121307,121308],{"class":2008},"# 检查驱动是否安装成功\n",[178,121310,121311],{"class":180,"line":740},[178,121312,121313],{"class":184},"nvidia-smi\n",[24668,121315,121317],{"id":121316},"_35212-debian","3.5.2.1.2 Debian",[154,121319,121321],{"className":119888,"code":121320,"language":119890,"meta":160,"style":160},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[70,121322,121323,121327,121341,121345,121355,121359],{"__ignoreMap":160},[178,121324,121325],{"class":180,"line":181},[178,121326,121277],{"class":2008},[178,121328,121329,121331,121333,121335,121338],{"class":180,"line":263},[178,121330,185],{"class":184},[178,121332,118682],{"class":188},[178,121334,192],{"class":188},[178,121336,121337],{"class":188}," nvidia-driver",[178,121339,121340],{"class":188}," nvidia-settings\n",[178,121342,121343],{"class":180,"line":274},[178,121344,121293],{"class":2008},[178,121346,121347,121349,121351,121353],{"class":180,"line":354},[178,121348,185],{"class":184},[178,121350,121001],{"class":188},[178,121352,121004],{"class":195},[178,121354,121007],{"class":188},[178,121356,121357],{"class":180,"line":364},[178,121358,121308],{"class":2008},[178,121360,121361],{"class":180,"line":740},[178,121362,121313],{"class":184},[23756,121364,121366],{"id":121365},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,121368,121369,121370,121373],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[2093,121371,121372],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,121375,121376,121377],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25312,121378,121379],{},[2093,121380,121381],{},"（也可以不禁用桌面环境，直接进行下一步。）",[154,121383,121385],{"className":119888,"code":121384,"language":119890,"meta":160,"style":160},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[70,121386,121387,121392,121402,121407,121420,121425],{"__ignoreMap":160},[178,121388,121389],{"class":180,"line":181},[178,121390,121391],{"class":2008},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[178,121393,121394,121396,121399],{"class":180,"line":263},[178,121395,185],{"class":184},[178,121397,121398],{"class":188}," telinit",[178,121400,121401],{"class":195}," 3\n",[178,121403,121404],{"class":180,"line":274},[178,121405,121406],{"class":2008},"# ubuntu 使用下方命令\n",[178,121408,121409,121411,121414,121417],{"class":180,"line":354},[178,121410,185],{"class":184},[178,121412,121413],{"class":188}," service",[178,121415,121416],{"class":188}," lightdm",[178,121418,121419],{"class":188}," stop\n",[178,121421,121422],{"class":180,"line":364},[178,121423,121424],{"class":2008},"# Fedora 使用下方命令\n",[178,121426,121427,121429,121431,121434],{"class":180,"line":740},[178,121428,185],{"class":184},[178,121430,28262],{"class":188},[178,121432,121433],{"class":188}," isolate",[178,121435,121436],{"class":188}," multi-user.target\n",[19,121438,121439],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[154,121441,121443],{"className":119888,"code":121442,"language":119890,"meta":160,"style":160},"# 编译环境+准备工作\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",[70,121444,121445,121450,121461,121466,121473,121478,121490,121495,121502,121507],{"__ignoreMap":160},[178,121446,121447],{"class":180,"line":181},[178,121448,121449],{"class":2008},"# 编译环境+准备工作\n",[178,121451,121452,121454,121456,121458],{"class":180,"line":263},[178,121453,185],{"class":184},[178,121455,118682],{"class":188},[178,121457,192],{"class":188},[178,121459,121460],{"class":188}," build-essential\n",[178,121462,121463],{"class":180,"line":274},[178,121464,121465],{"class":2008},"# 进入到.run目录中\n",[178,121467,121468,121470],{"class":180,"line":354},[178,121469,102957],{"class":195},[178,121471,121472],{"class":188}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[178,121474,121475],{"class":180,"line":364},[178,121476,121477],{"class":2008},"# 给驱动文件增加可执行权限：\n",[178,121479,121480,121482,121484,121487],{"class":180,"line":740},[178,121481,185],{"class":184},[178,121483,26333],{"class":188},[178,121485,121486],{"class":188}," a+x",[178,121488,121489],{"class":188}," NVIDIA-Linux-x86_64-550.107.02.run\n",[178,121491,121492],{"class":180,"line":746},[178,121493,121494],{"class":2008},"# 然后执行安装：\n",[178,121496,121497,121499],{"class":180,"line":752},[178,121498,185],{"class":184},[178,121500,121501],{"class":188}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[178,121503,121504],{"class":180,"line":757},[178,121505,121506],{"class":2008},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[178,121508,121509,121511,121514],{"class":180,"line":763},[178,121510,185],{"class":184},[178,121512,121513],{"class":188}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[178,121515,121516],{"class":195},"  --no-opengl-files\n",[19,121518,121519],{},"安装完毕重启即可",[154,121521,121523],{"className":119888,"code":121522,"language":119890,"meta":160,"style":160},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[70,121524,121525,121529,121535,121539],{"__ignoreMap":160},[178,121526,121527],{"class":180,"line":181},[178,121528,121293],{"class":2008},[178,121530,121531,121533],{"class":180,"line":263},[178,121532,185],{"class":184},[178,121534,28396],{"class":188},[178,121536,121537],{"class":180,"line":274},[178,121538,121308],{"class":2008},[178,121540,121541],{"class":180,"line":354},[178,121542,121313],{"class":184},[387,121544,121546],{"id":121545},"_353-安装cuda","3.5.3 安装CUDA",[19,121548,121549],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,121551,121552],{},[3269,121553],{"alt":160,"src":121554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[26,121556,121557],{},[29,121558,121559],{},"先查看显卡驱动所支持的最高CUDA版本",[154,121561,121562],{"className":119888,"code":121313,"language":119890,"meta":160,"style":160},[70,121563,121564],{"__ignoreMap":160},[178,121565,121566],{"class":180,"line":181},[178,121567,121313],{"class":184},[19,121569,121570],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,121572,121573],{},[3269,121574],{"alt":160,"src":121575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[26,121577,121578],{"start":263},[29,121579,121580],{},"下载CUDA并安装CUDA",[19,121582,119667,121583],{},[2178,121584,119670],{"href":119670,"rel":121585},[25619],[19,121587,121588],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,121590,121591],{},[3269,121592],{"alt":160,"src":121593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,121595,121596,121597,121602],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[2178,121598,121601],{"href":121599,"rel":121600},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[25619],"Vinci机器人队单片机教程","）",[19,121604,121605],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,121607,121608],{},[3269,121609],{"alt":160,"src":121610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,121612,121613],{},"将最下方框框里的命令敲入终端",[154,121615,121617],{"className":119888,"code":121616,"language":119890,"meta":160,"style":160},"# 在当前文件夹下创建一个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",[70,121618,121619,121624,121633,121638,121645,121650,121658,121663,121674,121679],{"__ignoreMap":160},[178,121620,121621],{"class":180,"line":181},[178,121622,121623],{"class":2008},"# 在当前文件夹下创建一个ttt的子文件夹\n",[178,121625,121626,121628,121630],{"class":180,"line":263},[178,121627,102947],{"class":184},[178,121629,30963],{"class":195},[178,121631,121632],{"class":188}," .\u002Fttt\n",[178,121634,121635],{"class":180,"line":274},[178,121636,121637],{"class":2008},"# 进入ttt文件夹\n",[178,121639,121640,121642],{"class":180,"line":354},[178,121641,102957],{"class":195},[178,121643,121644],{"class":188}," ttt\n",[178,121646,121647],{"class":180,"line":364},[178,121648,121649],{"class":2008},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[178,121651,121652,121655],{"class":180,"line":740},[178,121653,121654],{"class":184},"wget",[178,121656,121657],{"class":188}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[178,121659,121660],{"class":180,"line":746},[178,121661,121662],{"class":2008},"# 给予权限\n",[178,121664,121665,121667,121669,121671],{"class":180,"line":752},[178,121666,185],{"class":184},[178,121668,26333],{"class":188},[178,121670,121486],{"class":188},[178,121672,121673],{"class":188}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[178,121675,121676],{"class":180,"line":757},[178,121677,121678],{"class":2008},"# 运行脚本\n",[178,121680,121681,121683],{"class":180,"line":763},[178,121682,185],{"class":184},[178,121684,121673],{"class":188},[19,121686,121687],{},[3269,121688],{"alt":160,"src":121689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,121691,121692],{},"正在安装中：",[19,121694,121695],{},[3269,121696],{"alt":160,"src":121697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,121699,121700],{},"输入accept接受即可",[19,121702,121703],{},[3269,121704],{"alt":160,"src":121705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,121707,121708],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,121710,121711],{},[3269,121712],{"alt":160,"src":121713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,121715,121716],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,121718,121719],{},[3269,121720],{"alt":160,"src":121721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[26,121723,121724],{"start":274},[29,121725,121726],{},"配置环境",[19,121728,121729],{},"根据上方确认一下路径，比如我上面红色框起来的为",[154,121731,121733],{"className":119888,"code":121732,"language":119890,"meta":160,"style":160},"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",[70,121734,121735,121751,121766],{"__ignoreMap":160},[178,121736,121737,121740,121743,121746,121749],{"class":180,"line":181},[178,121738,121739],{"class":184},"Please",[178,121741,121742],{"class":188}," make",[178,121744,121745],{"class":188}," sure",[178,121747,121748],{"class":188}," that",[178,121750,4450],{"class":319},[178,121752,121753,121755,121758,121761,121764],{"class":180,"line":263},[178,121754,53998],{"class":184},[178,121756,121757],{"class":188},"   PATH",[178,121759,121760],{"class":188}," includes",[178,121762,121763],{"class":188}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[178,121765,4450],{"class":319},[178,121767,121768,121770,121773,121775,121778,121781,121783,121786,121789,121792,121795,121797,121800,121802],{"class":180,"line":274},[178,121769,53998],{"class":184},[178,121771,121772],{"class":188},"   LD_LIBRARY_PATH",[178,121774,121760],{"class":188},[178,121776,121777],{"class":188}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[178,121779,121780],{"class":188}," or,",[178,121782,6978],{"class":188},[178,121784,121785],{"class":188}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[178,121787,121788],{"class":188}," to",[178,121790,121791],{"class":188}," \u002Fetc\u002Fld.so.conf",[178,121793,121794],{"class":188}," and",[178,121796,28979],{"class":188},[178,121798,121799],{"class":188}," ldconfig",[178,121801,66324],{"class":188},[178,121803,121804],{"class":188}," root\n",[19,121806,121807],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[154,121809,121811],{"className":119888,"code":121810,"language":119890,"meta":160,"style":160},"which nvcc\n",[70,121812,121813],{"__ignoreMap":160},[178,121814,121815,121818],{"class":180,"line":181},[178,121816,121817],{"class":195},"which",[178,121819,121820],{"class":188}," nvcc\n",[19,121822,121823],{},[3269,121824],{"alt":160,"src":121825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,121827,121828],{},"所以我进行以下操作：",[154,121830,121832],{"className":119888,"code":121831,"language":119890,"meta":160,"style":160},"sudo vim ~\u002F.bashrc\n",[70,121833,121834],{"__ignoreMap":160},[178,121835,121836,121838,121840],{"class":180,"line":181},[178,121837,185],{"class":184},[178,121839,119948],{"class":188},[178,121841,121842],{"class":188}," ~\u002F.bashrc\n",[19,121844,121845],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[154,121847,121849],{"className":119888,"code":121848,"language":119890,"meta":160,"style":160},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[70,121850,121851,121863],{"__ignoreMap":160},[178,121852,121853,121855,121858,121860],{"class":180,"line":181},[178,121854,26795],{"class":699},[178,121856,121857],{"class":319}," PATH",[178,121859,330],{"class":699},[178,121861,121862],{"class":319},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[178,121864,121865,121867,121870,121872],{"class":180,"line":263},[178,121866,26795],{"class":699},[178,121868,121869],{"class":319}," LD_LIBRARY_PATH",[178,121871,330],{"class":699},[178,121873,121874],{"class":319},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,121876,121877],{},[3269,121878],{"alt":160,"src":121879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[154,121881,121883],{"className":119888,"code":121882,"language":119890,"meta":160,"style":160},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[70,121884,121885,121890,121896,121901],{"__ignoreMap":160},[178,121886,121887],{"class":180,"line":181},[178,121888,121889],{"class":2008},"# 刷新当前终端的环境变量\n",[178,121891,121892,121894],{"class":180,"line":263},[178,121893,102599],{"class":195},[178,121895,121842],{"class":188},[178,121897,121898],{"class":180,"line":274},[178,121899,121900],{"class":2008},"# 验证CUDA是否安装成功\n",[178,121902,121903,121906],{"class":180,"line":354},[178,121904,121905],{"class":184},"nvcc",[178,121907,121908],{"class":195}," -V\n",[19,121910,121911],{},"出现下图这种则安装成功。",[19,121913,121914],{},[3269,121915],{"alt":160,"src":121916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[387,121918,121920],{"id":121919},"_354-安装cudnn","3.5.4 安装cuDNN",[26,121922,121923],{},[29,121924,121925],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,121927,121928,121929,121934],{},"前往 NVIDIA cuDNN 下载页面：",[2178,121930,121933],{"href":121931,"rel":121932},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[25619],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,121936,121937],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,121939,121940],{},[3269,121941],{"alt":160,"src":121942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,121944,121945],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,121947,121948],{},[3269,121949],{"alt":160,"src":121950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,121952,121953],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,121955,121956],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,121958,121959],{},[2093,121960,121961],{},"我这里选择所有Linux X86_64最通用的办法：",[19,121963,121964],{},"下载好的：",[19,121966,121967],{},[3269,121968],{"alt":160,"src":121969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[26,121971,121972],{"start":263},[29,121973,121974],{},"安装cuDNN",[19,121976,121977],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,121979,121980],{},[3269,121981],{"alt":160,"src":121982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,121984,121985],{},"解压文件，并复制到对应位置完成安装",[154,121987,121989],{"className":119888,"code":121988,"language":119890,"meta":160,"style":160},"# 解压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",[70,121990,121991,121996,122007,122012,122019,122024,122040,122054,122059,122070,122079,122083,122099],{"__ignoreMap":160},[178,121992,121993],{"class":180,"line":181},[178,121994,121995],{"class":2008},"# 解压cuDNN文件\n",[178,121997,121998,122001,122004],{"class":180,"line":263},[178,121999,122000],{"class":184},"tar",[178,122002,122003],{"class":195}," -xvf",[178,122005,122006],{"class":188}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[178,122008,122009],{"class":180,"line":274},[178,122010,122011],{"class":2008},"# cd进文件夹\n",[178,122013,122014,122016],{"class":180,"line":354},[178,122015,102957],{"class":195},[178,122017,122018],{"class":188}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[178,122020,122021],{"class":180,"line":364},[178,122022,122023],{"class":2008},"# 复制cuDNN文件到CUDA目录\n",[178,122025,122026,122028,122030,122033,122035,122038],{"class":180,"line":740},[178,122027,185],{"class":184},[178,122029,29610],{"class":188},[178,122031,122032],{"class":188}," include\u002Fcudnn",[178,122034,2395],{"class":195},[178,122036,122037],{"class":188},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[178,122039,4450],{"class":319},[178,122041,122042,122044,122046,122049,122051],{"class":180,"line":746},[178,122043,185],{"class":184},[178,122045,29610],{"class":188},[178,122047,122048],{"class":188}," lib\u002Flibcudnn",[178,122050,2395],{"class":195},[178,122052,122053],{"class":188},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[178,122055,122056],{"class":180,"line":752},[178,122057,122058],{"class":2008},"# 对比一下有没有缺文件\n",[178,122060,122061,122063,122066,122068],{"class":180,"line":757},[178,122062,28510],{"class":184},[178,122064,122065],{"class":188}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[178,122067,2395],{"class":195},[178,122069,4450],{"class":319},[178,122071,122072,122074,122077],{"class":180,"line":763},[178,122073,28510],{"class":184},[178,122075,122076],{"class":188}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[178,122078,120613],{"class":195},[178,122080,122081],{"class":180,"line":769},[178,122082,121662],{"class":2008},[178,122084,122085,122087,122089,122092,122094,122096],{"class":180,"line":774},[178,122086,185],{"class":184},[178,122088,26333],{"class":188},[178,122090,122091],{"class":188}," a+r",[178,122093,122065],{"class":188},[178,122095,2395],{"class":195},[178,122097,122098],{"class":319},"   \n",[178,122100,122101,122103,122105,122107,122109],{"class":180,"line":780},[178,122102,185],{"class":184},[178,122104,26333],{"class":188},[178,122106,122091],{"class":188},[178,122108,122076],{"class":188},[178,122110,120613],{"class":195},[26,122112,122113],{"start":274},[29,122114,122115],{},"检查是否安装成功",[154,122117,122119],{"className":119888,"code":122118,"language":119890,"meta":160,"style":160},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[70,122120,122121,122126],{"__ignoreMap":160},[178,122122,122123],{"class":180,"line":181},[178,122124,122125],{"class":2008},"# 检查cuDNN版本命令\n",[178,122127,122128,122131,122134,122136,122138,122141,122144],{"class":180,"line":263},[178,122129,122130],{"class":184},"cat",[178,122132,122133],{"class":188}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[178,122135,26862],{"class":699},[178,122137,31983],{"class":184},[178,122139,122140],{"class":188}," CUDNN_MAJOR",[178,122142,122143],{"class":195}," -A",[178,122145,49455],{"class":195},[19,122147,122148],{},"出现下图这样的就是安装成功了",[19,122150,122151],{},[3269,122152],{"alt":160,"src":122153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[26,122155,122156],{"start":354},[29,122157,122158],{},"软链接(一般不需要)",[154,122160,122162],{"className":119888,"code":122161,"language":119890,"meta":160,"style":160},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[70,122163,122164,122169],{"__ignoreMap":160},[178,122165,122166],{"class":180,"line":181},[178,122167,122168],{"class":2008},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[178,122170,122171,122173],{"class":180,"line":263},[178,122172,185],{"class":184},[178,122174,122175],{"class":188}," ldconfig\n",[19,122177,122178],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[154,122180,122185],{"className":122181,"code":122182,"language":122183,"meta":122184,"style":160},"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",[70,122186,122187,122192,122197,122202,122207,122212,122217],{"__ignoreMap":160},[178,122188,122189],{"class":180,"line":181},[178,122190,122191],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[178,122193,122194],{"class":180,"line":263},[178,122195,122196],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[178,122198,122199],{"class":180,"line":274},[178,122200,122201],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[178,122203,122204],{"class":180,"line":354},[178,122205,122206],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[178,122208,122209],{"class":180,"line":364},[178,122210,122211],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[178,122213,122214],{"class":180,"line":740},[178,122215,122216],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[178,122218,122219],{"class":180,"line":746},[178,122220,122221],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,122223,122224],{},"运行下方的命令",[154,122226,122228],{"className":119888,"code":122227,"language":119890,"meta":160,"style":160},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[70,122229,122230,122235,122242,122247],{"__ignoreMap":160},[178,122231,122232],{"class":180,"line":181},[178,122233,122234],{"class":2008},"# cd进入CUDA路径\n",[178,122236,122237,122239],{"class":180,"line":263},[178,122238,102957],{"class":195},[178,122240,122241],{"class":188}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[178,122243,122244],{"class":180,"line":274},[178,122245,122246],{"class":2008}," # 查看本路径下的需要软链接的文件名\n",[178,122248,122249],{"class":180,"line":354},[178,122250,122251],{"class":184}," ls\n",[19,122253,122254],{},[3269,122255],{"alt":160,"src":122256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,122258,122259,122260,20168,122263,20168,122266,122269],{},"如上图，我需要将",[70,122261,122262],{},"libcudnn_xxx_xxxxx.so.8.9.7",[70,122264,122265],{},"libcudnn_xxx_xxxxx.so.8",[70,122267,122268],{},"libcudnn_xxx_xxxxx.so","软链接",[154,122271,122273],{"className":119888,"code":122272,"language":119890,"meta":160,"style":160},"# 创建符号链接。对于每个 .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",[70,122274,122275,122280,122296,122310,122324,122338,122352,122366,122380,122385,122391,122396],{"__ignoreMap":160},[178,122276,122277],{"class":180,"line":181},[178,122278,122279],{"class":2008},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[178,122281,122282,122284,122287,122290,122293],{"class":180,"line":263},[178,122283,185],{"class":184},[178,122285,122286],{"class":188}," ln",[178,122288,122289],{"class":195}," -sf",[178,122291,122292],{"class":188}," libcudnn_cnn_train.so.8.9.7",[178,122294,122295],{"class":188}," libcudnn_cnn_train.so.8\n",[178,122297,122298,122300,122302,122304,122307],{"class":180,"line":274},[178,122299,185],{"class":184},[178,122301,122286],{"class":188},[178,122303,122289],{"class":195},[178,122305,122306],{"class":188}," libcudnn_adv_infer.so.8.9.7",[178,122308,122309],{"class":188}," libcudnn_adv_infer.so.8\n",[178,122311,122312,122314,122316,122318,122321],{"class":180,"line":354},[178,122313,185],{"class":184},[178,122315,122286],{"class":188},[178,122317,122289],{"class":195},[178,122319,122320],{"class":188}," libcudnn_adv_train.so.8.9.7",[178,122322,122323],{"class":188}," libcudnn_adv_train.so.8\n",[178,122325,122326,122328,122330,122332,122335],{"class":180,"line":364},[178,122327,185],{"class":184},[178,122329,122286],{"class":188},[178,122331,122289],{"class":195},[178,122333,122334],{"class":188}," libcudnn_cnn_infer.so.8.9.7",[178,122336,122337],{"class":188}," libcudnn_cnn_infer.so.8\n",[178,122339,122340,122342,122344,122346,122349],{"class":180,"line":740},[178,122341,185],{"class":184},[178,122343,122286],{"class":188},[178,122345,122289],{"class":195},[178,122347,122348],{"class":188}," libcudnn.so.8.9.7",[178,122350,122351],{"class":188}," libcudnn.so.8\n",[178,122353,122354,122356,122358,122360,122363],{"class":180,"line":746},[178,122355,185],{"class":184},[178,122357,122286],{"class":188},[178,122359,122289],{"class":195},[178,122361,122362],{"class":188}," libcudnn_ops_infer.so.8.9.7",[178,122364,122365],{"class":188}," libcudnn_ops_infer.so.8\n",[178,122367,122368,122370,122372,122374,122377],{"class":180,"line":752},[178,122369,185],{"class":184},[178,122371,122286],{"class":188},[178,122373,122289],{"class":195},[178,122375,122376],{"class":188}," libcudnn_ops_train.so.8.9.7",[178,122378,122379],{"class":188}," libcudnn_ops_train.so.8\n",[178,122381,122382],{"class":180,"line":757},[178,122383,122384],{"class":2008},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[178,122386,122387,122389],{"class":180,"line":763},[178,122388,185],{"class":184},[178,122390,122175],{"class":188},[178,122392,122393],{"class":180,"line":769},[178,122394,122395],{"class":2008},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[178,122397,122398,122400,122403,122406,122408,122411],{"class":180,"line":774},[178,122399,28510],{"class":184},[178,122401,122402],{"class":195}," -l",[178,122404,122405],{"class":188}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[178,122407,2395],{"class":195},[178,122409,122410],{"class":188},".so",[178,122412,120613],{"class":195},[387,122414,122416],{"id":122415},"_355-常见问题","3.5.5 常见问题",[26,122418,122419],{},[29,122420,122421],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[154,122423,122425],{"className":119888,"code":122424,"language":119890,"meta":160,"style":160},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[70,122426,122427],{"__ignoreMap":160},[178,122428,122429,122431,122433],{"class":180,"line":181},[178,122430,185],{"class":184},[178,122432,119948],{"class":188},[178,122434,122435],{"class":188}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,122437,122438],{},"blacklist-nouveau.conf文件内容如下：",[154,122440,122442],{"className":119888,"code":122441,"language":119890,"meta":160,"style":160},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[70,122443,122444,122452,122459,122471,122481],{"__ignoreMap":160},[178,122445,122446,122449],{"class":180,"line":181},[178,122447,122448],{"class":184},"blacklist",[178,122450,122451],{"class":188}," nouveau\n",[178,122453,122454,122456],{"class":180,"line":263},[178,122455,122448],{"class":184},[178,122457,122458],{"class":188}," lbm-nouveau\n",[178,122460,122461,122463,122466,122469],{"class":180,"line":274},[178,122462,117295],{"class":184},[178,122464,122465],{"class":188}," nouveau",[178,122467,122468],{"class":188}," modeset=",[178,122470,4860],{"class":195},[178,122472,122473,122476,122478],{"class":180,"line":354},[178,122474,122475],{"class":195},"alias",[178,122477,122465],{"class":188},[178,122479,122480],{"class":188}," off\n",[178,122482,122483,122485,122488],{"class":180,"line":364},[178,122484,122475],{"class":195},[178,122486,122487],{"class":188}," lbm-nouveau",[178,122489,122480],{"class":188},[19,122491,122492],{},"接着运行下方命令",[154,122494,122496],{"className":119888,"code":122495,"language":119890,"meta":160,"style":160},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[70,122497,122498,122508,122513],{"__ignoreMap":160},[178,122499,122500,122502,122505],{"class":180,"line":181},[178,122501,185],{"class":184},[178,122503,122504],{"class":188}," update-initramfs",[178,122506,122507],{"class":195}," -u\n",[178,122509,122510],{"class":180,"line":263},[178,122511,122512],{"class":184},"或者\n",[178,122514,122515,122517,122520],{"class":180,"line":274},[178,122516,185],{"class":184},[178,122518,122519],{"class":188}," dracut",[178,122521,122522],{"class":195}," --force\n",[19,122524,122525],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[154,122527,122529],{"className":119888,"code":122528,"language":119890,"meta":160,"style":160},"lsmod | grep nouveau\n",[70,122530,122531],{"__ignoreMap":160},[178,122532,122533,122536,122538,122540],{"class":180,"line":181},[178,122534,122535],{"class":184},"lsmod",[178,122537,26862],{"class":699},[178,122539,31983],{"class":184},[178,122541,122451],{"class":188},[26,122543,122544],{"start":263},[29,122545,122546],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[154,122548,122550],{"className":119888,"code":122549,"language":119890,"meta":160,"style":160},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[70,122551,122552],{"__ignoreMap":160},[178,122553,122554,122556,122558],{"class":180,"line":181},[178,122555,185],{"class":184},[178,122557,119948],{"class":188},[178,122559,122560],{"class":188}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,122562,122563],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[154,122565,122567],{"className":119888,"code":122566,"language":119890,"meta":160,"style":160},"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",[70,122568,122569,122577,122585,122593,122600,122608,122618,122626],{"__ignoreMap":160},[178,122570,122571,122574],{"class":180,"line":181},[178,122572,122573],{"class":184},"Section",[178,122575,122576],{"class":188}," \"OutputClass\"\n",[178,122578,122579,122582],{"class":180,"line":263},[178,122580,122581],{"class":184},"   Identifier",[178,122583,122584],{"class":188}," \"nvidia\"\n",[178,122586,122587,122590],{"class":180,"line":274},[178,122588,122589],{"class":184},"   MatchDriver",[178,122591,122592],{"class":188}," \"nvidia-drm\"\n",[178,122594,122595,122598],{"class":180,"line":354},[178,122596,122597],{"class":184},"   Driver",[178,122599,122584],{"class":188},[178,122601,122602,122605],{"class":180,"line":364},[178,122603,122604],{"class":184},"   Option",[178,122606,122607],{"class":188}," \"AllowEmptyInitialConfiguration\"\n",[178,122609,122610,122612,122615],{"class":180,"line":740},[178,122611,122604],{"class":184},[178,122613,122614],{"class":188}," \"PrimaryGPU\"",[178,122616,122617],{"class":188}," \"yes\"\n",[178,122619,122620,122623],{"class":180,"line":746},[178,122621,122622],{"class":184},"   ModulePath",[178,122624,122625],{"class":188}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[178,122627,122628],{"class":180,"line":752},[178,122629,122630],{"class":184},"EndSection\n",[26,122632,122633],{"start":274},[29,122634,122635],{},"安装N卡驱动提示错误",[154,122637,122639],{"className":122181,"code":122638,"language":122183,"meta":122184,"style":160},"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",[70,122640,122641],{"__ignoreMap":160},[178,122642,122643],{"class":180,"line":181},[178,122644,122638],{},[26,122646,122647],{},[29,122648,122649],{},"检查当前运行的内核版本：",[19,122651,122652],{},"运行以下命令以查看你当前正在使用的内核版本：",[154,122654,122656],{"className":118661,"code":122655,"language":118663,"meta":160,"style":160},"uname -r\n",[70,122657,122658],{"__ignoreMap":160},[178,122659,122660,122662],{"class":180,"line":181},[178,122661,71924],{"class":184},[178,122663,122664],{"class":195}," -r\n",[26,122666,122667],{"start":263},[29,122668,122669],{},"安装内核开发文件：",[19,122671,122672,122673,122676],{},"确保你已经安装了与当前内核版本相匹配的 ",[70,122674,122675],{},"kernel-devel"," 包。运行以下命令来安装：",[154,122678,122680],{"className":118661,"code":122679,"language":118663,"meta":160,"style":160},"sudo dnf install kernel-devel-$(uname -r)\n",[70,122681,122682],{"__ignoreMap":160},[178,122683,122684,122686,122688,122690,122693,122695,122697,122699],{"class":180,"line":181},[178,122685,185],{"class":184},[178,122687,189],{"class":188},[178,122689,192],{"class":188},[178,122691,122692],{"class":188}," kernel-devel-",[178,122694,26852],{"class":319},[178,122696,71924],{"class":184},[178,122698,121004],{"class":195},[178,122700,863],{"class":319},[19,122702,122703],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[26,122705,122706],{"start":274},[29,122707,122708],{},"安装内核源代码（如果需要）：",[19,122710,122711],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[154,122713,122715],{"className":118661,"code":122714,"language":118663,"meta":160,"style":160},"sudo dnf install kernel-headers kernel-source\n",[70,122716,122717],{"__ignoreMap":160},[178,122718,122719,122721,122723,122725,122728],{"class":180,"line":181},[178,122720,185],{"class":184},[178,122722,189],{"class":188},[178,122724,192],{"class":188},[178,122726,122727],{"class":188}," kernel-headers",[178,122729,122730],{"class":188}," kernel-source\n",[26,122732,122733],{"start":354},[29,122734,122735],{},"检查安装：",[19,122737,122738,122739,122742],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[70,122740,122741],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[154,122744,122746],{"className":118661,"code":122745,"language":118663,"meta":160,"style":160},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[70,122747,122748],{"__ignoreMap":160},[178,122749,122750,122752],{"class":180,"line":181},[178,122751,28510],{"class":184},[178,122753,122754],{"class":188}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,122756,122757,122758,122761],{},"如果仍然遇到问题，可以通过 ",[70,122759,122760],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[1853,122763,122764],{},"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":160,"searchDepth":263,"depth":263,"links":122766},[122767,122771,122781,122785,122786],{"id":119864,"depth":263,"text":119865,"children":122768},[122769,122770],{"id":119874,"depth":274,"text":119875},{"id":119884,"depth":274,"text":119885},{"id":120084,"depth":263,"text":120085,"children":122772},[122773,122774,122775,122776,122777,122778,122779,122780],{"id":120088,"depth":274,"text":120089},{"id":120158,"depth":274,"text":120159},{"id":120247,"depth":274,"text":120248},{"id":120492,"depth":274,"text":120493},{"id":120562,"depth":274,"text":120563},{"id":120629,"depth":274,"text":120630},{"id":120664,"depth":274,"text":120665},{"id":120719,"depth":274,"text":120720},{"id":120770,"depth":263,"text":120771,"children":122782},[122783,122784],{"id":120774,"depth":274,"text":120775},{"id":120854,"depth":274,"text":120855},{"id":121040,"depth":263,"text":121041},{"id":121213,"depth":263,"text":121214,"children":122787},[122788,122789,122790,122791,122792],{"id":121217,"depth":274,"text":121218},{"id":121258,"depth":274,"text":121259},{"id":121545,"depth":274,"text":121546},{"id":121919,"depth":274,"text":121920},{"id":122415,"depth":274,"text":122416},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":119856,"description":25135},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":122799,"title":122800,"body":122801,"description":25135,"extension":1880,"meta":123141,"navigation":721,"path":123142,"seo":123143,"stem":123144,"__hash__":123145},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":122802,"toc":123139},[122803,122806,122811,122814,123060,123065,123068,123104,123107,123136],[10,122804,122800],{"id":122805},"_4-命令教程长期积累",[26,122807,122808],{},[29,122809,122810],{},"大多数命令",[19,122812,122813],{},"常用 Linux 命令速查：",[154,122815,122817],{"className":118661,"code":122816,"language":118663,"meta":160,"style":160},"# 文件与目录\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",[70,122818,122819,122824,122831,122838,122846,122853,122860,122868,122876,122883,122890,122898,122902,122907,122914,122922,122929,122933,122938,122945,122953,122961,122969,122977,122981,122986,122994,123001,123008,123016,123024,123028,123033,123042,123051],{"__ignoreMap":160},[178,122820,122821],{"class":180,"line":181},[178,122822,122823],{"class":2008},"# 文件与目录\n",[178,122825,122826,122828],{"class":180,"line":263},[178,122827,28510],{"class":184},[178,122829,122830],{"class":2008},"        # 列出目录内容\n",[178,122832,122833,122835],{"class":180,"line":274},[178,122834,102957],{"class":195},[178,122836,122837],{"class":2008},"        # 切换目录\n",[178,122839,122840,122843],{"class":180,"line":354},[178,122841,122842],{"class":195},"pwd",[178,122844,122845],{"class":2008},"       # 显示当前路径\n",[178,122847,122848,122850],{"class":180,"line":364},[178,122849,102947],{"class":184},[178,122851,122852],{"class":2008},"     # 创建目录\n",[178,122854,122855,122857],{"class":180,"line":740},[178,122856,27074],{"class":184},[178,122858,122859],{"class":2008},"        # 删除文件或目录\n",[178,122861,122862,122865],{"class":180,"line":746},[178,122863,122864],{"class":184},"cp",[178,122866,122867],{"class":2008},"        # 复制文件或目录\n",[178,122869,122870,122873],{"class":180,"line":752},[178,122871,122872],{"class":184},"mv",[178,122874,122875],{"class":2008},"        # 移动\u002F重命名文件或目录\n",[178,122877,122878,122880],{"class":180,"line":757},[178,122879,1115],{"class":184},[178,122881,122882],{"class":2008},"     # 创建空文件\n",[178,122884,122885,122887],{"class":180,"line":763},[178,122886,122130],{"class":184},[178,122888,122889],{"class":2008},"       # 查看文件内容\n",[178,122891,122892,122895],{"class":180,"line":769},[178,122893,122894],{"class":184},"head\u002Ftail",[178,122896,122897],{"class":2008}," # 查看文件头部\u002F尾部\n",[178,122899,122900],{"class":180,"line":774},[178,122901,722],{"emptyLinePlaceholder":721},[178,122903,122904],{"class":180,"line":780},[178,122905,122906],{"class":2008},"# 权限管理\n",[178,122908,122909,122911],{"class":180,"line":786},[178,122910,26365],{"class":184},[178,122912,122913],{"class":2008},"     # 修改文件权限\n",[178,122915,122916,122919],{"class":180,"line":792},[178,122917,122918],{"class":184},"chown",[178,122920,122921],{"class":2008},"     # 修改文件所有者\n",[178,122923,122924,122926],{"class":180,"line":798},[178,122925,185],{"class":184},[178,122927,122928],{"class":2008},"      # 以管理员身份执行\n",[178,122930,122931],{"class":180,"line":804},[178,122932,722],{"emptyLinePlaceholder":721},[178,122934,122935],{"class":180,"line":810},[178,122936,122937],{"class":2008},"# 系统信息\n",[178,122939,122940,122942],{"class":180,"line":816},[178,122941,71924],{"class":184},[178,122943,122944],{"class":2008},"     # 系统信息\n",[178,122946,122947,122950],{"class":180,"line":822},[178,122948,122949],{"class":184},"df",[178,122951,122952],{"class":2008},"        # 磁盘使用情况\n",[178,122954,122955,122958],{"class":180,"line":827},[178,122956,122957],{"class":184},"free",[178,122959,122960],{"class":2008},"      # 内存使用情况\n",[178,122962,122963,122966],{"class":180,"line":832},[178,122964,122965],{"class":184},"top\u002Fhtop",[178,122967,122968],{"class":2008},"  # 进程监控\n",[178,122970,122971,122974],{"class":180,"line":850},[178,122972,122973],{"class":184},"ps",[178,122975,122976],{"class":2008},"        # 查看进程\n",[178,122978,122979],{"class":180,"line":866},[178,122980,722],{"emptyLinePlaceholder":721},[178,122982,122983],{"class":180,"line":877},[178,122984,122985],{"class":2008},"# 网络\n",[178,122987,122988,122991],{"class":180,"line":882},[178,122989,122990],{"class":184},"ping",[178,122992,122993],{"class":2008},"      # 测试网络连通性\n",[178,122995,122996,122998],{"class":180,"line":898},[178,122997,28598],{"class":184},[178,122999,123000],{"class":2008},"      # 发送 HTTP 请求\n",[178,123002,123003,123005],{"class":180,"line":914},[178,123004,121654],{"class":184},[178,123006,123007],{"class":2008},"      # 下载文件\n",[178,123009,123010,123013],{"class":180,"line":919},[178,123011,123012],{"class":184},"ssh",[178,123014,123015],{"class":2008},"       # 远程登录\n",[178,123017,123018,123021],{"class":180,"line":935},[178,123019,123020],{"class":184},"scp",[178,123022,123023],{"class":2008},"       # 远程文件传输\n",[178,123025,123026],{"class":180,"line":952},[178,123027,722],{"emptyLinePlaceholder":721},[178,123029,123030],{"class":180,"line":966},[178,123031,123032],{"class":2008},"# 包管理（Debian\u002FUbuntu）\n",[178,123034,123035,123037,123039],{"class":180,"line":980},[178,123036,118733],{"class":184},[178,123038,118712],{"class":188},[178,123040,123041],{"class":2008},"   # 更新软件源\n",[178,123043,123044,123046,123048],{"class":180,"line":985},[178,123045,118733],{"class":184},[178,123047,192],{"class":188},[178,123049,123050],{"class":2008},"  # 安装软件包\n",[178,123052,123053,123055,123057],{"class":180,"line":1008},[178,123054,118733],{"class":184},[178,123056,27830],{"class":188},[178,123058,123059],{"class":2008},"   # 卸载软件包\n",[26,123061,123062],{"start":263},[29,123063,123064],{},"KDE Dolphin 以root打开",[19,123066,123067],{},"kde5",[154,123069,123071],{"className":118661,"code":123070,"language":118663,"meta":160,"style":160},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[70,123072,123073],{"__ignoreMap":160},[178,123074,123075,123078,123081,123084,123086,123088,123091,123094,123096,123099,123101],{"class":180,"line":181},[178,123076,123077],{"class":184},"pkexec",[178,123079,123080],{"class":188}," env",[178,123082,123083],{"class":188}," DISPLAY=",[178,123085,29892],{"class":319},[178,123087,29950],{"class":188},[178,123089,123090],{"class":319},"$XAUTHORITY ",[178,123092,123093],{"class":188},"KDE_SESSION_VERSION=",[178,123095,2259],{"class":195},[178,123097,123098],{"class":188}," KDE_FULL_SESSION=",[178,123100,3169],{"class":195},[178,123102,123103],{"class":188}," dolphin\n",[19,123105,123106],{},"kde6",[154,123108,123110],{"className":118661,"code":123109,"language":118663,"meta":160,"style":160},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[70,123111,123112],{"__ignoreMap":160},[178,123113,123114,123116,123118,123120,123122,123124,123126,123128,123130,123132,123134],{"class":180,"line":181},[178,123115,123077],{"class":184},[178,123117,123080],{"class":188},[178,123119,123083],{"class":188},[178,123121,29892],{"class":319},[178,123123,29950],{"class":188},[178,123125,123090],{"class":319},[178,123127,123093],{"class":188},[178,123129,2284],{"class":195},[178,123131,123098],{"class":188},[178,123133,3169],{"class":195},[178,123135,123103],{"class":188},[1853,123137,123138],{},"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":160,"searchDepth":263,"depth":263,"links":123140},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":122800,"description":25135},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123147,"title":123148,"body":123149,"description":25135,"extension":1880,"meta":123163,"navigation":721,"path":123164,"seo":123165,"stem":123166,"__hash__":123167},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123150,"toc":123161},[123151,123154],[10,123152,123148],{"id":123153},"_5-各种环境配置",[19,123155,123156],{},[2178,123157,123160],{"href":123158,"rel":123159},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[25619],"电控组环境搭建大全",{"title":160,"searchDepth":263,"depth":263,"links":123162},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123148,"description":25135},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123169,"title":123170,"body":123171,"description":25135,"extension":1880,"meta":123519,"navigation":721,"path":123520,"seo":123521,"stem":123522,"__hash__":123523},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123172,"toc":123511},[123173,123176,123180,123184,123188,123193,123200,123204,123497,123501,123508],[10,123174,123170],{"id":123175},"_6-拓展功能",[14,123177,123179],{"id":123178},"_61-wine","6.1 Wine",[14,123181,123183],{"id":123182},"_62-android","6.2 Android",[387,123185,123187],{"id":123186},"_621-i卡a卡","6.2.1 I卡、A卡",[26,123189,123190],{},[29,123191,123192],{},"Wayland-Waydroid(体验超级好)",[19,123194,123195,123196],{},"Waydroid 官网与安装指南：",[2178,123197,123198],{"href":123198,"rel":123199},"https:\u002F\u002Fwaydro.id\u002F",[25619],[387,123201,123203],{"id":123202},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[26,123205,123206],{},[29,123207,123208,123209,123211,123212,123216,123218,123221,123226,123423],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55438,123210],{},"BlissOS 官网下载：",[2178,123213,123214],{"href":123214,"rel":123215},"https:\u002F\u002Fblissos.org\u002F",[25619],[55438,123217],{},[3269,123219],{"alt":160,"src":123220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[26,123222,123223],{"start":274},[29,123224,123225],{},"比较推荐的配置",[154,123227,123229],{"className":118661,"code":123228,"language":118663,"meta":160,"style":160},"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",[70,123230,123231,123238,123248,123258,123268,123280,123290,123297,123307,123316,123325,123335,123345,123354,123364,123374,123386,123396,123405,123415],{"__ignoreMap":160},[178,123232,123233,123236],{"class":180,"line":181},[178,123234,123235],{"class":184},"qemu-system-x86_64",[178,123237,26432],{"class":195},[178,123239,123240,123243,123246],{"class":180,"line":263},[178,123241,123242],{"class":195},"        -M",[178,123244,123245],{"class":188}," q35,vmport=off",[178,123247,26432],{"class":195},[178,123249,123250,123253,123256],{"class":180,"line":274},[178,123251,123252],{"class":195},"        -accel",[178,123254,123255],{"class":188}," kvm",[178,123257,26432],{"class":195},[178,123259,123260,123263,123266],{"class":180,"line":354},[178,123261,123262],{"class":195},"        -cpu",[178,123264,123265],{"class":188}," qemu64,+sse3,+sse4.2",[178,123267,26432],{"class":195},[178,123269,123270,123273,123276,123278],{"class":180,"line":364},[178,123271,123272],{"class":195},"        -smp",[178,123274,123275],{"class":188}," 8,cores=",[178,123277,2233],{"class":195},[178,123279,26432],{"class":195},[178,123281,123282,123285,123288],{"class":180,"line":740},[178,123283,123284],{"class":195},"        -m",[178,123286,123287],{"class":188}," 6G",[178,123289,26432],{"class":195},[178,123291,123292,123295],{"class":180,"line":746},[178,123293,123294],{"class":195},"        -usb",[178,123296,26432],{"class":195},[178,123298,123299,123302,123305],{"class":180,"line":752},[178,123300,123301],{"class":195},"        -device",[178,123303,123304],{"class":188}," virtio-tablet",[178,123306,26432],{"class":195},[178,123308,123309,123311,123314],{"class":180,"line":757},[178,123310,123301],{"class":195},[178,123312,123313],{"class":188}," virtio-keyboard",[178,123315,26432],{"class":195},[178,123317,123318,123320,123323],{"class":180,"line":763},[178,123319,123301],{"class":195},[178,123321,123322],{"class":188}," usb-tablet",[178,123324,26432],{"class":195},[178,123326,123327,123330,123333],{"class":180,"line":769},[178,123328,123329],{"class":195},"        -bios",[178,123331,123332],{"class":188}," OVMF-pure-efi64.fd",[178,123334,26432],{"class":195},[178,123336,123337,123340,123343],{"class":180,"line":774},[178,123338,123339],{"class":195},"        -net",[178,123341,123342],{"class":188}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[178,123344,26432],{"class":195},[178,123346,123347,123349,123352],{"class":180,"line":780},[178,123348,123339],{"class":195},[178,123350,123351],{"class":188}," nic,model=virtio",[178,123353,26432],{"class":195},[178,123355,123356,123359,123362],{"class":180,"line":786},[178,123357,123358],{"class":195},"        -audio",[178,123360,123361],{"class":188}," sdl,model=hda",[178,123363,26432],{"class":195},[178,123365,123366,123369,123372],{"class":180,"line":792},[178,123367,123368],{"class":195},"        -display",[178,123370,123371],{"class":188}," sdl,gl=on,show-cursor=on",[178,123373,26432],{"class":195},[178,123375,123376,123378,123381,123384],{"class":180,"line":798},[178,123377,123301],{"class":195},[178,123379,123380],{"class":188}," virtio-vga-gl,xres=1920,yres=",[178,123382,123383],{"class":195},"1080",[178,123385,26432],{"class":195},[178,123387,123388,123391,123394],{"class":180,"line":804},[178,123389,123390],{"class":195},"        -drive",[178,123392,123393],{"class":188}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[178,123395,26432],{"class":195},[178,123397,123398,123400,123403],{"class":180,"line":810},[178,123399,123390],{"class":195},[178,123401,123402],{"class":188}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[178,123404,26432],{"class":195},[178,123406,123407,123410,123413],{"class":180,"line":816},[178,123408,123409],{"class":195},"        -monitor",[178,123411,123412],{"class":188}," stdio",[178,123414,26432],{"class":195},[178,123416,123417,123420],{"class":180,"line":822},[178,123418,123419],{"class":195},"        -serial",[178,123421,123422],{"class":188}," none\n",[26,123424,123425],{"start":364},[29,123426,123427,123428],{},"常用操作：",[26,123429,123430,123433,123489],{},[29,123431,123432],{},"全屏：Ctrl+Alt+F",[29,123434,123435,123436,123441],{},"adb调试",[26,123437,123438],{},[29,123439,123440],{},"使Linux与Android用ADB连接。",[154,123442,123444],{"className":118661,"code":123443,"language":118663,"meta":160,"style":160},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[70,123445,123446,123451,123462,123467,123479,123484],{"__ignoreMap":160},[178,123447,123448],{"class":180,"line":181},[178,123449,123450],{"class":2008},"# 连接安卓\n",[178,123452,123453,123456,123459],{"class":180,"line":263},[178,123454,123455],{"class":184},"adb",[178,123457,123458],{"class":188}," connect",[178,123460,123461],{"class":195}," 127.0.0.1\n",[178,123463,123464],{"class":180,"line":274},[178,123465,123466],{"class":2008},"# 打开shell\n",[178,123468,123469,123471,123473,123476],{"class":180,"line":354},[178,123470,123455],{"class":184},[178,123472,28632],{"class":195},[178,123474,123475],{"class":188}," 127.0.0.1:5555",[178,123477,123478],{"class":188}," shell\n",[178,123480,123481],{"class":180,"line":364},[178,123482,123483],{"class":2008},"# 使用root权限\n",[178,123485,123486],{"class":180,"line":740},[178,123487,123488],{"class":184},"su\n",[29,123490,123491,123492],{},"中文输入法",[26,123493,123494],{},[29,123495,123496],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,123498,123500],{"id":123499},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,123502,123503,123504],{},"rEFInd 官网与文档：",[2178,123505,123506],{"href":123506,"rel":123507},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[25619],[1853,123509,123510],{},"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":160,"searchDepth":263,"depth":263,"links":123512},[123513,123514,123518],{"id":123178,"depth":263,"text":123179},{"id":123182,"depth":263,"text":123183,"children":123515},[123516,123517],{"id":123186,"depth":274,"text":123187},{"id":123202,"depth":274,"text":123203},{"id":123499,"depth":263,"text":123500},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123170,"description":25135},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":123525,"title":123526,"body":123527,"description":25135,"extension":1880,"meta":126826,"navigation":721,"path":126827,"seo":126828,"stem":126829,"__hash__":126830},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":123528,"toc":126800},[123529,123532,123536,123539,123546,123796,123799,123871,123874,123878,123882,123887,123890,123893,123896,123901,123904,123907,123910,123915,123918,123923,123926,123929,123934,123937,123942,123945,123949,123953,123956,123961,123964,123978,123981,123984,123993,123996,124005,124008,124011,124020,124023,124032,124035,124038,124047,124050,124053,124068,124071,124074,124083,124088,124091,124094,124103,124106,124115,124118,124127,124130,124139,124144,124147,124155,124160,124163,124172,124175,124183,124188,124191,124200,124203,124206,124210,124213,124218,124221,124226,124240,124245,124250,124261,124266,124272,124277,124292,124297,124300,124305,124310,124315,124323,124328,124335,124340,124351,124356,124359,124363,124366,124369,124374,124377,124396,124401,124404,124413,124418,124421,124443,124446,124476,124479,124484,124487,124501,124506,124525,124528,124531,124536,124548,124553,124558,124561,124566,124569,124584,124587,124592,124597,124601,124606,124646,124649,124653,124659,124665,124670,124673,124680,124685,124692,124695,124698,124705,124719,124722,124782,124785,124799,124811,124814,124817,124820,124884,124887,124890,124893,124913,124916,124921,124928,124932,124935,124939,124944,124949,124953,124956,124959,125001,125006,125009,125031,125046,125048,125053,125065,125125,125127,125129,125183,125185,125187,125193,125198,125201,125206,125210,125213,125275,125280,125283,125285,125289,125301,125383,125385,125387,125441,125447,125449,125453,125458,125460,125465,125469,125489,125524,125528,125531,125534,125537,125544,125547,125559,125562,125577,125580,125599,125647,125650,125667,125670,125684,125689,125692,125701,125716,125728,125766,125771,125780,125785,125790,125816,125825,125829,125833,125838,125841,125845,125849,125854,125857,125862,125865,125870,125873,125878,125881,125885,125890,125893,125898,125901,125905,125910,125913,125918,125921,125926,125929,125933,125938,125941,125946,125949,125954,125957,125961,125966,125969,125974,125977,125982,125985,125990,125993,125998,126001,126006,126009,126013,126018,126021,126026,126033,126037,126042,126045,126050,126053,126057,126062,126065,126068,126071,126074,126077,126081,126084,126094,126099,126104,126126,126131,126136,126143,126147,126152,126155,126158,126163,126166,126169,126172,126175,126178,126181,126184,126187,126190,126193,126196,126199,126204,126209,126214,126219,126224,126229,126234,126237,126241,126244,126248,126253,126258,126263,126268,126272,126278,126286,126291,126294,126299,126314,126317,126322,126356,126371,126374,126429,126455,126467,126470,126479,126482,126497,126502,126505,126511,126516,126519,126524,126527,126532,126537,126544,126547,126562,126565,126600,126605,126613,126651,126654,126657,126662,126665,126670,126681,126715,126720,126723,126732,126737,126743,126746,126751,126760,126765,126768,126771,126776,126784,126787,126792,126797],[10,123530,123526],{"id":123531},"_7-其他操作",[14,123533,123535],{"id":123534},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,123537,123538],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,123540,123541,123542,123545],{},"进入工控机的硬盘目录，进入",[70,123543,123544],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[154,123547,123551],{"className":123548,"code":123549,"language":123550,"meta":160,"style":160},"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",[70,123552,123553,123561,123572,123579,123586,123598,123605,123617,123628,123639,123646,123653,123660,123672,123684,123691,123703,123715,123722,123734,123746,123758,123769,123776,123787],{"__ignoreMap":160},[178,123554,123555,123558],{"class":180,"line":181},[178,123556,123557],{"class":323},"network",[178,123559,123560],{"class":319},": \n",[178,123562,123563,123566,123568,123570],{"class":180,"line":263},[178,123564,123565],{"class":323},"  version",[178,123567,53167],{"class":319},[178,123569,1669],{"class":195},[178,123571,4450],{"class":319},[178,123573,123574,123577],{"class":180,"line":274},[178,123575,123576],{"class":323},"  wifis",[178,123578,123560],{"class":319},[178,123580,123581,123584],{"class":180,"line":354},[178,123582,123583],{"class":323},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[178,123585,123560],{"class":319},[178,123587,123588,123591,123593,123596],{"class":180,"line":364},[178,123589,123590],{"class":323},"      renderer",[178,123592,53167],{"class":319},[178,123594,123595],{"class":188},"NetworkManager",[178,123597,4450],{"class":319},[178,123599,123600,123603],{"class":180,"line":740},[178,123601,123602],{"class":323},"      match",[178,123604,123560],{"class":319},[178,123606,123607,123610,123612,123615],{"class":180,"line":746},[178,123608,123609],{"class":323},"        name",[178,123611,53167],{"class":319},[178,123613,123614],{"class":188},"\"wlan0\"",[178,123616,4450],{"class":319},[178,123618,123619,123622,123624,123626],{"class":180,"line":752},[178,123620,123621],{"class":323},"      dhcp4",[178,123623,53167],{"class":319},[178,123625,3169],{"class":195},[178,123627,4450],{"class":319},[178,123629,123630,123633,123635,123637],{"class":180,"line":757},[178,123631,123632],{"class":323},"      dhcp6",[178,123634,53167],{"class":319},[178,123636,3169],{"class":195},[178,123638,4450],{"class":319},[178,123640,123641,123644],{"class":180,"line":763},[178,123642,123643],{"class":323},"      access-points",[178,123645,123560],{"class":319},[178,123647,123648,123651],{"class":180,"line":769},[178,123649,123650],{"class":188},"        \"EMIS_Vinci_Robocon_5G\"",[178,123652,123560],{"class":319},[178,123654,123655,123658],{"class":180,"line":774},[178,123656,123657],{"class":323},"          auth",[178,123659,123560],{"class":319},[178,123661,123662,123665,123667,123670],{"class":180,"line":780},[178,123663,123664],{"class":323},"            key-management",[178,123666,53167],{"class":319},[178,123668,123669],{"class":188},"\"psk\"",[178,123671,4450],{"class":319},[178,123673,123674,123677,123679,123682],{"class":180,"line":786},[178,123675,123676],{"class":323},"            password",[178,123678,53167],{"class":319},[178,123680,123681],{"class":188},"\"vinci666\"",[178,123683,4450],{"class":319},[178,123685,123686,123689],{"class":180,"line":792},[178,123687,123688],{"class":323},"          networkmanager",[178,123690,123560],{"class":319},[178,123692,123693,123696,123698,123701],{"class":180,"line":798},[178,123694,123695],{"class":323},"            uuid",[178,123697,53167],{"class":319},[178,123699,123700],{"class":188},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[178,123702,4450],{"class":319},[178,123704,123705,123708,123710,123713],{"class":180,"line":804},[178,123706,123707],{"class":323},"            name",[178,123709,53167],{"class":319},[178,123711,123712],{"class":188},"\"EMIS_Vinci_Robocon_5G\"",[178,123714,4450],{"class":319},[178,123716,123717,123720],{"class":180,"line":810},[178,123718,123719],{"class":323},"            passthrough",[178,123721,123560],{"class":319},[178,123723,123724,123727,123729,123732],{"class":180,"line":816},[178,123725,123726],{"class":323},"              wifi-security.auth-alg",[178,123728,53167],{"class":319},[178,123730,123731],{"class":188},"\"open\"",[178,123733,4450],{"class":319},[178,123735,123736,123739,123741,123744],{"class":180,"line":822},[178,123737,123738],{"class":323},"              ipv6.addr-gen-mode",[178,123740,53167],{"class":319},[178,123742,123743],{"class":188},"\"default\"",[178,123745,4450],{"class":319},[178,123747,123748,123751,123753,123756],{"class":180,"line":827},[178,123749,123750],{"class":323},"              ipv6.ip6-privacy",[178,123752,53167],{"class":319},[178,123754,123755],{"class":188},"\"-1\"",[178,123757,4450],{"class":319},[178,123759,123760,123763,123765,123767],{"class":180,"line":832},[178,123761,123762],{"class":323},"              proxy._",[178,123764,53167],{"class":319},[178,123766,9421],{"class":188},[178,123768,4450],{"class":319},[178,123770,123771,123774],{"class":180,"line":850},[178,123772,123773],{"class":323},"      networkmanager",[178,123775,123560],{"class":319},[178,123777,123778,123781,123783,123785],{"class":180,"line":866},[178,123779,123780],{"class":323},"        uuid",[178,123782,53167],{"class":319},[178,123784,123700],{"class":188},[178,123786,4450],{"class":319},[178,123788,123789,123791,123793],{"class":180,"line":877},[178,123790,123609],{"class":323},[178,123792,53167],{"class":319},[178,123794,123795],{"class":188},"\"EMIS_Vinci_Robocon_5G\"\n",[19,123797,123798],{},"将其改为新wifi的名和密码：",[154,123800,123802],{"className":123548,"code":123801,"language":123550,"meta":160,"style":160},"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",[70,123803,123804,123810,123819,123825,123832,123841,123849,123855,123861],{"__ignoreMap":160},[178,123805,123806,123808],{"class":180,"line":181},[178,123807,123557],{"class":323},[178,123809,847],{"class":319},[178,123811,123812,123814,123816],{"class":180,"line":263},[178,123813,123565],{"class":323},[178,123815,53167],{"class":319},[178,123817,123818],{"class":195},"2\n",[178,123820,123821,123823],{"class":180,"line":274},[178,123822,123576],{"class":323},[178,123824,847],{"class":319},[178,123826,123827,123830],{"class":180,"line":354},[178,123828,123829],{"class":323},"    wlan0",[178,123831,847],{"class":319},[178,123833,123834,123836,123838],{"class":180,"line":364},[178,123835,123621],{"class":323},[178,123837,53167],{"class":319},[178,123839,123840],{"class":195},"true\n",[178,123842,123843,123845,123847],{"class":180,"line":740},[178,123844,123632],{"class":323},[178,123846,53167],{"class":319},[178,123848,123840],{"class":195},[178,123850,123851,123853],{"class":180,"line":746},[178,123852,123643],{"class":323},[178,123854,847],{"class":319},[178,123856,123857,123859],{"class":180,"line":752},[178,123858,123650],{"class":188},[178,123860,847],{"class":319},[178,123862,123863,123866,123868],{"class":180,"line":757},[178,123864,123865],{"class":323},"          password",[178,123867,53167],{"class":319},[178,123869,123870],{"class":188},"\"vinci666\"\n",[19,123872,123873],{},"工控机开机即可连上网。",[14,123875,123877],{"id":123876},"_72-ssh远程开发","7.2 SSH远程开发",[387,123879,123881],{"id":123880},"_721-环境准备","7.2.1 环境准备",[19,123883,123884],{},[2093,123885,123886],{},"1.硬件准备",[19,123888,123889],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,123891,123892],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,123894,123895],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,123897,123898],{},[2093,123899,123900],{},"2.设置固定IP",[19,123902,123903],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,123905,123906],{},"1.进入设置界面",[19,123908,123909],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,123911,123912],{},[3269,123913],{"alt":160,"src":123914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,123916,123917],{},"2.配置所连接的网络",[19,123919,123920],{},[3269,123921],{"alt":160,"src":123922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,123924,123925],{},"3.设置固定IP",[19,123927,123928],{},"查看当前IP地址。",[19,123930,123931],{},[3269,123932],{"alt":160,"src":123933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,123935,123936],{},"设置固定IP。",[19,123938,123939],{},[3269,123940],{"alt":160,"src":123941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,123943,123944],{},"至此，IP配置完毕。",[387,123946,123948],{"id":123947},"_722-环境搭建","7.2.2 环境搭建",[19,123950,123951],{},[2093,123952,27505],{},[19,123954,123955],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,123957,123958],{},[2093,123959,123960],{},"实现",[19,123962,123963],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[26,123965,123966,123969,123972,123975],{},[29,123967,123968],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[29,123970,123971],{},"远程主机启动SSH服务；",[29,123973,123974],{},"本地主机登陆远程主机；",[29,123976,123977],{},"实现数据传输。",[19,123979,123980],{},"1.安装SSH客户端与服务端",[19,123982,123983],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[154,123985,123987],{"className":122181,"code":123986,"language":122183,"meta":122184,"style":160}," sudo apt install openssh-server\n",[70,123988,123989],{"__ignoreMap":160},[178,123990,123991],{"class":180,"line":181},[178,123992,123986],{},[19,123994,123995],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[154,123997,123999],{"className":122181,"code":123998,"language":122183,"meta":122184,"style":160},"sudo apt install openssh-client\n",[70,124000,124001],{"__ignoreMap":160},[178,124002,124003],{"class":180,"line":181},[178,124004,123998],{},[19,124006,124007],{},"2.远程主机启动SSH服务",[19,124009,124010],{},"远程主机启动 ssh 服务命令如下：",[154,124012,124014],{"className":122181,"code":124013,"language":122183,"meta":122184,"style":160},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[70,124015,124016],{"__ignoreMap":160},[178,124017,124018],{"class":180,"line":181},[178,124019,124013],{},[19,124021,124022],{},"启动后可使用如下命令查看服务是否正常运行：",[154,124024,124026],{"className":122181,"code":124025,"language":122183,"meta":122184,"style":160},"ps -e | grep ssh\n",[70,124027,124028],{"__ignoreMap":160},[178,124029,124030],{"class":180,"line":181},[178,124031,124025],{},[19,124033,124034],{},"如果启动成功，会包含 sshd 程序。",[19,124036,124037],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[154,124039,124041],{"className":122181,"code":124040,"language":122183,"meta":122184,"style":160},"sudo systemctl enable ssh\n",[70,124042,124043],{"__ignoreMap":160},[178,124044,124045],{"class":180,"line":181},[178,124046,124040],{},[19,124048,124049],{},"3.本地远程登录",[19,124051,124052],{},"登录远程主机可以调用如下命令:",[154,124054,124056],{"className":118661,"code":124055,"language":118663,"meta":160,"style":160},"ssh -X 用户名@ip地址\n",[70,124057,124058],{"__ignoreMap":160},[178,124059,124060,124062,124065],{"class":180,"line":181},[178,124061,123012],{"class":184},[178,124063,124064],{"class":195}," -X",[178,124066,124067],{"class":188}," 用户名@ip地址\n",[19,124069,124070],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,124072,124073],{},"如果退出，可以调用exit命令：",[154,124075,124077],{"className":122181,"code":124076,"language":122183,"meta":122184,"style":160},"exit\n",[70,124078,124079],{"__ignoreMap":160},[178,124080,124081],{"class":180,"line":181},[178,124082,124076],{},[19,124084,124085],{},[2093,124086,124087],{},"4.实现数据传输",[19,124089,124090],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,124092,124093],{},"上传文件指令格式如下：",[154,124095,124097],{"className":122181,"code":124096,"language":122183,"meta":122184,"style":160},"scp 本地文件路径 账号@ip:路径\n",[70,124098,124099],{"__ignoreMap":160},[178,124100,124101],{"class":180,"line":181},[178,124102,124096],{},[19,124104,124105],{},"上传文件夹指令格式如下：",[154,124107,124109],{"className":122181,"code":124108,"language":122183,"meta":122184,"style":160},"scp -r 本地文件夹路径 账号@ip:路径\n",[70,124110,124111],{"__ignoreMap":160},[178,124112,124113],{"class":180,"line":181},[178,124114,124108],{},[19,124116,124117],{},"下载文件指令格式如下：",[154,124119,124121],{"className":122181,"code":124120,"language":122183,"meta":122184,"style":160},"scp 账号@ip:路径 本地文件夹路径\n",[70,124122,124123],{"__ignoreMap":160},[178,124124,124125],{"class":180,"line":181},[178,124126,124120],{},[19,124128,124129],{},"下载文件夹指令格式如下：",[154,124131,124133],{"className":122181,"code":124132,"language":122183,"meta":122184,"style":160},"scp -r 账号@ip:路径 本地文件夹路径\n",[70,124134,124135],{"__ignoreMap":160},[178,124136,124137],{"class":180,"line":181},[178,124138,124132],{},[19,124140,124141],{},[2093,124142,124143],{},"优化",[19,124145,124146],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[26,124148,124149,124152],{},[29,124150,124151],{},"本地生成密钥对；",[29,124153,124154],{},"将公钥上传至远程主机。",[19,124156,124157],{},[2093,124158,124159],{},"1.生成密钥对",[19,124161,124162],{},"本地客户端生成公私钥：（一路回车默认即可）",[154,124164,124166],{"className":122181,"code":124165,"language":122183,"meta":122184,"style":160},"ssh-keygen\n",[70,124167,124168],{"__ignoreMap":160},[178,124169,124170],{"class":180,"line":181},[178,124171,124165],{},[19,124173,124174],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[26,124176,124177,124180],{},[29,124178,124179],{},"id_rsa （私钥）；",[29,124181,124182],{},"id_rsa.pub (公钥)。",[19,124184,124185],{},[2093,124186,124187],{},"2.公钥上传",[19,124189,124190],{},"上传指令如下：",[154,124192,124194],{"className":122181,"code":124193,"language":122183,"meta":122184,"style":160},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[70,124195,124196],{"__ignoreMap":160},[178,124197,124198],{"class":180,"line":181},[178,124199,124193],{},[19,124201,124202],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,124204,124205],{},"以后再远程登录就无需录入密码了。",[387,124207,124209],{"id":124208},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,124211,124212],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,124214,124215],{},[2093,124216,124217],{},"1.准备工作",[19,124219,124220],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,124222,124223],{},[2093,124224,124225],{},"2.为VScode安装远程开发插件",[19,124227,124228,124229,124232,124233,124236,124237,297],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[70,124230,124231],{},"扩展：商店","的搜索栏输入",[70,124234,124235],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[70,124238,124239],{},"安装",[19,124241,124242],{},[3269,124243],{"alt":160,"src":124244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,124246,124247],{},[2093,124248,124249],{},"3.配置远程连接",[19,124251,124252,124253,124256,124257,124260],{},"步骤1：使用快捷键",[70,124254,124255],{},"ctrl + shift + p","打开命令输入窗口，并输入",[70,124258,124259],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,124262,124263],{},[3269,124264],{"alt":160,"src":124265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,124267,124268,124269,297],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[70,124270,124271],{},"Add New SSH Host",[19,124273,124274],{},[3269,124275],{"alt":160,"src":124276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,124278,124279,124280,124283,124284,124287,124288,124291],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[70,124281,124282],{},"ssh +X ubuntu@192.168.43.164","，其中，",[70,124285,124286],{},"ubuntu","需要替换为你的登录用户名，",[70,124289,124290],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,124293,124294],{},[3269,124295],{"alt":160,"src":124296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,124298,124299],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,124301,124302],{},[3269,124303],{"alt":160,"src":124304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,124306,124307],{},[3269,124308],{"alt":160,"src":124309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,124311,124312],{},[2093,124313,124314],{},"4.使用",[19,124316,124317,124318,124256,124320,124322],{},"步骤1：继续使用快捷键",[70,124319,124255],{},[70,124321,124259],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,124324,124325],{},[3269,124326],{"alt":160,"src":124327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,124329,124330,124331,124334],{},"或者，也可以点击侧边栏的",[70,124332,124333],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,124336,124337],{},[3269,124338],{"alt":160,"src":124339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,124341,124342,124343,124346,124347,124350],{},"步骤2：选择菜单栏的",[70,124344,124345],{},"文件","下的",[70,124348,124349],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,124352,124353],{},[3269,124354],{"alt":160,"src":124355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,124357,124358],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124360,124362],{"id":124361},"_73-远程桌面","7.3 远程桌面",[19,124364,124365],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,124367,124368],{},"我们选择使用VNC来看。",[26,124370,124371],{},[29,124372,124373],{},"安装VNC服务器：",[19,124375,124376],{},"这里以TigerVNC为例进行安装：",[154,124378,124380],{"className":118661,"code":124379,"language":118663,"meta":160,"style":160},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[70,124381,124382],{"__ignoreMap":160},[178,124383,124384,124386,124388,124390,124393],{"class":180,"line":181},[178,124385,185],{"class":184},[178,124387,118682],{"class":188},[178,124389,192],{"class":188},[178,124391,124392],{"class":188}," tigervnc-standalone-server",[178,124394,124395],{"class":188}," tigervnc-common\n",[26,124397,124398],{"start":263},[29,124399,124400],{},"设置VNC密码：",[19,124402,124403],{},"为VNC用户设置密码，运行以下命令：",[154,124405,124407],{"className":118661,"code":124406,"language":118663,"meta":160,"style":160},"vncpasswd\n",[70,124408,124409],{"__ignoreMap":160},[178,124410,124411],{"class":180,"line":181},[178,124412,124406],{"class":184},[26,124414,124415],{"start":274},[29,124416,124417],{},"配置VNC启动脚本:",[19,124419,124420],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[154,124422,124424],{"className":118661,"code":124423,"language":118663,"meta":160,"style":160},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[70,124425,124426,124435],{"__ignoreMap":160},[178,124427,124428,124430,124432],{"class":180,"line":181},[178,124429,102947],{"class":184},[178,124431,30963],{"class":195},[178,124433,124434],{"class":188}," ~\u002F.vnc\n",[178,124436,124437,124440],{"class":180,"line":263},[178,124438,124439],{"class":184},"nano",[178,124441,124442],{"class":188}," ~\u002F.vnc\u002Fxstartup\n",[19,124444,124445],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[154,124447,124449],{"className":118661,"code":124448,"language":118663,"meta":160,"style":160},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[70,124450,124451,124456,124464,124471],{"__ignoreMap":160},[178,124452,124453],{"class":180,"line":181},[178,124454,124455],{"class":2008},"#!\u002Fbin\u002Fsh\n",[178,124457,124458,124461],{"class":180,"line":263},[178,124459,124460],{"class":195},"unset",[178,124462,124463],{"class":188}," SESSION_MANAGER\n",[178,124465,124466,124468],{"class":180,"line":274},[178,124467,124460],{"class":195},[178,124469,124470],{"class":188}," DBUS_SESSION_BUS_ADDRESS\n",[178,124472,124473],{"class":180,"line":354},[178,124474,124475],{"class":184},"gnome-session\n",[19,124477,124478],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[26,124480,124481],{"start":354},[29,124482,124483],{},"给予执行权限：",[19,124485,124486],{},"为xstartup文件设置执行权限：",[154,124488,124490],{"className":118661,"code":124489,"language":118663,"meta":160,"style":160},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[70,124491,124492],{"__ignoreMap":160},[178,124493,124494,124496,124499],{"class":180,"line":181},[178,124495,26365],{"class":184},[178,124497,124498],{"class":188}," +x",[178,124500,124442],{"class":188},[26,124502,124503],{"start":364},[29,124504,124505],{},"启动VNC服务器：",[154,124507,124509],{"className":118661,"code":124508,"language":118663,"meta":160,"style":160},"vncserver -geometry 1920x1080 -localhost=0\n",[70,124510,124511],{"__ignoreMap":160},[178,124512,124513,124516,124519,124522],{"class":180,"line":181},[178,124514,124515],{"class":184},"vncserver",[178,124517,124518],{"class":195}," -geometry",[178,124520,124521],{"class":188}," 1920x1080",[178,124523,124524],{"class":195}," -localhost=0\n",[19,124526,124527],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,124529,124530],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[26,124532,124533],{"start":740},[29,124534,124535],{},"查看已开启的VNC服务器：",[154,124537,124539],{"className":118661,"code":124538,"language":118663,"meta":160,"style":160},"vncserver -list\n",[70,124540,124541],{"__ignoreMap":160},[178,124542,124543,124545],{"class":180,"line":181},[178,124544,124515],{"class":184},[178,124546,124547],{"class":195}," -list\n",[19,124549,124550],{},[3269,124551],{"alt":160,"src":124552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[26,124554,124555],{"start":746},[29,124556,124557],{},"连接到VNC服务器：",[19,124559,124560],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[26,124562,124563],{"start":752},[29,124564,124565],{},"停止VNC服务器：",[19,124567,124568],{},"如果需要停止VNC服务器，可以使用以下命令：",[154,124570,124572],{"className":118661,"code":124571,"language":118663,"meta":160,"style":160},"vncserver -kill :1\n",[70,124573,124574],{"__ignoreMap":160},[178,124575,124576,124578,124581],{"class":180,"line":181},[178,124577,124515],{"class":184},[178,124579,124580],{"class":195}," -kill",[178,124582,124583],{"class":188}," :1\n",[19,124585,124586],{},"将:1替换为你实际使用的显示编号。",[19,124588,124589],{},[3269,124590],{"alt":160,"src":124591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,124593,124594],{},[3269,124595],{"alt":160,"src":124596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,124598,124600],{"id":124599},"_74-usb端口设置","7.4 USB端口设置",[19,124602,124603],{},[2093,124604,124605],{},"首先先配置好权限",[154,124607,124609],{"className":118661,"code":124608,"language":118663,"meta":160,"style":160},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[70,124610,124611,124616,124629,124636,124641],{"__ignoreMap":160},[178,124612,124613],{"class":180,"line":181},[178,124614,124615],{"class":2008},"# 将用户权限提高\n",[178,124617,124618,124620,124622,124624,124627],{"class":180,"line":263},[178,124619,185],{"class":184},[178,124621,28323],{"class":188},[178,124623,28326],{"class":195},[178,124625,124626],{"class":188}," dialout",[178,124628,28331],{"class":319},[178,124630,124631,124633],{"class":180,"line":274},[178,124632,28350],{"class":184},[178,124634,124635],{"class":188}," dialout\n",[178,124637,124638],{"class":180,"line":354},[178,124639,124640],{"class":2008},"# 查看下面命令是否输出dialout（若输出才正常）\n",[178,124642,124643],{"class":180,"line":364},[178,124644,124645],{"class":184},"groups\n",[19,124647,124648],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[387,124650,124652],{"id":124651},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,124654,124655,124658],{},[2093,124656,124657],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,124660,124661,124664],{},[2093,124662,124663],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,124666,124667],{},[2093,124668,124669],{},"流程如下：",[19,124671,124672],{},"（1）.查找设备idVendor和idProduct",[19,124674,124675,124676,124679],{},"接入两个USB设备，在终端调用指令",[70,124677,124678],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,124681,124682],{},[3269,124683],{"alt":160,"src":124684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,124686,124687,124688,124691],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[70,124689,124690],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,124693,124694],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,124696,124697],{},"（2）.编写映射规则",[19,124699,124700,124701,124704],{},"在",[70,124702,124703],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[154,124706,124708],{"className":118661,"code":124707,"language":118663,"meta":160,"style":160},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[70,124709,124710],{"__ignoreMap":160},[178,124711,124712,124714,124716],{"class":180,"line":181},[178,124713,185],{"class":184},[178,124715,119948],{"class":188},[178,124717,124718],{"class":188}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,124720,124721],{},"输入如下内容：",[154,124723,124725],{"className":118661,"code":124724,"language":118663,"meta":160,"style":160},"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",[70,124726,124727,124757],{"__ignoreMap":160},[178,124728,124729,124732,124734,124737,124740,124743,124746,124748,124751,124754],{"class":180,"line":181},[178,124730,124731],{"class":319},"KERNEL",[178,124733,330],{"class":699},[178,124735,124736],{"class":188},"=\"ttyUSB*\",",[178,124738,124739],{"class":184}," ATTRS",[178,124741,124742],{"class":188},"{idVendor}==",[178,124744,124745],{"class":184},"\"10c4\"",[178,124747,2318],{"class":184},[178,124749,124750],{"class":188}," ATTRS{idProduct}==\"ea60\",",[178,124752,124753],{"class":188}," MODE:=\"0777\",",[178,124755,124756],{"class":188}," SYMLINK+=\"mylidar\"\n",[178,124758,124759,124761,124763,124765,124767,124769,124772,124774,124777,124779],{"class":180,"line":263},[178,124760,124731],{"class":319},[178,124762,330],{"class":699},[178,124764,124736],{"class":188},[178,124766,124739],{"class":184},[178,124768,124742],{"class":188},[178,124770,124771],{"class":184},"\"1a86\"",[178,124773,2318],{"class":184},[178,124775,124776],{"class":188}," ATTRS{idProduct}==\"7523\",",[178,124778,124753],{"class":188},[178,124780,124781],{"class":188}," SYMLINK+=\"mycar\"\n",[19,124783,124784],{},"代码解释：",[2946,124786,124787,124790,124793,124796],{},[29,124788,124789],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[29,124791,124792],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[29,124794,124795],{},"SYMLINK是符号连接，即绑定的别名；",[29,124797,124798],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,124800,124801,124802,124805,124808],{},"***小提示：***",[25312,124803,124804],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[70,124806,124807],{},"\u002Fetc\u002Fudev\u002Frule.d",[25312,124809,124810],{},"目录即可。",[19,124812,124813],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,124815,124816],{},"（3）.使规则生效",[19,124818,124819],{},"在终端下输入如下指令：",[154,124821,124823],{"className":118661,"code":124822,"language":118663,"meta":160,"style":160},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[70,124824,124825,124830,124842,124853,124857,124862,124875],{"__ignoreMap":160},[178,124826,124827],{"class":180,"line":181},[178,124828,124829],{"class":2008},"# Ubuntu用下方命令\n",[178,124831,124832,124834,124836,124839],{"class":180,"line":263},[178,124833,185],{"class":184},[178,124835,121413],{"class":188},[178,124837,124838],{"class":188}," udev",[178,124840,124841],{"class":188}," reload\n",[178,124843,124844,124846,124848,124850],{"class":180,"line":274},[178,124845,185],{"class":184},[178,124847,121413],{"class":188},[178,124849,124838],{"class":188},[178,124851,124852],{"class":188}," restart\n",[178,124854,124855],{"class":180,"line":354},[178,124856,722],{"emptyLinePlaceholder":721},[178,124858,124859],{"class":180,"line":364},[178,124860,124861],{"class":2008},"#Fedora用下方命令\n",[178,124863,124864,124866,124869,124872],{"class":180,"line":740},[178,124865,185],{"class":184},[178,124867,124868],{"class":188}," udevadm",[178,124870,124871],{"class":188}," control",[178,124873,124874],{"class":195}," --reload\n",[178,124876,124877,124879,124881],{"class":180,"line":746},[178,124878,185],{"class":184},[178,124880,124868],{"class":188},[178,124882,124883],{"class":188}," trigger\n",[19,124885,124886],{},"再重新插拔设备即可。",[19,124888,124889],{},"（4）.测试",[19,124891,124892],{},"终端下输入如下指令",[154,124894,124896],{"className":118661,"code":124895,"language":118663,"meta":160,"style":160},"ll \u002Fdev | grep ttyUSB\n",[70,124897,124898],{"__ignoreMap":160},[178,124899,124900,124903,124906,124908,124910],{"class":180,"line":181},[178,124901,124902],{"class":184},"ll",[178,124904,124905],{"class":188}," \u002Fdev",[178,124907,26862],{"class":699},[178,124909,31983],{"class":184},[178,124911,124912],{"class":188}," ttyUSB\n",[19,124914,124915],{},"运行结果如下：",[19,124917,124918],{},[3269,124919],{"alt":160,"src":124920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,124922,124923,124924,124927],{},"也可以多次插拔USB设备，会发现设备端口",[70,124925,124926],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,124929,124930],{},[2093,124931,119329],{},[19,124933,124934],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[387,124936,124938],{"id":124937},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,124940,124941,124943],{},[2093,124942,124657],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,124945,124946,124948],{},[2093,124947,124663],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,124950,124951],{},[2093,124952,124669],{},[19,124954,124955],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,124957,124958],{},"调用如下指令查看第一台雷达的USB信息：",[154,124960,124962],{"className":118661,"code":124961,"language":118663,"meta":160,"style":160},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[70,124963,124964,124984],{"__ignoreMap":160},[178,124965,124966,124969,124971,124974,124977,124979,124981],{"class":180,"line":181},[178,124967,124968],{"class":184},"udevadm",[178,124970,71541],{"class":188},[178,124972,124973],{"class":195}," --attribute-walk",[178,124975,124976],{"class":195}," --name=\u002Fdev\u002FttyUSB0",[178,124978,26862],{"class":699},[178,124980,31983],{"class":184},[178,124982,124983],{"class":188}," KERNELS\n",[178,124985,124986,124988,124990,124992,124995,124997,124999],{"class":180,"line":263},[178,124987,124968],{"class":184},[178,124989,71541],{"class":188},[178,124991,124973],{"class":195},[178,124993,124994],{"class":195}," --name=\u002Fdev\u002FttyACM0",[178,124996,26862],{"class":699},[178,124998,31983],{"class":184},[178,125000,124983],{"class":188},[19,125002,125003],{},[3269,125004],{"alt":160,"src":125005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,125007,125008],{},"调用如下指令查看第二台雷达的USB信息：",[154,125010,125012],{"className":118661,"code":125011,"language":118663,"meta":160,"style":160},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[70,125013,125014],{"__ignoreMap":160},[178,125015,125016,125018,125020,125022,125025,125027,125029],{"class":180,"line":181},[178,125017,124968],{"class":184},[178,125019,71541],{"class":188},[178,125021,124973],{"class":195},[178,125023,125024],{"class":195}," --name=\u002Fdev\u002FttyUSB1",[178,125026,26862],{"class":699},[178,125028,31983],{"class":184},[178,125030,124983],{"class":188},[19,125032,125033,125034,125037,125038,125041,125042,125045],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[70,125035,125036],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[70,125039,125040],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[2093,125043,125044],{},"唯一性标识","”。",[19,125047,124697],{},[19,125049,124700,125050,125052],{},[70,125051,124703],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[154,125054,125055],{"className":118661,"code":124707,"language":118663,"meta":160,"style":160},[70,125056,125057],{"__ignoreMap":160},[178,125058,125059,125061,125063],{"class":180,"line":181},[178,125060,185],{"class":184},[178,125062,119948],{"class":188},[178,125064,124718],{"class":188},[154,125066,125068],{"className":118661,"code":125067,"language":118663,"meta":160,"style":160},"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",[70,125069,125070,125099],{"__ignoreMap":160},[178,125071,125072,125074,125076,125078,125081,125083,125086,125089,125091,125094,125096],{"class":180,"line":181},[178,125073,124731],{"class":319},[178,125075,330],{"class":699},[178,125077,124736],{"class":188},[178,125079,125080],{"class":319}," KERNELS",[178,125082,330],{"class":699},[178,125084,125085],{"class":188},"=\"1-1.3:1.0\",",[178,125087,125088],{"class":184}," MODE:",[178,125090,330],{"class":188},[178,125092,125093],{"class":184},"\"0777\"",[178,125095,2318],{"class":184},[178,125097,125098],{"class":188}," SYMLINK+=\"rplidar_front\"\n",[178,125100,125101,125103,125105,125107,125109,125111,125114,125116,125118,125120,125122],{"class":180,"line":263},[178,125102,124731],{"class":319},[178,125104,330],{"class":699},[178,125106,124736],{"class":188},[178,125108,125080],{"class":319},[178,125110,330],{"class":699},[178,125112,125113],{"class":188},"=\"1-1.4:1.0\",",[178,125115,125088],{"class":184},[178,125117,330],{"class":188},[178,125119,125093],{"class":184},[178,125121,2318],{"class":184},[178,125123,125124],{"class":188}," SYMLINK+=\"rplidar_back\"\n",[19,125126,124816],{},[19,125128,124819],{},[154,125130,125131],{"className":118661,"code":124822,"language":118663,"meta":160,"style":160},[70,125132,125133,125137,125147,125157,125161,125165,125175],{"__ignoreMap":160},[178,125134,125135],{"class":180,"line":181},[178,125136,124829],{"class":2008},[178,125138,125139,125141,125143,125145],{"class":180,"line":263},[178,125140,185],{"class":184},[178,125142,121413],{"class":188},[178,125144,124838],{"class":188},[178,125146,124841],{"class":188},[178,125148,125149,125151,125153,125155],{"class":180,"line":274},[178,125150,185],{"class":184},[178,125152,121413],{"class":188},[178,125154,124838],{"class":188},[178,125156,124852],{"class":188},[178,125158,125159],{"class":180,"line":354},[178,125160,722],{"emptyLinePlaceholder":721},[178,125162,125163],{"class":180,"line":364},[178,125164,124861],{"class":2008},[178,125166,125167,125169,125171,125173],{"class":180,"line":740},[178,125168,185],{"class":184},[178,125170,124868],{"class":188},[178,125172,124871],{"class":188},[178,125174,124874],{"class":195},[178,125176,125177,125179,125181],{"class":180,"line":746},[178,125178,185],{"class":184},[178,125180,124868],{"class":188},[178,125182,124883],{"class":188},[19,125184,124886],{},[19,125186,124889],{},[19,125188,124892,125189,125192],{},[70,125190,125191],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,125194,125195],{},[3269,125196],{"alt":160,"src":125197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,125199,125200],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,125202,125203,125205],{},[2093,125204,119329],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[387,125207,125209],{"id":125208},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,125211,125212],{},"（1）.查看所连接的主机USB接口的信息",[154,125214,125216],{"className":118661,"code":125215,"language":118663,"meta":160,"style":160},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[70,125217,125218,125248],{"__ignoreMap":160},[178,125219,125220,125222,125224,125227,125229,125231,125233,125235,125238,125241,125243,125246],{"class":180,"line":181},[178,125221,124968],{"class":184},[178,125223,71541],{"class":188},[178,125225,125226],{"class":195}," -a",[178,125228,30963],{"class":195},[178,125230,30170],{"class":319},[178,125232,124968],{"class":184},[178,125234,71541],{"class":188},[178,125236,125237],{"class":195}," -q",[178,125239,125240],{"class":188}," path",[178,125242,248],{"class":195},[178,125244,125245],{"class":188}," \u002Fdev\u002FttyACM0",[178,125247,863],{"class":319},[178,125249,125250,125252,125254,125256,125258,125260,125262,125264,125266,125268,125270,125273],{"class":180,"line":263},[178,125251,124968],{"class":184},[178,125253,71541],{"class":188},[178,125255,125226],{"class":195},[178,125257,30963],{"class":195},[178,125259,30170],{"class":319},[178,125261,124968],{"class":184},[178,125263,71541],{"class":188},[178,125265,125237],{"class":195},[178,125267,125240],{"class":188},[178,125269,248],{"class":195},[178,125271,125272],{"class":188}," \u002Fdev\u002FttyUSB0",[178,125274,863],{"class":319},[19,125276,125277],{},[3269,125278],{"alt":160,"src":125279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,125281,125282],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,125284,124697],{},[19,125286,124700,125287,125052],{},[70,125288,124703],{},[154,125290,125291],{"className":118661,"code":124707,"language":118663,"meta":160,"style":160},[70,125292,125293],{"__ignoreMap":160},[178,125294,125295,125297,125299],{"class":180,"line":181},[178,125296,185],{"class":184},[178,125298,119948],{"class":188},[178,125300,124718],{"class":188},[154,125302,125304],{"className":118661,"code":125303,"language":118663,"meta":160,"style":160},"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",[70,125305,125306,125334,125360],{"__ignoreMap":160},[178,125307,125308,125310,125312,125315,125317,125319,125321,125323,125326,125329,125331],{"class":180,"line":181},[178,125309,124731],{"class":319},[178,125311,330],{"class":699},[178,125313,125314],{"class":188},"=\"ttyACM*\",",[178,125316,124739],{"class":184},[178,125318,124742],{"class":188},[178,125320,124771],{"class":184},[178,125322,2318],{"class":184},[178,125324,125325],{"class":188}," ATTRS{idProduct}==\"55d4\",",[178,125327,125328],{"class":188}," ATTRS{serial}==\"0001\",",[178,125330,124753],{"class":188},[178,125332,125333],{"class":188}," SYMLINK+=\"ttyACM_MCU\"\n",[178,125335,125336,125338,125340,125342,125344,125346,125348,125350,125352,125355,125357],{"class":180,"line":263},[178,125337,124731],{"class":319},[178,125339,330],{"class":699},[178,125341,125314],{"class":188},[178,125343,124739],{"class":184},[178,125345,124742],{"class":188},[178,125347,124771],{"class":184},[178,125349,2318],{"class":184},[178,125351,125325],{"class":188},[178,125353,125354],{"class":188}," ATTRS{serial}==\"0002\",",[178,125356,124753],{"class":188},[178,125358,125359],{"class":188}," SYMLINK+=\"ttyACM_Lidar\"\n",[178,125361,125362,125364,125366,125368,125370,125372,125374,125376,125378,125380],{"class":180,"line":274},[178,125363,124731],{"class":319},[178,125365,330],{"class":699},[178,125367,124736],{"class":188},[178,125369,124739],{"class":184},[178,125371,124742],{"class":188},[178,125373,124771],{"class":184},[178,125375,2318],{"class":184},[178,125377,124776],{"class":188},[178,125379,124753],{"class":188},[178,125381,125382],{"class":188}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,125384,124816],{},[19,125386,124819],{},[154,125388,125389],{"className":118661,"code":124822,"language":118663,"meta":160,"style":160},[70,125390,125391,125395,125405,125415,125419,125423,125433],{"__ignoreMap":160},[178,125392,125393],{"class":180,"line":181},[178,125394,124829],{"class":2008},[178,125396,125397,125399,125401,125403],{"class":180,"line":263},[178,125398,185],{"class":184},[178,125400,121413],{"class":188},[178,125402,124838],{"class":188},[178,125404,124841],{"class":188},[178,125406,125407,125409,125411,125413],{"class":180,"line":274},[178,125408,185],{"class":184},[178,125410,121413],{"class":188},[178,125412,124838],{"class":188},[178,125414,124852],{"class":188},[178,125416,125417],{"class":180,"line":354},[178,125418,722],{"emptyLinePlaceholder":721},[178,125420,125421],{"class":180,"line":364},[178,125422,124861],{"class":2008},[178,125424,125425,125427,125429,125431],{"class":180,"line":740},[178,125426,185],{"class":184},[178,125428,124868],{"class":188},[178,125430,124871],{"class":188},[178,125432,124874],{"class":195},[178,125434,125435,125437,125439],{"class":180,"line":746},[178,125436,185],{"class":184},[178,125438,124868],{"class":188},[178,125440,124883],{"class":188},[19,125442,125443,125444],{},"再重新插拔设备即可，或者 ",[2093,125445,125446],{},"直接重启系统。",[19,125448,124889],{},[19,125450,124892,125451,125192],{},[70,125452,125191],{},[19,125454,125455],{},[3269,125456],{"alt":160,"src":125457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,125459,125200],{},[19,125461,125462,125464],{},[2093,125463,119329],{}," 一些设备可能没有串口号等。",[387,125466,125468],{"id":125467},"_744-其他注意事项","7.4.4 其他注意事项",[19,125470,125471,125472,125474,125475,125478,125479,20168,125482,125485,125486,125488],{},"并非所有的USB设备端口号都是",[70,125473,124926],{},"的格式，比如Arduino的端口号可能是",[70,125476,125477],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[70,125480,125481],{},"videon",[70,125483,125484],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[70,125487,125481],{},"端口，绑定时需要关联的也是该接口。",[19,125490,125491,125492,125495,125496,125499,125500,125502,125503,125506,125507,125510,125511,125514,125515,125514,125518,125514,125521,297],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[70,125493,125494],{},"KERNEL==\"ttyUSB*\"","修改为",[70,125497,125498],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[70,125501,125494],{},"修改为类似于",[70,125504,125505],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[70,125508,125509],{},"video[0,2,4,6]","表示可以绑定的端口为",[70,125512,125513],{},"video0","或",[70,125516,125517],{},"video2",[70,125519,125520],{},"video4",[70,125522,125523],{},"video6",[14,125525,125527],{"id":125526},"_75-挂载内网网页","7.5 挂载内网网页",[19,125529,125530],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,125532,125533],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,125535,125536],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,125538,125539,125540],{},"Termux 下载地址（F-Droid）：",[2178,125541,125542],{"href":125542,"rel":125543},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[25619],[19,125545,125546],{},"首先打开app后，先更新软件缓存：",[154,125548,125550],{"className":118661,"code":125549,"language":118663,"meta":160,"style":160},"pkg update\n",[70,125551,125552],{"__ignoreMap":160},[178,125553,125554,125557],{"class":180,"line":181},[178,125555,125556],{"class":184},"pkg",[178,125558,27993],{"class":188},[19,125560,125561],{},"然后换源",[154,125563,125565],{"className":118661,"code":125564,"language":118663,"meta":160,"style":160},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[70,125566,125567],{"__ignoreMap":160},[178,125568,125569,125571,125574],{"class":180,"line":181},[178,125570,124439],{"class":184},[178,125572,125573],{"class":319}," $PREFIX",[178,125575,125576],{"class":188},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,125578,125579],{},"将该文件内容替换为下面：",[154,125581,125583],{"className":118661,"code":125582,"language":118663,"meta":160,"style":160},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[70,125584,125585],{"__ignoreMap":160},[178,125586,125587,125590,125593,125596],{"class":180,"line":181},[178,125588,125589],{"class":184},"deb",[178,125591,125592],{"class":188}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[178,125594,125595],{"class":188}," stable",[178,125597,125598],{"class":188}," main\n",[2946,125600,125601,125628],{},[29,125602,125603,125604,125606,125607],{},"如果你使用的是",[70,125605,124439],{},"编辑器：",[2946,125608,125609,125616,125622],{},[29,125610,125611,125612,125615],{},"按 ",[70,125613,125614],{},"Ctrl+O"," 保存文件。",[29,125617,125611,125618,125621],{},[70,125619,125620],{},"Enter"," 确认文件名。",[29,125623,125611,125624,125627],{},[70,125625,125626],{},"Ctrl+X"," 退出编辑器。",[29,125629,125603,125630,125606,125633],{},[70,125631,125632],{},"vim",[2946,125634,125635,125641],{},[29,125636,125611,125637,125640],{},[70,125638,125639],{},"Esc"," 退出编辑模式。",[29,125642,125643,125644,125646],{},"输入 ",[70,125645,120586],{}," 保存并退出。",[19,125648,125649],{},"接下来重新更新软件源：",[154,125651,125653],{"className":118661,"code":125652,"language":118663,"meta":160,"style":160},"pkg update && pkg upgrade\n",[70,125654,125655],{"__ignoreMap":160},[178,125656,125657,125659,125661,125663,125665],{"class":180,"line":181},[178,125658,125556],{"class":184},[178,125660,118712],{"class":188},[178,125662,27941],{"class":319},[178,125664,125556],{"class":184},[178,125666,118698],{"class":188},[19,125668,125669],{},"安装python：",[154,125671,125673],{"className":118661,"code":125672,"language":118663,"meta":160,"style":160},"pkg install python\n",[70,125674,125675],{"__ignoreMap":160},[178,125676,125677,125679,125681],{"class":180,"line":181},[178,125678,125556],{"class":184},[178,125680,192],{"class":188},[178,125682,125683],{"class":188}," python\n",[19,125685,125686,28222],{},[2093,125687,125688],{},"通过Termux访问设备存储",[19,125690,125691],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[154,125693,125695],{"className":118661,"code":125694,"language":118663,"meta":160,"style":160},"termux-setup-storage\n",[70,125696,125697],{"__ignoreMap":160},[178,125698,125699],{"class":180,"line":181},[178,125700,125694],{"class":184},[26,125702,125703],{},[29,125704,125705,28222,125708],{},[2093,125706,125707],{},"进入HTML文件所在的目录",[26,125709,125710],{},[29,125711,125712,125713,125715],{},"使用",[70,125714,102957],{},"命令进入HTML文件所在的目录：",[154,125717,125719],{"className":118661,"code":125718,"language":118663,"meta":160,"style":160},"cd ~\u002Fyour_html_folder\n",[70,125720,125721],{"__ignoreMap":160},[178,125722,125723,125725],{"class":180,"line":181},[178,125724,102957],{"class":195},[178,125726,125727],{"class":188}," ~\u002Fyour_html_folder\n",[26,125729,125730],{"start":263},[29,125731,125732,28222,125735,125740,125757],{},[2093,125733,125734],{},"启动Python HTTP服务器",[26,125736,125737],{},[29,125738,125739],{},"运行以下命令启动一个简单的HTTP服务器：",[154,125741,125743],{"className":118661,"code":125742,"language":118663,"meta":160,"style":160},"python -m http.server 8000\n",[70,125744,125745],{"__ignoreMap":160},[178,125746,125747,125749,125751,125754],{"class":180,"line":181},[178,125748,692],{"class":184},[178,125750,102588],{"class":195},[178,125752,125753],{"class":188}," http.server",[178,125755,125756],{"class":195}," 8000\n",[26,125758,125759],{"start":274},[29,125760,125761,125762,125765],{},"这会在端口",[70,125763,125764],{},"8000","上启动一个Web服务器。",[2946,125767,125768],{},[29,125769,125770],{},"启动服务器后，Termux会显示日志信息，例如：",[154,125772,125774],{"className":122181,"code":125773,"language":122183,"meta":122184,"style":160},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[70,125775,125776],{"__ignoreMap":160},[178,125777,125778],{"class":180,"line":181},[178,125779,125773],{},[2946,125781,125782],{},[29,125783,125784],{},"这表示服务器已成功启动。",[19,125786,125787],{},[2093,125788,125789],{},"在浏览器中访问HTML文件",[26,125791,125792],{},[29,125793,125794,28222,125797,125802],{},[2093,125795,125796],{},"在同一设备上访问",[26,125798,125799],{},[29,125800,125801],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[154,125803,125806],{"className":125804,"code":125805,"language":73384,"meta":160,"style":160},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[70,125807,125808],{"__ignoreMap":160},[178,125809,125810,125813],{"class":180,"line":181},[178,125811,125812],{"class":319},"http:",[178,125814,125815],{"class":2008},"\u002F\u002Flocalhost:8000\n",[2946,125817,125818],{},[29,125819,125820,125821,125824],{},"如果HTML文件中有",[70,125822,125823],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,125826,125828],{"id":125827},"_76-linux重点知识","7.6 Linux重点知识",[387,125830,125832],{"id":125831},"_761-关于点的说明","7.6.1 关于点的说明",[19,125834,125835],{},[3269,125836],{"alt":160,"src":125837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,125839,125840],{},"一点本目录，两点上目录",[387,125842,125844],{"id":125843},"_762-目录","7.6.2 目录",[23756,125846,125848],{"id":125847},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,125850,125851],{},[2093,125852,125853],{},"\u002Fboot:",[19,125855,125856],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,125858,125859],{},[2093,125860,125861],{},"\u002Fetc:",[19,125863,125864],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,125866,125867],{},[2093,125868,125869],{},"\u002Flib：",[19,125871,125872],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,125874,125875],{},[2093,125876,125877],{},"\u002Fsys:",[19,125879,125880],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[23756,125882,125884],{"id":125883},"_7622-指令集合","7.6.2.2 指令集合",[19,125886,125887],{},[2093,125888,125889],{},"\u002Fbin:",[19,125891,125892],{},"为二进制文件的缩写，存放最经常使用的命令",[19,125894,125895],{},[2093,125896,125897],{},"\u002Fsbin:",[19,125899,125900],{},"只有系统管理员才能使用的程序和指令",[23756,125902,125904],{"id":125903},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,125906,125907],{},[2093,125908,125909],{},"\u002Fdev:",[19,125911,125912],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,125914,125915],{},[2093,125916,125917],{},"\u002Fmedia:",[19,125919,125920],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,125922,125923],{},[2093,125924,125925],{},"\u002Fmnt:",[19,125927,125928],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[23756,125930,125932],{"id":125931},"_7624-临时文件","7.6.2.4 临时文件",[19,125934,125935],{},[2093,125936,125937],{},"\u002Frun:",[19,125939,125940],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,125942,125943],{},[2093,125944,125945],{},"\u002Flost+found:",[19,125947,125948],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,125950,125951],{},[2093,125952,125953],{},"\u002Ftmp:",[19,125955,125956],{},"这个目录是用来存放一些临时文件的",[23756,125958,125960],{"id":125959},"_7625-账户","7.6.2.5 账户",[19,125962,125963],{},[2093,125964,125965],{},"\u002Froot：",[19,125967,125968],{},"系统管理员的用户主目录",[19,125970,125971,28222],{},[2093,125972,125973],{},"\u002Fhome",[19,125975,125976],{},"用户的主目录，以用户的账号命名的",[19,125978,125979,28222],{},[2093,125980,125981],{},"\u002Fusr",[19,125983,125984],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,125986,125987],{},[2093,125988,125989],{},"\u002Fusr\u002Fbin：",[19,125991,125992],{},"系统用户使用的应用程序与指令",[19,125994,125995],{},[2093,125996,125997],{},"\u002Fusr\u002Fsbin：",[19,125999,126000],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,126002,126003],{},[2093,126004,126005],{},"\u002Fusr\u002Fsrc：",[19,126007,126008],{},"内核源代码默认的放置目录",[23756,126010,126012],{"id":126011},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,126014,126015],{},[2093,126016,126017],{},"\u002Fvar：",[19,126019,126020],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,126022,126023],{},[2093,126024,126025],{},"\u002Fproc:",[19,126027,126028,126029,126032],{},"管理 ",[2093,126030,126031],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[23756,126034,126036],{"id":126035},"_7627-扩展用的","7.6.2.7 扩展用的",[19,126038,126039],{},[2093,126040,126041],{},"\u002Fopt:",[19,126043,126044],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,126046,126047],{},[2093,126048,126049],{},"\u002Fsrv:",[19,126051,126052],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[387,126054,126056],{"id":126055},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,126058,126059],{},[3269,126060],{"alt":160,"src":126061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,126063,126064],{},"windows-->linux:",[19,126066,126067],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,126069,126070],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,126072,126073],{},"linux传输文件到windows",[19,126075,126076],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[387,126078,126080],{"id":126079},"_764-易忘知识","7.6.4 易忘知识",[19,126082,126083],{},"操作系统内核查看",[154,126085,126086],{"className":118661,"code":122655,"language":118663,"meta":160,"style":160},[70,126087,126088],{"__ignoreMap":160},[178,126089,126090,126092],{"class":180,"line":181},[178,126091,71924],{"class":184},[178,126093,122664],{"class":195},[19,126095,126096],{},[3269,126097],{"alt":160,"src":126098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,126100,126101],{},[3269,126102],{"alt":160,"src":126103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[154,126105,126107],{"className":118661,"code":126106,"language":118663,"meta":160,"style":160},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[70,126108,126109,126121],{"__ignoreMap":160},[178,126110,126111,126113,126116,126119],{"class":180,"line":181},[178,126112,122872],{"class":184},[178,126114,126115],{"class":188}," mvtest",[178,126117,126118],{"class":188}," mvtest2",[178,126120,4450],{"class":319},[178,126122,126123],{"class":180,"line":263},[178,126124,126125],{"class":184},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,126127,126128],{},[3269,126129],{"alt":160,"src":126130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,126132,126133],{},[3269,126134],{"alt":160,"src":126135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,126137,126138,126139,126142],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[70,126140,126141],{},"du -a"," 可以快速查看磁盘使用细节。",[387,126144,126146],{"id":126145},"_765-vim","7.6.5 Vim",[19,126148,126149],{},[3269,126150],{"alt":160,"src":126151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,126153,126154],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,126156,126157],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,126159,126160],{},[2093,126161,126162],{},"1.命令模式：",[19,126164,126165],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,126167,126168],{},"x 删除当前光标所在处的字符",[19,126170,126171],{},"：切换到底线命令模式，以在最底一行输入命令",[19,126173,126174],{},"a 进行插入模式，在光标下一个位置输入文本",[19,126176,126177],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,126179,126180],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,126182,126183],{},"dd 剪切当前行",[19,126185,126186],{},"yy 复制当前行",[19,126188,126189],{},"p 粘贴剪贴板内容到光标下方",[19,126191,126192],{},"P 粘贴剪贴板内容到光标上方",[19,126194,126195],{},"u 撤销上一次操作",[19,126197,126198],{},"ctrl+r 重做上一次操作",[19,126200,126201,126203],{},[2735,126202],{}," 保存文件",[19,126205,126206,126208],{},[2585,126207],{}," 退出Vim编辑器",[19,126210,126211,126213],{},[2585,126212],{},"! 强制退出Vim编辑器，不保存修改",[19,126215,126216],{},[2093,126217,126218],{},"2.输入模式：",[19,126220,126221],{},[3269,126222],{"alt":160,"src":126223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,126225,126226],{},[2093,126227,126228],{},"3.底线命令模式：",[19,126230,126231],{},[3269,126232],{"alt":160,"src":126233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,126235,126236],{},"按下esc可以退出底线命令模式",[387,126238,126240],{"id":126239},"_766-apt","7.6.6 apt",[19,126242,126243],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[387,126245,126247],{"id":126246},"_767-home与root的区别","7.6.7 home与root的区别",[19,126249,126250],{},[3269,126251],{"alt":160,"src":126252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,126254,126255],{},[3269,126256],{"alt":160,"src":126257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,126259,126260],{},[3269,126261],{"alt":160,"src":126262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,126264,126265],{},[3269,126266],{"alt":160,"src":126267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[387,126269,126271],{"id":126270},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,126273,126274],{},[2178,126275,126276],{"href":126276,"rel":126277},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[25619],[26,126279,126280,126283],{},[29,126281,126282],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[29,126284,126285],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,126287,126288],{},[3269,126289],{"alt":160,"src":126290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,126292,126293],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,126295,126296],{},[3269,126297],{"alt":160,"src":126298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[154,126300,126302],{"className":122181,"code":126301,"language":122183,"meta":122184,"style":160},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[70,126303,126304,126309],{"__ignoreMap":160},[178,126305,126306],{"class":180,"line":181},[178,126307,126308],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[178,126310,126311],{"class":180,"line":263},[178,126312,126313],{},".\u002Fpycharm.sh\n",[19,126315,126316],{},"3️⃣创建.desktop文件",[19,126318,126319],{},[2093,126320,126321],{},"原理：",[2946,126323,126324,126334],{},[29,126325,126326,126327,126333],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[2093,126328,126329,126332],{},[70,126330,126331],{},".desktop"," 文件"," 来识别应用。",[29,126335,126336,126338,126339],{},[70,126337,126331],{}," 文件相当于一个“应用注册表”，告诉系统：",[2946,126340,126341,126344,126347,126350,126353],{},[29,126342,126343],{},"应用名字（Name）",[29,126345,126346],{},"图标（Icon）",[29,126348,126349],{},"执行命令（Exec）",[29,126351,126352],{},"分类（Categories）",[29,126354,126355],{},"是否需要终端（Terminal）",[154,126357,126359],{"className":122181,"code":126358,"language":122183,"meta":122184,"style":160},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[70,126360,126361,126366],{"__ignoreMap":160},[178,126362,126363],{"class":180,"line":181},[178,126364,126365],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[178,126367,126368],{"class":180,"line":263},[178,126369,126370],{},"nano pycharm.desktop\n",[19,126372,126373],{},"nano是一个命令行下的编辑器，也可以使用vim",[154,126375,126377],{"className":122181,"code":126376,"language":122183,"meta":122184,"style":160},"[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",[70,126378,126379,126384,126389,126394,126399,126404,126409,126414,126419,126424],{"__ignoreMap":160},[178,126380,126381],{"class":180,"line":181},[178,126382,126383],{},"[Desktop Entry]\n",[178,126385,126386],{"class":180,"line":263},[178,126387,126388],{},"Version=1.0\n",[178,126390,126391],{"class":180,"line":274},[178,126392,126393],{},"Type=Application\n",[178,126395,126396],{"class":180,"line":354},[178,126397,126398],{},"Name=PyCharm\n",[178,126400,126401],{"class":180,"line":364},[178,126402,126403],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[178,126405,126406],{"class":180,"line":740},[178,126407,126408],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[178,126410,126411],{"class":180,"line":746},[178,126412,126413],{},"Comment=JetBrains PyCharm IDE\n",[178,126415,126416],{"class":180,"line":752},[178,126417,126418],{},"Categories=Development;IDE;\n",[178,126420,126421],{"class":180,"line":757},[178,126422,126423],{},"Terminal=false\n",[178,126425,126426],{"class":180,"line":763},[178,126427,126428],{},"StartupWMClass=jetbrains-pycharm\n",[2946,126430,126431,126437,126443,126449],{},[29,126432,126433,126436],{},[70,126434,126435],{},"Exec"," → 点击图标时执行的命令",[29,126438,126439,126442],{},[70,126440,126441],{},"Icon"," → 显示在菜单和桌面上的图标",[29,126444,126445,126448],{},[70,126446,126447],{},"Terminal=false"," → 不打开终端",[29,126450,126451,126454],{},[70,126452,126453],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[126456,126457,126458],"blockquote",{},[19,126459,126460,126461,126463,126464],{},"可以理解成 ",[70,126462,126331],{}," 文件是 Linux 的 ",[2093,126465,126466],{},"快捷方式配置文件",[19,126468,126469],{},"4️⃣设置可执行权限",[154,126471,126473],{"className":122181,"code":126472,"language":122183,"meta":122184,"style":160},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[70,126474,126475],{"__ignoreMap":160},[178,126476,126477],{"class":180,"line":181},[178,126478,126472],{},[19,126480,126481],{},"5️⃣桌面图标启动的话如下：",[154,126483,126485],{"className":122181,"code":126484,"language":122183,"meta":122184,"style":160},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[70,126486,126487,126492],{"__ignoreMap":160},[178,126488,126489],{"class":180,"line":181},[178,126490,126491],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[178,126493,126494],{"class":180,"line":263},[178,126495,126496],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[26,126498,126499],{"start":274},[29,126500,126501],{},"下载Appimage文件实现软件的安装",[19,126503,126504],{},"1️⃣先下载appimage",[19,126506,126507],{},[2178,126508,126509],{"href":126509,"rel":126510},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[25619],[19,126512,126513],{},[3269,126514],{"alt":160,"src":126515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,126517,126518],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,126520,126521],{},[3269,126522],{"alt":160,"src":126523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,126525,126526],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,126528,126529],{},[3269,126530],{"alt":160,"src":126531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,126533,126534],{},[3269,126535],{"alt":160,"src":126536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,126538,126539,126540,126543],{},"3️⃣给他们放在",[70,126541,126542],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,126545,126546],{},"4️⃣给软件执行权限",[154,126548,126550],{"className":122181,"code":126549,"language":122183,"meta":122184,"style":160},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[70,126551,126552,126557],{"__ignoreMap":160},[178,126553,126554],{"class":180,"line":181},[178,126555,126556],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[178,126558,126559],{"class":180,"line":263},[178,126560,126561],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,126563,126564],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[154,126566,126568],{"className":118661,"code":126567,"language":118663,"meta":160,"style":160},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[70,126569,126570,126577,126584,126590],{"__ignoreMap":160},[178,126571,126572,126574],{"class":180,"line":181},[178,126573,102957],{"class":195},[178,126575,126576],{"class":188}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[178,126578,126579,126581],{"class":180,"line":263},[178,126580,1115],{"class":184},[178,126582,126583],{"class":188}," .\u002Fqqmusic.desktop\n",[178,126585,126586,126588],{"class":180,"line":274},[178,126587,125632],{"class":184},[178,126589,126583],{"class":188},[178,126591,126592,126594,126596,126598],{"class":180,"line":354},[178,126593,185],{"class":184},[178,126595,26333],{"class":188},[178,126597,124498],{"class":188},[178,126599,126583],{"class":188},[19,126601,126602,126604],{},[70,126603,1115],{},"：一个 Linux 命令，主要功能是：",[2946,126606,126607,126610],{},[29,126608,126609],{},"如果文件不存在，就创建一个新的空文件",[29,126611,126612],{},"如果文件已存在，就更新该文件的最后修改时间",[154,126614,126616],{"className":122181,"code":126615,"language":122183,"meta":122184,"style":160},"[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",[70,126617,126618,126622,126627,126632,126637,126641,126646],{"__ignoreMap":160},[178,126619,126620],{"class":180,"line":181},[178,126621,126383],{},[178,126623,126624],{"class":180,"line":263},[178,126625,126626],{},"Name=QQ音乐\n",[178,126628,126629],{"class":180,"line":274},[178,126630,126631],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[178,126633,126634],{"class":180,"line":354},[178,126635,126636],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[178,126638,126639],{"class":180,"line":364},[178,126640,126393],{},[178,126642,126643],{"class":180,"line":740},[178,126644,126645],{},"Categories=Audio;Music;Player;\n",[178,126647,126648],{"class":180,"line":746},[178,126649,126650],{},"Comment=QQ Music Client for Linux\n",[19,126652,126653],{},"将文件复制进去",[19,126655,126656],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,126658,126659],{},[3269,126660],{"alt":160,"src":126661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,126663,126664],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,126666,126667],{},[3269,126668],{"alt":160,"src":126669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,126671,126672,126673,126676,126677,126680],{},"如果你用的不是KDE，那么也可以直接修改",[70,126674,126675],{},"qqmuic.desktop","：在exec的末尾加上",[70,126678,126679],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[154,126682,126684],{"className":122181,"code":126683,"language":122183,"meta":122184,"style":160},"[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",[70,126685,126686,126690,126694,126699,126703,126707,126711],{"__ignoreMap":160},[178,126687,126688],{"class":180,"line":181},[178,126689,126383],{},[178,126691,126692],{"class":180,"line":263},[178,126693,126626],{},[178,126695,126696],{"class":180,"line":274},[178,126697,126698],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[178,126700,126701],{"class":180,"line":354},[178,126702,126636],{},[178,126704,126705],{"class":180,"line":364},[178,126706,126393],{},[178,126708,126709],{"class":180,"line":740},[178,126710,126645],{},[178,126712,126713],{"class":180,"line":746},[178,126714,126650],{},[19,126716,126717],{},[3269,126718],{"alt":160,"src":126719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,126721,126722],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[154,126724,126726],{"className":122181,"code":126725,"language":122183,"meta":122184,"style":160},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[70,126727,126728],{"__ignoreMap":160},[178,126729,126730],{"class":180,"line":181},[178,126731,126725],{},[26,126733,126734],{"start":354},[29,126735,126736],{},"去Flathub上安装软件",[19,126738,126739],{},[2178,126740,126741],{"href":126741,"rel":126742},"https:\u002F\u002Fflathub.org\u002F",[25619],[19,126744,126745],{},"1️⃣去上面的官网搜索软件+下载软件",[19,126747,126748],{},[3269,126749],{"alt":160,"src":126750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[154,126752,126754],{"className":122181,"code":126753,"language":122183,"meta":122184,"style":160},"flatpak install flathub com.obsproject.Studio\n",[70,126755,126756],{"__ignoreMap":160},[178,126757,126758],{"class":180,"line":181},[178,126759,126753],{},[19,126761,126762],{},[3269,126763],{"alt":160,"src":126764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,126766,126767],{},"2️⃣运行软件",[19,126769,126770],{},"a.官方方式：",[19,126772,126773],{},[3269,126774],{"alt":160,"src":126775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[154,126777,126778],{"className":122181,"code":126753,"language":122183,"meta":122184,"style":160},[70,126779,126780],{"__ignoreMap":160},[178,126781,126782],{"class":180,"line":181},[178,126783,126753],{},[19,126785,126786],{},"b.当普通软件运行：",[19,126788,126789],{},[3269,126790],{"alt":160,"src":126791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,126793,126794],{},[3269,126795],{"alt":160,"src":126796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[1853,126798,126799],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":160,"searchDepth":263,"depth":263,"links":126801},[126802,126803,126808,126809,126815,126816],{"id":123534,"depth":263,"text":123535},{"id":123876,"depth":263,"text":123877,"children":126804},[126805,126806,126807],{"id":123880,"depth":274,"text":123881},{"id":123947,"depth":274,"text":123948},{"id":124208,"depth":274,"text":124209},{"id":124361,"depth":263,"text":124362},{"id":124599,"depth":263,"text":124600,"children":126810},[126811,126812,126813,126814],{"id":124651,"depth":274,"text":124652},{"id":124937,"depth":274,"text":124938},{"id":125208,"depth":274,"text":125209},{"id":125467,"depth":274,"text":125468},{"id":125526,"depth":263,"text":125527},{"id":125827,"depth":263,"text":125828,"children":126817},[126818,126819,126820,126821,126822,126823,126824,126825],{"id":125831,"depth":274,"text":125832},{"id":125843,"depth":274,"text":125844},{"id":126055,"depth":274,"text":126056},{"id":126079,"depth":274,"text":126080},{"id":126145,"depth":274,"text":126146},{"id":126239,"depth":274,"text":126240},{"id":126246,"depth":274,"text":126247},{"id":126270,"depth":274,"text":126271},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":123526,"description":25135},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":126832,"title":126833,"body":126834,"description":25135,"extension":1880,"meta":126838,"navigation":721,"path":126839,"seo":126840,"stem":126841,"__hash__":126842},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":126835,"toc":126836},[],{"title":160,"searchDepth":263,"depth":263,"links":126837},[],{"category":32010},"\u002Fwiki\u002F2025-01-27-linux",{"title":126833,"description":25135},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":126844,"title":126845,"body":126846,"description":126850,"extension":1880,"meta":127241,"navigation":721,"path":127242,"seo":127243,"stem":127244,"__hash__":127245},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":126847,"toc":127239},[126848,126851,126855,126872,126875,126928,126932,126934,126974,126983,126987,126990,127231,127236],[19,126849,126850],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,126852,126854],{"id":126853},"_1ubuntu环境配置","1.Ubuntu环境配置",[26,126856,126857,126860,126863,126866,126869],{},[29,126858,126859],{},"ubuntu环境换源",[29,126861,126862],{},"安装cuda",[29,126864,126865],{},"安装miniconda",[29,126867,126868],{},"安装pytorch",[29,126870,126871],{},"安装genesis",[19,126873,126874],{},"参考链接：",[154,126876,126878],{"className":172,"code":126877,"language":174,"meta":160,"style":160},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[70,126879,126880],{"__ignoreMap":160},[178,126881,126882,126885,126888,126891,126893,126896,126899,126901,126904,126907,126909,126912,126915,126917,126920,126923,126925],{"class":180,"line":181},[178,126883,126884],{"class":184},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[178,126886,126887],{"class":188},"=blogdetail",[178,126889,126890],{"class":319},"&sharetype",[178,126892,330],{"class":699},[178,126894,126895],{"class":188},"blogdetail",[178,126897,126898],{"class":319},"&sharerId",[178,126900,330],{"class":699},[178,126902,126903],{"class":188},"144728092",[178,126905,126906],{"class":319},"&sharerefer",[178,126908,330],{"class":699},[178,126910,126911],{"class":188},"PC",[178,126913,126914],{"class":319},"&sharesource",[178,126916,330],{"class":699},[178,126918,126919],{"class":188},"qq_69379513",[178,126921,126922],{"class":319},"&sharefrom",[178,126924,330],{"class":699},[178,126926,126927],{"class":188},"from_link\n",[10,126929,126931],{"id":126930},"_2genesis-报错issue","2.Genesis 报错issue",[19,126933,126874],{},[154,126935,126936],{"className":172,"code":126877,"language":174,"meta":160,"style":160},[70,126937,126938],{"__ignoreMap":160},[178,126939,126940,126942,126944,126946,126948,126950,126952,126954,126956,126958,126960,126962,126964,126966,126968,126970,126972],{"class":180,"line":181},[178,126941,126884],{"class":184},[178,126943,126887],{"class":188},[178,126945,126890],{"class":319},[178,126947,330],{"class":699},[178,126949,126895],{"class":188},[178,126951,126898],{"class":319},[178,126953,330],{"class":699},[178,126955,126903],{"class":188},[178,126957,126906],{"class":319},[178,126959,330],{"class":699},[178,126961,126911],{"class":188},[178,126963,126914],{"class":319},[178,126965,330],{"class":699},[178,126967,126919],{"class":188},[178,126969,126922],{"class":319},[178,126971,330],{"class":699},[178,126973,126927],{"class":188},[154,126975,126977],{"className":172,"code":126976,"language":174,"meta":160,"style":160},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[70,126978,126979],{"__ignoreMap":160},[178,126980,126981],{"class":180,"line":181},[178,126982,126976],{"class":184},[10,126984,126986],{"id":126985},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,126988,126989],{},"hello_robot.py",[154,126991,126993],{"className":690,"code":126992,"language":692,"meta":160,"style":160},"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",[70,126994,126995,127001,127016,127020,127032,127044,127048,127061,127065,127084,127094,127104,127118,127122,127126,127131,127135,127145,127152,127166,127173,127183,127188,127192,127210,127215,127219,127226],{"__ignoreMap":160},[178,126996,126997,126999],{"class":180,"line":181},[178,126998,700],{"class":699},[178,127000,47037],{"class":319},[178,127002,127003,127006,127009,127011,127013],{"class":180,"line":263},[178,127004,127005],{"class":319},"os.environ[",[178,127007,127008],{"class":188},"'PYOPENGL_PLATFORM'",[178,127010,6214],{"class":319},[178,127012,330],{"class":699},[178,127014,127015],{"class":188}," 'glx'\n",[178,127017,127018],{"class":180,"line":274},[178,127019,722],{"emptyLinePlaceholder":721},[178,127021,127022,127024,127027,127029],{"class":180,"line":354},[178,127023,700],{"class":699},[178,127025,127026],{"class":319}," genesis ",[178,127028,713],{"class":699},[178,127030,127031],{"class":319}," gs\n",[178,127033,127034,127036,127039,127041],{"class":180,"line":364},[178,127035,32479],{"class":699},[178,127037,127038],{"class":319}," pynput ",[178,127040,700],{"class":699},[178,127042,127043],{"class":319}," keyboard\n",[178,127045,127046],{"class":180,"line":740},[178,127047,722],{"emptyLinePlaceholder":721},[178,127049,127050,127053,127056,127058],{"class":180,"line":746},[178,127051,127052],{"class":319},"gs.init(",[178,127054,127055],{"class":6985},"backend",[178,127057,330],{"class":699},[178,127059,127060],{"class":319},"gs.gpu)\n",[178,127062,127063],{"class":180,"line":752},[178,127064,722],{"emptyLinePlaceholder":721},[178,127066,127067,127070,127072,127075,127078,127080,127082],{"class":180,"line":757},[178,127068,127069],{"class":319},"scene ",[178,127071,330],{"class":699},[178,127073,127074],{"class":319}," gs.Scene(",[178,127076,127077],{"class":6985},"show_viewer",[178,127079,330],{"class":699},[178,127081,33212],{"class":195},[178,127083,863],{"class":319},[178,127085,127086,127089,127091],{"class":180,"line":763},[178,127087,127088],{"class":319},"plane ",[178,127090,330],{"class":699},[178,127092,127093],{"class":319}," scene.add_entity(gs.morphs.Plane())\n",[178,127095,127096,127099,127101],{"class":180,"line":769},[178,127097,127098],{"class":319},"franka ",[178,127100,330],{"class":699},[178,127102,127103],{"class":319}," scene.add_entity(\n",[178,127105,127106,127109,127111,127113,127116],{"class":180,"line":774},[178,127107,127108],{"class":319},"    gs.morphs.MJCF(",[178,127110,47086],{"class":6985},[178,127112,330],{"class":699},[178,127114,127115],{"class":188},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[178,127117,39779],{"class":319},[178,127119,127120],{"class":180,"line":780},[178,127121,863],{"class":319},[178,127123,127124],{"class":180,"line":786},[178,127125,722],{"emptyLinePlaceholder":721},[178,127127,127128],{"class":180,"line":792},[178,127129,127130],{"class":319},"scene.build()\n",[178,127132,127133],{"class":180,"line":798},[178,127134,722],{"emptyLinePlaceholder":721},[178,127136,127137,127139,127142],{"class":180,"line":804},[178,127138,835],{"class":699},[178,127140,127141],{"class":184}," on_press",[178,127143,127144],{"class":319},"(key):\n",[178,127146,127147,127150],{"class":180,"line":810},[178,127148,127149],{"class":699},"    try",[178,127151,847],{"class":319},[178,127153,127154,127156,127159,127161,127164],{"class":180,"line":816},[178,127155,4280],{"class":699},[178,127157,127158],{"class":319}," key.char ",[178,127160,4725],{"class":699},[178,127162,127163],{"class":188}," 'q'",[178,127165,847],{"class":319},[178,127167,127168,127170],{"class":180,"line":822},[178,127169,17490],{"class":699},[178,127171,127172],{"class":195}," False\n",[178,127174,127175,127178,127181],{"class":180,"line":827},[178,127176,127177],{"class":699},"    except",[178,127179,127180],{"class":195}," AttributeError",[178,127182,847],{"class":319},[178,127184,127185],{"class":180,"line":832},[178,127186,127187],{"class":699},"        pass\n",[178,127189,127190],{"class":180,"line":850},[178,127191,722],{"emptyLinePlaceholder":721},[178,127193,127194,127197,127199,127202,127205,127207],{"class":180,"line":866},[178,127195,127196],{"class":319},"listener ",[178,127198,330],{"class":699},[178,127200,127201],{"class":319}," keyboard.Listener(",[178,127203,127204],{"class":6985},"on_press",[178,127206,330],{"class":699},[178,127208,127209],{"class":319},"on_press)\n",[178,127211,127212],{"class":180,"line":877},[178,127213,127214],{"class":319},"listener.start()\n",[178,127216,127217],{"class":180,"line":882},[178,127218,722],{"emptyLinePlaceholder":721},[178,127220,127221,127223],{"class":180,"line":898},[178,127222,110028],{"class":699},[178,127224,127225],{"class":319}," listener.running:\n",[178,127227,127228],{"class":180,"line":914},[178,127229,127230],{"class":319},"    scene.step()\n",[19,127232,127233],{},[3269,127234],{"alt":160,"src":127235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[1853,127237,127238],{},"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":160,"searchDepth":263,"depth":263,"links":127240},[],{"category":25137},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":126845,"description":126850},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127247,"title":127248,"body":127249,"description":25135,"extension":1880,"meta":127264,"navigation":721,"path":127265,"seo":127266,"stem":127267,"__hash__":127268},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127250,"toc":127261},[127251,127254,127258],[10,127252,127248],{"id":127253},"_1-基础知识",[14,127255,127257],{"id":127256},"_11-js的组成","1.1 js的组成",[19,127259,127260],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":160,"searchDepth":263,"depth":263,"links":127262},[127263],{"id":127256,"depth":263,"text":127257},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127248,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127270,"title":127271,"body":127272,"description":25135,"extension":1880,"meta":127411,"navigation":721,"path":127412,"seo":127413,"stem":127414,"__hash__":127415},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127273,"toc":127399},[127274,127277,127281,127284,127288,127298,127302,127305,127308,127311,127315,127322,127328,127332,127338,127349,127353,127356,127360,127363,127367,127370,127374,127377,127381,127384,127387,127390,127393,127396],[10,127275,127271],{"id":127276},"_2-vscode必备内容",[14,127278,127280],{"id":127279},"_21-标签分类","2.1 标签分类",[19,127282,127283],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127285,127287],{"id":127286},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,127289,127290,127291,127293,127294,127297],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[70,127292,2166],{}," 然后按 ",[70,127295,127296],{},"Tab","，快速自动生成基本结构。",[14,127299,127301],{"id":127300},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,127303,127304],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,127306,127307],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,127309,127310],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127312,127314],{"id":127313},"_24-视图缩放","2.4 视图缩放",[19,127316,127317,127318,127321],{},"缩放视图 ",[70,127319,127320],{},"ctrl+"," 可实现代码增大。",[19,127323,127324,127327],{},[70,127325,127326],{},"ctrl-"," 可实现代码减小。",[14,127329,127331],{"id":127330},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,127333,127334,127335,297],{},"VSCode 新建文件快捷键为 ",[70,127336,127337],{},"ctrl+N",[19,127339,127340,127341,127344,127345,127348],{},"保存快捷键为 ",[70,127342,127343],{},"ctrl+S","，将文本保存为 ",[70,127346,127347],{},".html"," 文件。",[14,127350,127352],{"id":127351},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,127354,127355],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127357,127359],{"id":127358},"_27-vscode-icons","2.7 vscode-icons",[19,127361,127362],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127364,127366],{"id":127365},"_28-easy-less","2.8 Easy LESS",[19,127368,127369],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127371,127373],{"id":127372},"_29-会了吧插件","2.9 会了吧插件",[19,127375,127376],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127378,127380],{"id":127379},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,127382,127383],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,127385,127386],{},"②选定多个相同的单词:ctrl+D",[19,127388,127389],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,127391,127392],{},"④全局替换某些单词:ctrl+h",[19,127394,127395],{},"⑤快速定位到某一行:ctrl+g",[19,127397,127398],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":160,"searchDepth":263,"depth":263,"links":127400},[127401,127402,127403,127404,127405,127406,127407,127408,127409,127410],{"id":127279,"depth":263,"text":127280},{"id":127286,"depth":263,"text":127287},{"id":127300,"depth":263,"text":127301},{"id":127313,"depth":263,"text":127314},{"id":127330,"depth":263,"text":127331},{"id":127351,"depth":263,"text":127352},{"id":127358,"depth":263,"text":127359},{"id":127365,"depth":263,"text":127366},{"id":127372,"depth":263,"text":127373},{"id":127379,"depth":263,"text":127380},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127271,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127417,"title":127418,"body":127419,"description":25135,"extension":1880,"meta":127578,"navigation":721,"path":127579,"seo":127580,"stem":127581,"__hash__":127582},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127420,"toc":127570},[127421,127424,127428,127438,127444,127450,127454,127463,127467,127472,127475,127478,127482,127485,127495,127504,127513,127522,127532,127539,127544,127549,127562],[10,127422,127418],{"id":127423},"_3-html文本与容器标签",[14,127425,127427],{"id":127426},"_31-标题标签","3.1 标题标签",[19,127429,127430,127433,127434,127437],{},[70,127431,127432],{},"\u003Ch1>","我是一级标签",[70,127435,127436],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,127439,127440,127433,127442],{},[70,127441,127432],{},[70,127443,127436],{},[19,127445,124700,127446,127449],{},[70,127447,127448],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127451,127453],{"id":127452},"_32-段落标签","3.2 段落标签",[19,127455,127456,127459,127460],{},[70,127457,127458],{},"\u003Cp>","....",[70,127461,127462],{},"\u003C\u002Fp>",[14,127464,127466],{"id":127465},"_33-换行标签","3.3 换行标签",[19,127468,127469],{},[70,127470,127471],{},"\u003Cbr \u002F>",[19,127473,127474],{},"具有强制换行的作用",[19,127476,127477],{},"单标签",[14,127479,127481],{"id":127480},"_34-文本格式化标签","3.4 文本格式化标签",[19,127483,127484],{},"提供粗体、斜体和下划线等效果",[19,127486,127487,127488,1815,127491,127494],{},"加粗：",[70,127489,127490],{},"\u003Cstrong>...\u003C\u002Fstrong>",[70,127492,127493],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,127496,127497,127498,1815,127501,127494],{},"斜体：",[70,127499,127500],{},"\u003Cem>...\u003C\u002Fem>",[70,127502,127503],{},"\u003Ci>...\u003C\u002Fi>",[19,127505,127506,127507,1815,127510,127494],{},"删除线：",[70,127508,127509],{},"\u003Cdel>...\u003C\u002Fdel>",[70,127511,127512],{},"\u003Cs>...\u003C\u002Fs>",[19,127514,127515,127516,1815,127519,127494],{},"下划线：",[70,127517,127518],{},"\u003Cins>...\u003C\u002Fins>",[70,127520,127521],{},"\u003Cu>...\u003C\u002Fu>",[14,127523,127525,127526,20168,127529,57],{"id":127524},"_35-div和span标签","3.5 ",[70,127527,127528],{},"\u003Cdiv>",[70,127530,127531],{},"\u003Cspan>",[19,127533,127534,404,127536,127538],{},[70,127535,127528],{},[70,127537,127531],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,127540,127541],{},[70,127542,127543],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,127545,127546],{},[70,127547,127548],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,127550,127551,127552,127554,127555,127557,127558,127561],{},"两者特点：①",[70,127553,127528],{}," 标签用来布局，但一行通常只放一个 ",[70,127556,127528],{},"。可以理解为一个大盒子，独占一行，在 ",[70,127559,127560],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,127563,78969,127564,127566,127567,127569],{},[70,127565,127531],{}," 标签也可用于布局，一行可以放多个 ",[70,127568,127531],{},"，可理解为小盒子。",{"title":160,"searchDepth":263,"depth":263,"links":127571},[127572,127573,127574,127575,127576],{"id":127426,"depth":263,"text":127427},{"id":127452,"depth":263,"text":127453},{"id":127465,"depth":263,"text":127466},{"id":127480,"depth":263,"text":127481},{"id":127524,"depth":263,"text":127577},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127418,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":127584,"title":127585,"body":127586,"description":25135,"extension":1880,"meta":127783,"navigation":721,"path":127784,"seo":127785,"stem":127786,"__hash__":127787},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":127587,"toc":127775},[127588,127591,127595,127598,127604,127611,127617,127623,127626,127629,127632,127635,127638,127641,127644,127648,127651,127654,127657,127663,127669,127675,127682,127686,127692,127698,127701,127704,127710,127716,127722,127725,127728,127732,127735,127745,127751,127755,127764,127768,127771],[10,127589,127585],{"id":127590},"_4-html图像与链接",[14,127592,127594],{"id":127593},"_41-图像标签","4.1 图像标签",[19,127596,127597],{},"（1）标签",[19,127599,127600,127603],{},[70,127601,127602],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,127605,127606,127607,127610],{},"src是",[70,127608,127609],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,127612,127613,127614],{},"alt:文本，替换文本。图像不能显示的文字 ",[70,127615,127616],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,127618,127619,127620],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[70,127621,127622],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,127624,127625],{},"width:像素，设置图像的宽度",[19,127627,127628],{},"height:像素，设置图像的高度",[19,127630,127631],{},"border：像素，设置图像的边框粗细",[19,127633,127634],{},"（2）图像标签属性的注意点：",[19,127636,127637],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,127639,127640],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,127642,127643],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,127645,127647],{"id":127646},"_42-路径注意要点","4.2 路径注意要点：",[19,127649,127650],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,127652,127653],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,127655,127656],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,127658,127659,127660],{},"①同一级路径：图像文件位于HTML文件同一级，如",[70,127661,127662],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,127664,127665,127666],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[70,127667,127668],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,127670,127671,127672],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[70,127673,127674],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,127676,127677,127678,2191],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[2178,127679,127680],{"href":127680,"rel":127681},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[25619],[14,127683,127685],{"id":127684},"_43-超链接标签","4.3 超链接标签",[19,127687,127688,127691],{},[70,127689,127690],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,127693,127694,127695],{},"①语法格式：",[70,127696,127697],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,127699,127700],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,127702,127703],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,127705,127706,127707],{},"③链接分类：外部链接：",[70,127708,127709],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,127711,127712,127713],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[70,127714,127715],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,127717,127718,127719],{},"空链接：如果当时没有确定链接目标时，",[70,127720,127721],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,127723,127724],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,127726,127727],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,127729,127731],{"id":127730},"_44-锚点链接","4.4 锚点链接",[19,127733,127734],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,127736,127737,127738,127741,127742],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[70,127739,127740],{},"\u003Ca href=\"#two\">","第二级",[70,127743,127744],{},"\u003C\u002Fa>",[19,127746,127747,127748],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[70,127749,127750],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,127752,127754],{"id":127753},"_45-注释标签","4.5 注释标签",[19,127756,127757,127760,127761],{},[70,127758,127759],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[70,127762,127763],{},"ctrl+\u002F",[14,127765,127767],{"id":127766},"_46-特殊字符","4.6 特殊字符",[19,127769,127770],{},"可以实现添加多个空格",[3269,127772],{"style":127773,"src":127774},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":160,"searchDepth":263,"depth":263,"links":127776},[127777,127778,127779,127780,127781,127782],{"id":127593,"depth":263,"text":127594},{"id":127646,"depth":263,"text":127647},{"id":127684,"depth":263,"text":127685},{"id":127730,"depth":263,"text":127731},{"id":127753,"depth":263,"text":127754},{"id":127766,"depth":263,"text":127767},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":127585,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":127789,"title":127790,"body":127791,"description":25135,"extension":1880,"meta":128084,"navigation":721,"path":128085,"seo":128086,"stem":128087,"__hash__":128088},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":127792,"toc":128075},[127793,127796,127800,127803,127806,127809,127812,127815,127818,127821,127824,127827,127847,127853,127857,127860,127863,127866,127869,127872,127875,127879,127882,127885,127888,127891,127904,127909,127912,127915,127930,127933,127936,127939,127942,127945,127949,127952,127959,127962,127965,127968,127971,127974,127980,127983,127986,127992,127995,127998,128001,128007,128010,128013,128027,128034,128037,128040,128047,128056,128059,128062,128065,128069,128072],[10,127794,127790],{"id":127795},"_5-html表格列表与表单",[14,127797,127799],{"id":127798},"_51-表格标签","5.1 表格标签",[19,127801,127802],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,127804,127805],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,127807,127808],{},"②表格基本语法：",[3269,127810],{"style":127773,"src":127811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,127813,127814],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[3269,127816],{"style":127773,"src":127817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,127819,127820],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[3269,127822],{"style":127773,"src":127823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,127825,127826],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,127828,127829,127832,127833,127835,127836,127839,127840,127842,127843,127846],{},[70,127830,127831],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[70,127834,127831],{},"内部必须拥有",[70,127837,127838],{},"\u003Ctr>","标签，一般位于第一行，",[70,127841,127831],{},"比",[70,127844,127845],{},"\u003Cth>","范围广",[19,127848,127849,127852],{},[70,127850,127851],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,127854,127856],{"id":127855},"_52-合并单元格","5.2 合并单元格",[19,127858,127859],{},"（1）合并单元格方式：",[19,127861,127862],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,127864,127865],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,127867,127868],{},"（2）目标单元格：",[19,127870,127871],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,127873,127874],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,127876,127878],{"id":127877},"_53-列表标签","5.3 列表标签",[19,127880,127881],{},"（1）分类：无序列表、有序列表、自定义列表",[19,127883,127884],{},"①无序列表：",[3269,127886],{"style":127773,"src":127887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,127889,127890],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,127892,127893,127896,127897,127900,127901,127903],{},[70,127894,127895],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[70,127898,127899],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[70,127902,127895],{},"中输入其他标签或文字是不对的",[19,127905,127906,127908],{},[70,127907,127899],{},"之间相当于一个容器，可以容纳所有元素",[19,127910,127911],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,127913,127914],{},"在css中去除前边的小圆点采用如下代码:",[154,127916,127920],{"className":127917,"code":127918,"language":127919,"meta":160,"style":160},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[70,127921,127922],{"__ignoreMap":160},[178,127923,127924,127927],{"class":180,"line":181},[178,127925,127926],{"class":323},"list-style",[178,127928,127929],{"class":319},": none;\n",[19,127931,127932],{},"②有序列表：",[3269,127934],{"style":127773,"src":127935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,127937,127938],{},"③自定义列表：",[3269,127940],{"style":127773,"src":127941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[3269,127943],{"style":127773,"src":127944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,127946,127948],{"id":127947},"_54-表单标签","5.4 表单标签",[19,127950,127951],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,127953,127954,127955,127958],{},"（1）表单域：包含单元素的区域，",[70,127956,127957],{},"\u003Cform>","标签可以实现信息的收集和传递。",[3269,127960],{"style":127773,"src":127961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,127963,127964],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,127966,127967],{},"表单元素提交必须有name属性",[19,127969,127970],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,127972,127973],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,127975,78946,127976,127979],{},[70,127977,127978],{},"\u003Cinput>","输入表单元素",[3269,127981],{"style":127773,"src":127982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[3269,127984],{"style":127773,"src":127985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,127987,127988,127989],{},"单选按钮：",[70,127990,127991],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[3269,127993],{"style":127773,"src":127994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,127996,127997],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[3269,127999],{"style":127773,"src":128000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,128002,128003,128006],{},[2093,128004,128005],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,128008,128009],{},"②select下拉表单元素：可以节约页面控件",[3269,128011],{"style":127773,"src":128012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,128014,128015,15555,128017,128020,128021,128023,128024,128026],{},[2093,128016,1981],{},[70,128018,128019],{},"\u003Cselect>","中至少包含一对",[70,128022,82],{},"；在",[70,128025,82],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,128028,128029,128030,128033],{},"③",[70,128031,128032],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[3269,128035],{"style":127773,"src":128036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,128038,128039],{},"3行20列",[14,128041,128043,128044,57],{"id":128042},"_55-lable标签","5.5 ",[70,128045,128046],{},"\u003Clable>",[19,128048,128049,128050,128052,128053,128055],{},"它不是表单标签，但常常与表单标签搭配使用，",[70,128051,128046],{},"标签用于绑定一个表单标签，当点击",[70,128054,128046],{},"标签内的文本",[19,128057,128058],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[3269,128060],{"style":127773,"src":128061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[3269,128063],{"style":127773,"src":128064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128066,128068],{"id":128067},"_56-实例","5.6 实例",[3269,128070],{"style":127773,"src":128071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[1853,128073,128074],{},"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":160,"searchDepth":263,"depth":263,"links":128076},[128077,128078,128079,128080,128081,128083],{"id":127798,"depth":263,"text":127799},{"id":127855,"depth":263,"text":127856},{"id":127877,"depth":263,"text":127878},{"id":127947,"depth":263,"text":127948},{"id":128042,"depth":263,"text":128082},"5.5 \u003Clable>标签",{"id":128067,"depth":263,"text":128068},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":127790,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128090,"title":128091,"body":128092,"description":25135,"extension":1880,"meta":128641,"navigation":721,"path":128642,"seo":128643,"stem":128644,"__hash__":128645},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128093,"toc":128616},[128094,128097,128101,128104,128107,128111,128114,128117,128120,128123,128126,128129,128132,128136,128139,128143,128146,128149,128152,128156,128159,128162,128165,128171,128174,128177,128180,128183,128186,128189,128192,128225,128229,128232,128235,128238,128242,128245,128248,128251,128254,128257,128261,128264,128267,128270,128274,128277,128281,128284,128288,128291,128296,128300,128303,128307,128310,128313,128316,128319,128346,128349,128353,128356,128359,128364,128367,128370,128374,128377,128382,128385,128388,128391,128395,128398,128401,128404,128408,128411,128414,128417,128421,128425,128428,128468,128471,128475,128482,128485,128489,128492,128538,128542,128545,128548,128551,128579,128583,128586,128613],[10,128095,128091],{"id":128096},"_6-css语法与文本样式",[14,128098,128100],{"id":128099},"_61-css语法规范","6.1 css语法规范",[19,128102,128103],{},"由两部分组成，选择器及一条或多条声明",[3269,128105],{"style":127773,"src":128106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,128108,128109],{},[2093,128110,1981],{},[19,128112,128113],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,128115,128116],{},"②属性与属性值以“键值对”的形式出现",[19,128118,128119],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,128121,128122],{},"④属性和属性值之间用英文“;”分开",[3269,128124],{"style":127773,"src":128125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[3269,128127],{"style":127773,"src":128128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[3269,128130],{"style":127773,"src":128131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128133,128135],{"id":128134},"_62-css选择器","6.2 css选择器",[19,128137,128138],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[387,128140,128142],{"id":128141},"_621-标签选择器","6.2.1 标签选择器",[19,128144,128145],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,128147,128148],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[3269,128150],{"style":127773,"src":128151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[387,128153,128155],{"id":128154},"_622-类选择器","6.2.2 类选择器",[19,128157,128158],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,128160,128161],{},"②样例",[3269,128163],{"style":127773,"src":128164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,128166,128167,128168,128170],{},"③ ",[2093,128169,128005],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,128172,128173],{},"可以理解为给这个标签起了个名字，来表示；",[19,128175,128176],{},"长名称或词组可以使用横线来为选择器命名；",[19,128178,128179],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,128181,128182],{},"命名要有意义；",[3269,128184],{"style":127773,"src":128185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,128187,128188],{},"类选择器也可以指定特殊的元素p.center{}",[19,128190,128191],{},"p.center和.center都对",[154,128193,128195],{"className":127917,"code":128194,"language":127919,"meta":160,"style":160},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[70,128196,128197,128202,128211,128221],{"__ignoreMap":160},[178,128198,128199],{"class":180,"line":181},[178,128200,128201],{"class":2008},"\u002F* 类选择器指定特殊元素 *\u002F\n",[178,128203,128204,128206,128209],{"class":180,"line":263},[178,128205,19],{"class":323},[178,128207,128208],{"class":184},".center",[178,128210,17330],{"class":319},[178,128212,128213,128215,128217,128219],{"class":180,"line":274},[178,128214,72246],{"class":195},[178,128216,53167],{"class":319},[178,128218,53322],{"class":195},[178,128220,3100],{"class":319},[178,128222,128223],{"class":180,"line":354},[178,128224,3371],{"class":319},[387,128226,128228],{"id":128227},"_623-多类名使用","6.2.3 多类名使用",[19,128230,128231],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[3269,128233],{"style":127773,"src":128234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,128236,128237],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[387,128239,128241],{"id":128240},"_624-id选择器","6.2.4 id选择器",[19,128243,128244],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,128246,128247],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[3269,128249],{"style":127773,"src":128250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,128252,128253],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,128255,128256],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[387,128258,128260],{"id":128259},"_625-通配符选择器","6.2.5 通配符选择器",[19,128262,128263],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,128265,128266],{},"* {",[19,128268,128269],{},"color=\"red\"}",[387,128271,128273],{"id":128272},"_626-总结","6.2.6 总结",[3269,128275],{"style":127773,"src":128276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128278,128280],{"id":128279},"_63-css字体属性","6.3 css字体属性",[19,128282,128283],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[387,128285,128287],{"id":128286},"_631-字体系列","6.3.1 字体系列",[19,128289,128290],{},"font-family: '宋体';",[19,128292,128293,128295],{},[2093,128294,1981],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[387,128297,128299],{"id":128298},"_632-字体大小","6.3.2 字体大小",[19,128301,128302],{},"font-size: 20px",[19,128304,128305,28222],{},[2093,128306,128005],{},[19,128308,128309],{},"①px（像素）大小是网页的最常用单位",[19,128311,128312],{},"②谷歌浏览器默认为16px",[19,128314,128315],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,128317,128318],{},"④可以给body指定整个页面的大小：会自动引用",[154,128320,128322],{"className":127917,"code":128321,"language":127919,"meta":160,"style":160},"body {\n  font-size: 16px;\n}\n",[70,128323,128324,128330,128342],{"__ignoreMap":160},[178,128325,128326,128328],{"class":180,"line":181},[178,128327,376],{"class":323},[178,128329,17330],{"class":319},[178,128331,128332,128334,128336,128338,128340],{"class":180,"line":263},[178,128333,72346],{"class":195},[178,128335,53167],{"class":319},[178,128337,2541],{"class":195},[178,128339,53222],{"class":699},[178,128341,3100],{"class":319},[178,128343,128344],{"class":180,"line":274},[178,128345,3371],{"class":319},[19,128347,128348],{},"⑤标题标签比较特殊，需要单独指定大小",[387,128350,128352],{"id":128351},"_633-字体粗细","6.3.3 字体粗细",[19,128354,128355],{},"font-weight: bold;",[19,128357,128358],{},"font-weight: 100；",[19,128360,128361,128363],{},[2093,128362,1981],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,128365,128366],{},"font-weight= 400;",[19,128368,128369],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[387,128371,128373],{"id":128372},"_634-文字样式","6.3.4 文字样式",[19,128375,128376],{},"font-style: normal；",[19,128378,128379,28222],{},[2093,128380,128381],{},"属性值",[19,128383,128384],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,128386,128387],{},"②italic：浏览器会显示斜体的字体样式",[3269,128389],{"style":127773,"src":128390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[387,128392,128394],{"id":128393},"_635-字体符合属性","6.3.5 字体符合属性",[3269,128396],{"style":127773,"src":128397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[3269,128399],{"style":127773,"src":128400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,128402,128403],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,128405,128406,28222],{},[2093,128407,128005],{},[19,128409,128410],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,128412,128413],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,128415,128416],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128418,128420],{"id":128419},"_64-css-test文本属性","6.4 css test文本属性",[387,128422,128424],{"id":128423},"_641-文本颜色","6.4.1 文本颜色",[19,128426,128427],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[154,128429,128431],{"className":127917,"code":128430,"language":127919,"meta":160,"style":160},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[70,128432,128433,128438,128444,128454,128459,128464],{"__ignoreMap":160},[178,128434,128435],{"class":180,"line":181},[178,128436,128437],{"class":2008},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[178,128439,128440,128442],{"class":180,"line":263},[178,128441,19],{"class":323},[178,128443,17330],{"class":319},[178,128445,128446,128448,128450,128452],{"class":180,"line":274},[178,128447,72625],{"class":195},[178,128449,53167],{"class":319},[178,128451,59142],{"class":195},[178,128453,3100],{"class":319},[178,128455,128456],{"class":180,"line":354},[178,128457,128458],{"class":2008},"  \u002F* color: #ff0000; *\u002F\n",[178,128460,128461],{"class":180,"line":364},[178,128462,128463],{"class":2008},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[178,128465,128466],{"class":180,"line":740},[178,128467,3371],{"class":319},[3269,128469],{"style":127773,"src":128470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[387,128472,128474],{"id":128473},"_642-对齐文本","6.4.2 对齐文本",[19,128476,128477,128478,128481],{},"text-align属于用于设置元素内文本内容的 ",[2093,128479,128480],{},"水平对齐"," 方式",[19,128483,128484],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[387,128486,128488],{"id":128487},"_643-装饰文本","6.4.3 装饰文本",[19,128490,128491],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[154,128493,128495],{"className":127917,"code":128494,"language":127919,"meta":160,"style":160},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[70,128496,128497,128503,128513,128517,128523,128534],{"__ignoreMap":160},[178,128498,128499,128501],{"class":180,"line":181},[178,128500,2178],{"class":323},[178,128502,17330],{"class":319},[178,128504,128505,128507,128509,128511],{"class":180,"line":263},[178,128506,72222],{"class":195},[178,128508,53167],{"class":319},[178,128510,56458],{"class":195},[178,128512,3100],{"class":319},[178,128514,128515],{"class":180,"line":274},[178,128516,3371],{"class":319},[178,128518,128519,128521],{"class":180,"line":354},[178,128520,19],{"class":323},[178,128522,17330],{"class":319},[178,128524,128525,128527,128529,128532],{"class":180,"line":364},[178,128526,72222],{"class":195},[178,128528,53167],{"class":319},[178,128530,128531],{"class":195},"underline",[178,128533,3100],{"class":319},[178,128535,128536],{"class":180,"line":740},[178,128537,3371],{"class":319},[387,128539,128541],{"id":128540},"_644-文本缩进","6.4.4 文本缩进",[19,128543,128544],{},"实现文本的第一行首行缩进自己指定的距离",[19,128546,128547],{},"20px往右边走；-20px往左边走",[19,128549,128550],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[154,128552,128554],{"className":127917,"code":128553,"language":127919,"meta":160,"style":160},"p {\n  text-indent: 2em;\n}\n",[70,128555,128556,128562,128575],{"__ignoreMap":160},[178,128557,128558,128560],{"class":180,"line":181},[178,128559,19],{"class":323},[178,128561,17330],{"class":319},[178,128563,128564,128567,128569,128571,128573],{"class":180,"line":263},[178,128565,128566],{"class":195},"  text-indent",[178,128568,53167],{"class":319},[178,128570,1669],{"class":195},[178,128572,25312],{"class":699},[178,128574,3100],{"class":319},[178,128576,128577],{"class":180,"line":274},[178,128578,3371],{"class":319},[387,128580,128582],{"id":128581},"_645-行间距","6.4.5 行间距",[19,128584,128585],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[154,128587,128589],{"className":127917,"code":128588,"language":127919,"meta":160,"style":160},"p {\n  line-height: 1.6;\n}\n",[70,128590,128591,128597,128609],{"__ignoreMap":160},[178,128592,128593,128595],{"class":180,"line":181},[178,128594,19],{"class":323},[178,128596,17330],{"class":319},[178,128598,128599,128602,128604,128607],{"class":180,"line":263},[178,128600,128601],{"class":195},"  line-height",[178,128603,53167],{"class":319},[178,128605,128606],{"class":195},"1.6",[178,128608,3100],{"class":319},[178,128610,128611],{"class":180,"line":274},[178,128612,3371],{"class":319},[1853,128614,128615],{},"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":160,"searchDepth":263,"depth":263,"links":128617},[128618,128619,128627,128634],{"id":128099,"depth":263,"text":128100},{"id":128134,"depth":263,"text":128135,"children":128620},[128621,128622,128623,128624,128625,128626],{"id":128141,"depth":274,"text":128142},{"id":128154,"depth":274,"text":128155},{"id":128227,"depth":274,"text":128228},{"id":128240,"depth":274,"text":128241},{"id":128259,"depth":274,"text":128260},{"id":128272,"depth":274,"text":128273},{"id":128279,"depth":263,"text":128280,"children":128628},[128629,128630,128631,128632,128633],{"id":128286,"depth":274,"text":128287},{"id":128298,"depth":274,"text":128299},{"id":128351,"depth":274,"text":128352},{"id":128372,"depth":274,"text":128373},{"id":128393,"depth":274,"text":128394},{"id":128419,"depth":263,"text":128420,"children":128635},[128636,128637,128638,128639,128640],{"id":128423,"depth":274,"text":128424},{"id":128473,"depth":274,"text":128474},{"id":128487,"depth":274,"text":128488},{"id":128540,"depth":274,"text":128541},{"id":128581,"depth":274,"text":128582},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128091,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":128647,"title":128648,"body":128649,"description":25135,"extension":1880,"meta":129298,"navigation":721,"path":129299,"seo":129300,"stem":129301,"__hash__":129302},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":128650,"toc":129279},[128651,128654,128658,128662,128722,128726,128736,128739,128742,128746,128771,128775,128778,128781,128784,128787,128790,128794,128797,128800,128842,128845,128871,128877,128880,128884,128888,128894,128897,128900,128903,128906,128909,128912,128957,128961,128964,128967,128971,128975,129004,129007,129012,129015,129018,129021,129024,129028,129032,129035,129037,129040,129044,129047,129051,129054,129057,129060,129064,129068,129074,129084,129087,129090,129093,129096,129099,129222,129230,129238,129276],[10,128652,128648],{"id":128653},"_7-css引入方式与选择器进阶",[14,128655,128657],{"id":128656},"_71-css引入方式","7.1 css引入方式",[387,128659,128661],{"id":128660},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[154,128663,128667],{"className":128664,"code":128665,"language":128666,"meta":160,"style":160},"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",[70,128668,128669,128677,128684,128696,128709,128714],{"__ignoreMap":160},[178,128670,128671,128673,128675],{"class":180,"line":181},[178,128672,320],{"class":319},[178,128674,1853],{"class":323},[178,128676,336],{"class":319},[178,128678,128679,128682],{"class":180,"line":263},[178,128680,128681],{"class":323},"  h1",[178,128683,17330],{"class":319},[178,128685,128686,128689,128691,128694],{"class":180,"line":274},[178,128687,128688],{"class":195},"    color",[178,128690,53167],{"class":319},[178,128692,128693],{"class":195},"blue",[178,128695,3100],{"class":319},[178,128697,128698,128701,128703,128705,128707],{"class":180,"line":354},[178,128699,128700],{"class":195},"    font-size",[178,128702,53167],{"class":319},[178,128704,2740],{"class":195},[178,128706,53222],{"class":699},[178,128708,3100],{"class":319},[178,128710,128711],{"class":180,"line":364},[178,128712,128713],{"class":319},"  }\n",[178,128715,128716,128718,128720],{"class":180,"line":740},[178,128717,367],{"class":319},[178,128719,1853],{"class":323},[178,128721,336],{"class":319},[19,128723,128724,28222],{},[2093,128725,128005],{},[19,128727,78946,128728,128731,128732,128735],{},[70,128729,128730],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[70,128733,128734],{},"\u003Chead>","标签中",[19,128737,128738],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,128740,128741],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[387,128743,128745],{"id":128744},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[154,128747,128749],{"className":128664,"code":128748,"language":128666,"meta":160,"style":160},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[70,128750,128751],{"__ignoreMap":160},[178,128752,128753,128755,128757,128759,128761,128764,128767,128769],{"class":180,"line":181},[178,128754,320],{"class":319},[178,128756,19],{"class":323},[178,128758,64347],{"class":184},[178,128760,330],{"class":319},[178,128762,128763],{"class":188},"\"color: red; font-size: 16px;\"",[178,128765,128766],{"class":319},">这是一个段落\u003C\u002F",[178,128768,19],{"class":323},[178,128770,336],{"class":319},[19,128772,128773,28222],{},[2093,128774,128005],{},[19,128776,128777],{},"①style其实就是标签的属性",[19,128779,128780],{},"②在双引号中间，写法要符合css规范",[19,128782,128783],{},"③可以控制当前的标签设置样式",[19,128785,128786],{},"④书写繁琐，简单时才用",[19,128788,128789],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[387,128791,128793],{"id":128792},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,128795,128796],{},"使用最多，单独建一个css文件，然后html引用",[19,128798,128799],{},"①css文件部分： style.css",[154,128801,128803],{"className":127917,"code":128802,"language":127919,"meta":160,"style":160},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[70,128804,128805,128810,128816,128826,128838],{"__ignoreMap":160},[178,128806,128807],{"class":180,"line":181},[178,128808,128809],{"class":2008},"\u002F* style.css *\u002F\n",[178,128811,128812,128814],{"class":180,"line":263},[178,128813,10],{"class":323},[178,128815,17330],{"class":319},[178,128817,128818,128820,128822,128824],{"class":180,"line":274},[178,128819,72625],{"class":195},[178,128821,53167],{"class":319},[178,128823,128693],{"class":195},[178,128825,3100],{"class":319},[178,128827,128828,128830,128832,128834,128836],{"class":180,"line":354},[178,128829,72346],{"class":195},[178,128831,53167],{"class":319},[178,128833,2740],{"class":195},[178,128835,53222],{"class":699},[178,128837,3100],{"class":319},[178,128839,128840],{"class":180,"line":364},[178,128841,3371],{"class":319},[19,128843,128844],{},"②html部分",[154,128846,128848],{"className":128664,"code":128847,"language":128666,"meta":160,"style":160},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[70,128849,128850],{"__ignoreMap":160},[178,128851,128852,128854,128856,128858,128860,128862,128864,128866,128869],{"class":180,"line":181},[178,128853,320],{"class":319},[178,128855,70725],{"class":323},[178,128857,70728],{"class":184},[178,128859,330],{"class":319},[178,128861,70733],{"class":188},[178,128863,62778],{"class":184},[178,128865,330],{"class":319},[178,128867,128868],{"class":188},"\"style.css\"",[178,128870,336],{"class":319},[19,128872,128873,128876],{},[70,128874,128875],{},"\u003Chr>","水平线标签（但是不常用！）",[19,128878,128879],{},"ctrl+0回到页面原来大小",[14,128881,128883],{"id":128882},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[387,128885,128887],{"id":128886},"_721-快速生成html","7.2.1 快速生成html",[19,128889,128890,128891],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[70,128892,128893],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,128895,128896],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,128898,128899],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,128901,128902],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,128904,128905],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,128907,128908],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,128910,128911],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[154,128913,128915],{"className":128664,"code":128914,"language":128666,"meta":160,"style":160},"\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",[70,128916,128917,128922,128927,128932,128937,128942,128947,128952],{"__ignoreMap":160},[178,128918,128919],{"class":180,"line":181},[178,128920,128921],{"class":2008},"\u003C!-- Emmet 语法示例 -->\n",[178,128923,128924],{"class":180,"line":263},[178,128925,128926],{"class":2008},"\u003C!-- div*3        → 生成3个div -->\n",[178,128928,128929],{"class":180,"line":274},[178,128930,128931],{"class":2008},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[178,128933,128934],{"class":180,"line":354},[178,128935,128936],{"class":2008},"\u003C!-- div+p        → 兄弟div和p -->\n",[178,128938,128939],{"class":180,"line":364},[178,128940,128941],{"class":2008},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[178,128943,128944],{"class":180,"line":740},[178,128945,128946],{"class":2008},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[178,128948,128949],{"class":180,"line":746},[178,128950,128951],{"class":2008},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[178,128953,128954],{"class":180,"line":752},[178,128955,128956],{"class":2008},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[387,128958,128960],{"id":128959},"_722-快速生成css","7.2.2 快速生成css",[19,128962,128963],{},"简写开头",[19,128965,128966],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,128968,128970],{"id":128969},"_73-css复合选择器","7.3 css复合选择器",[387,128972,128974],{"id":128973},"_731-后代选择器","7.3.1 后代选择器",[154,128976,128978],{"className":127917,"code":128977,"language":127919,"meta":160,"style":160},".parent .child {\n  color: blue;\n}\n",[70,128979,128980,128990,129000],{"__ignoreMap":160},[178,128981,128982,128985,128988],{"class":180,"line":181},[178,128983,128984],{"class":184},".parent",[178,128986,128987],{"class":184}," .child",[178,128989,17330],{"class":319},[178,128991,128992,128994,128996,128998],{"class":180,"line":263},[178,128993,72625],{"class":195},[178,128995,53167],{"class":319},[178,128997,128693],{"class":195},[178,128999,3100],{"class":319},[178,129001,129002],{"class":180,"line":274},[178,129003,3371],{"class":319},[19,129005,129006],{},"元素1 元素2 {样式声明}",[19,129008,129009],{},[2093,129010,129011],{},"注意点:",[19,129013,129014],{},"①元素1和元素2中间用空格隔开",[19,129016,129017],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,129019,129020],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,129022,129023],{},"④元素1和元素2可以是任意基础选择器",[387,129025,129027],{"id":129026},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,129029,129030],{},[2093,129031,129011],{},[19,129033,129034],{},"①元素1和元素2中间用大于号隔开",[19,129036,129017],{},[19,129038,129039],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[387,129041,129043],{"id":129042},"_733-并集选择器","7.3.3 并集选择器",[19,129045,129046],{},"元素1，元素2 {样式声明}",[19,129048,129049],{},[2093,129050,129011],{},[19,129052,129053],{},"①元素1和元素2中间用逗号隔开",[19,129055,129056],{},"②逗号可以理解为和的意思",[19,129058,129059],{},"③并集选择器通常用于集体声明",[387,129061,129063],{"id":129062},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,129065,129066],{},[2093,129067,129011],{},[19,129069,129070,129071,129073],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70725,129072],{},"－:visited－:hover－:active。",[19,129075,129076,129077,129080,129081,27492],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129078,129079],"hover",{}," 、 ",[129082,129083],"first-child",{},[19,129085,129086],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,129088,129089],{},"link对没访问的进行设置",[19,129091,129092],{},"vistied对已访问的进行改变",[19,129094,129095],{},"hover鼠标经过就会变",[19,129097,129098],{},"active常按(点)就会变",[154,129100,129102],{"className":127917,"code":129101,"language":127919,"meta":160,"style":160},"\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",[70,129103,129104,129109,129118,129128,129138,129142,129151,129162,129166,129174,129184,129194,129198,129207,129218],{"__ignoreMap":160},[178,129105,129106],{"class":180,"line":181},[178,129107,129108],{"class":2008},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[178,129110,129111,129113,129116],{"class":180,"line":263},[178,129112,2178],{"class":323},[178,129114,129115],{"class":184},":link",[178,129117,17330],{"class":319},[178,129119,129120,129122,129124,129126],{"class":180,"line":274},[178,129121,72625],{"class":195},[178,129123,53167],{"class":319},[178,129125,64090],{"class":195},[178,129127,3100],{"class":319},[178,129129,129130,129132,129134,129136],{"class":180,"line":354},[178,129131,72222],{"class":195},[178,129133,53167],{"class":319},[178,129135,56458],{"class":195},[178,129137,3100],{"class":319},[178,129139,129140],{"class":180,"line":364},[178,129141,3371],{"class":319},[178,129143,129144,129146,129149],{"class":180,"line":740},[178,129145,2178],{"class":323},[178,129147,129148],{"class":184},":visited",[178,129150,17330],{"class":319},[178,129152,129153,129155,129157,129160],{"class":180,"line":746},[178,129154,72625],{"class":195},[178,129156,53167],{"class":319},[178,129158,129159],{"class":195},"purple",[178,129161,3100],{"class":319},[178,129163,129164],{"class":180,"line":752},[178,129165,3371],{"class":319},[178,129167,129168,129170,129172],{"class":180,"line":757},[178,129169,2178],{"class":323},[178,129171,62661],{"class":184},[178,129173,17330],{"class":319},[178,129175,129176,129178,129180,129182],{"class":180,"line":763},[178,129177,72625],{"class":195},[178,129179,53167],{"class":319},[178,129181,56610],{"class":195},[178,129183,3100],{"class":319},[178,129185,129186,129188,129190,129192],{"class":180,"line":769},[178,129187,72222],{"class":195},[178,129189,53167],{"class":319},[178,129191,128531],{"class":195},[178,129193,3100],{"class":319},[178,129195,129196],{"class":180,"line":774},[178,129197,3371],{"class":319},[178,129199,129200,129202,129205],{"class":180,"line":780},[178,129201,2178],{"class":323},[178,129203,129204],{"class":184},":active",[178,129206,17330],{"class":319},[178,129208,129209,129211,129213,129216],{"class":180,"line":786},[178,129210,72625],{"class":195},[178,129212,53167],{"class":319},[178,129214,129215],{"class":195},"green",[178,129217,3100],{"class":319},[178,129219,129220],{"class":180,"line":792},[178,129221,3371],{"class":319},[387,129223,129225,129226,129229],{"id":129224},"_735-伪类选择器","7.3.5 ",[129227,129228],"focus",{},"伪类选择器",[19,129231,129232,129234,129235,129237],{},[129227,129233],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[70,129236,127978],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[154,129239,129241],{"className":127917,"code":129240,"language":127919,"meta":160,"style":160},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[70,129242,129243,129251,129262,129272],{"__ignoreMap":160},[178,129244,129245,129247,129249],{"class":180,"line":181},[178,129246,55543],{"class":323},[178,129248,63621],{"class":184},[178,129250,17330],{"class":319},[178,129252,129253,129256,129258,129260],{"class":180,"line":263},[178,129254,129255],{"class":195},"  border-color",[178,129257,53167],{"class":319},[178,129259,56610],{"class":195},[178,129261,3100],{"class":319},[178,129263,129264,129266,129268,129270],{"class":180,"line":274},[178,129265,72518],{"class":195},[178,129267,53167],{"class":319},[178,129269,56458],{"class":195},[178,129271,3100],{"class":319},[178,129273,129274],{"class":180,"line":354},[178,129275,3371],{"class":319},[1853,129277,129278],{},"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":160,"searchDepth":263,"depth":263,"links":129280},[129281,129286,129290],{"id":128656,"depth":263,"text":128657,"children":129282},[129283,129284,129285],{"id":128660,"depth":274,"text":128661},{"id":128744,"depth":274,"text":128745},{"id":128792,"depth":274,"text":128793},{"id":128882,"depth":263,"text":128883,"children":129287},[129288,129289],{"id":128886,"depth":274,"text":128887},{"id":128959,"depth":274,"text":128960},{"id":128969,"depth":263,"text":128970,"children":129291},[129292,129293,129294,129295,129296],{"id":128973,"depth":274,"text":128974},{"id":129026,"depth":274,"text":129027},{"id":129042,"depth":274,"text":129043},{"id":129062,"depth":274,"text":129063},{"id":129224,"depth":274,"text":129297},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":128648,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":129304,"title":129305,"body":129306,"description":25135,"extension":1880,"meta":131229,"navigation":721,"path":131230,"seo":131231,"stem":131232,"__hash__":131233},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":129307,"toc":131203},[129308,129311,129315,129324,129328,129354,129359,129362,129365,129368,129371,129375,129378,129388,129396,129400,129435,129440,129443,129446,129449,129452,129456,129459,129468,129472,129485,129490,129493,129496,129499,129503,129506,129510,129513,129568,129571,129602,129605,129659,129663,129666,129832,129955,129958,129961,129964,129967,129971,129974,129978,129981,129984,129988,129991,130022,130049,130077,130080,130084,130110,130153,130157,130251,130254,130281,130284,130287,130290,130293,130296,130299,130302,130305,130308,130312,130369,130396,130400,130448,130452,130493,130495,130498,130501,130504,130507,130511,130603,130606,130609,130612,130616,130739,130940,130944,130948,130951,130954,130957,130961,130964,130967,130992,130995,130998,131001,131004,131007,131011,131019,131081,131084,131142,131145,131148,131151,131154,131157,131160,131163,131200],[10,129309,129305],{"id":129310},"_8-css显示模式与背景特性",[14,129312,129314],{"id":129313},"_81-css元素显示模式","8.1 css元素显示模式",[19,129316,129317,129318,129320,129321,129323],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[70,129319,127528],{},"自己占一行，比如一行可以放多个",[70,129322,127531],{},"，HTML 元素一般分为块元素和行内元素两种类型",[387,129325,129327],{"id":129326},"_811-块元素","8.1.1 块元素",[19,129329,129330,129331,129333,129334,1258,129337,1258,129339,1258,129341,1258,129344,1258,129347,129350,129351,129353],{},"常见的块元素有",[70,129332,127432],{},"~",[70,129335,129336],{},"\u003Ch6>",[70,129338,127458],{},[70,129340,127528],{},[70,129342,129343],{},"\u003Cul>",[70,129345,129346],{},"\u003Col>",[70,129348,129349],{},"\u003Cli>","等，其中 ",[70,129352,127528],{}," 标签是最典型的块元素",[19,129355,129356],{},[2093,129357,129358],{},"块级元素的特点：",[19,129360,129361],{},"① 比较霸道，自己独占一行。",[19,129363,129364],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,129366,129367],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,129369,129370],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,129372,129373],{},[2093,129374,1981],{},[19,129376,129377],{},"①文字类的元素内不能使用块级元素",[19,129379,78969,129380,129382,129383,129385,129386],{},[70,129381,127458],{}," 标签主要用于存放文字，因此 ",[70,129384,127458],{}," 里面不能放块级元素，特别是不能放",[70,129387,127528],{},[19,129389,129390,129391,129333,129393,129395],{},"⑥同理， ",[70,129392,127432],{},[70,129394,129336],{},"等都是文字类块级标签，里面也不能放其他块级元素",[387,129397,129399],{"id":129398},"_812-行内元素","8.1.2 行内元素",[19,129401,129402,129403,1258,129405,1258,129408,1258,129411,1258,129414,1258,129417,1258,129420,1258,129423,1258,129426,1258,129429,129431,129432,129434],{},"常见的行内元素有 ",[70,129404,127690],{},[70,129406,129407],{},"\u003Cstrong>",[70,129409,129410],{},"\u003Cb>",[70,129412,129413],{},"\u003Cem>",[70,129415,129416],{},"\u003Ci>",[70,129418,129419],{},"\u003Cdel>",[70,129421,129422],{},"\u003Cs>",[70,129424,129425],{},"\u003Cins>",[70,129427,129428],{},"\u003Cu>",[70,129430,127531],{}," 等，其中 ",[70,129433,127531],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,129436,129437],{},[2093,129438,129439],{},"特点：",[19,129441,129442],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,129444,129445],{},"② 高、宽直接设置是无效的。",[19,129447,129448],{},"③ 默认宽度就是它本身内容的宽度。",[19,129450,129451],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,129453,129454],{},[2093,129455,1981],{},[19,129457,129458],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,129460,129461,129462,129464,129465,129467],{},"②特殊情况链接 ",[70,129463,127690],{}," 里面可以放块级元素，但是给 ",[70,129466,127690],{}," 转换一下块级模式最安全",[387,129469,129471],{"id":129470},"_813-行内块元素","8.1.3 行内块元素",[19,129473,129474,129475,1258,129478,1258,129481,129484],{},"在行内元素中有几个特殊的标签 —— ",[70,129476,129477],{},"\u003Cimg \u002F>",[70,129479,129480],{},"\u003Cinput \u002F>",[70,129482,129483],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,129486,129487],{},[2093,129488,129489],{},"行内块元素的特点：",[19,129491,129492],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,129494,129495],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,129497,129498],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[387,129500,129502],{"id":129501},"_814-总结","8.1.4 总结",[3269,129504],{"style":127773,"src":129505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[387,129507,129509],{"id":129508},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,129511,129512],{},"①转换为块元素：display:block;",[154,129514,129516],{"className":127917,"code":129515,"language":127919,"meta":160,"style":160},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[70,129517,129518,129523,129529,129540,129552,129564],{"__ignoreMap":160},[178,129519,129520],{"class":180,"line":181},[178,129521,129522],{"class":2008},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[178,129524,129525,129527],{"class":180,"line":263},[178,129526,2178],{"class":323},[178,129528,17330],{"class":319},[178,129530,129531,129534,129536,129538],{"class":180,"line":274},[178,129532,129533],{"class":195},"  display",[178,129535,53167],{"class":319},[178,129537,62590],{"class":195},[178,129539,3100],{"class":319},[178,129541,129542,129544,129546,129548,129550],{"class":180,"line":354},[178,129543,72288],{"class":195},[178,129545,53167],{"class":319},[178,129547,2251],{"class":195},[178,129549,53222],{"class":699},[178,129551,3100],{"class":319},[178,129553,129554,129556,129558,129560,129562],{"class":180,"line":364},[178,129555,72508],{"class":195},[178,129557,53167],{"class":319},[178,129559,2341],{"class":195},[178,129561,53222],{"class":699},[178,129563,3100],{"class":319},[178,129565,129566],{"class":180,"line":740},[178,129567,3371],{"class":319},[19,129569,129570],{},"②转换为行内元素：display:inline;",[154,129572,129574],{"className":127917,"code":129573,"language":127919,"meta":160,"style":160},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[70,129575,129576,129581,129587,129598],{"__ignoreMap":160},[178,129577,129578],{"class":180,"line":181},[178,129579,129580],{"class":2008},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[178,129582,129583,129585],{"class":180,"line":263},[178,129584,53341],{"class":323},[178,129586,17330],{"class":319},[178,129588,129589,129591,129593,129596],{"class":180,"line":274},[178,129590,129533],{"class":195},[178,129592,53167],{"class":319},[178,129594,129595],{"class":195},"inline",[178,129597,3100],{"class":319},[178,129599,129600],{"class":180,"line":354},[178,129601,3371],{"class":319},[19,129603,129604],{},"③转换为行内块：display:inline-block;",[154,129606,129608],{"className":127917,"code":129607,"language":127919,"meta":160,"style":160},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[70,129609,129610,129615,129621,129631,129643,129655],{"__ignoreMap":160},[178,129611,129612],{"class":180,"line":181},[178,129613,129614],{"class":2008},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[178,129616,129617,129619],{"class":180,"line":263},[178,129618,178],{"class":323},[178,129620,17330],{"class":319},[178,129622,129623,129625,129627,129629],{"class":180,"line":274},[178,129624,129533],{"class":195},[178,129626,53167],{"class":319},[178,129628,74103],{"class":195},[178,129630,3100],{"class":319},[178,129632,129633,129635,129637,129639,129641],{"class":180,"line":354},[178,129634,72288],{"class":195},[178,129636,53167],{"class":319},[178,129638,2552],{"class":195},[178,129640,53222],{"class":699},[178,129642,3100],{"class":319},[178,129644,129645,129647,129649,129651,129653],{"class":180,"line":364},[178,129646,72508],{"class":195},[178,129648,53167],{"class":319},[178,129650,2890],{"class":195},[178,129652,53222],{"class":699},[178,129654,3100],{"class":319},[178,129656,129657],{"class":180,"line":740},[178,129658,3371],{"class":319},[387,129660,129662],{"id":129661},"_816-小米侧边栏","8.1.6 小米侧边栏",[3269,129664],{"style":127773,"src":129665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[154,129667,129669],{"className":128664,"code":129668,"language":128666,"meta":160,"style":160},"\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",[70,129670,129671,129676,129691,129710,129729,129748,129767,129786,129805,129824],{"__ignoreMap":160},[178,129672,129673],{"class":180,"line":181},[178,129674,129675],{"class":2008},"\u003C!-- 小米侧边栏案例 -->\n",[178,129677,129678,129680,129682,129684,129686,129689],{"class":180,"line":263},[178,129679,320],{"class":319},[178,129681,53341],{"class":323},[178,129683,55210],{"class":184},[178,129685,330],{"class":319},[178,129687,129688],{"class":188},"\"sidebar\"",[178,129690,336],{"class":319},[178,129692,129693,129695,129697,129699,129701,129703,129706,129708],{"class":180,"line":274},[178,129694,341],{"class":319},[178,129696,2178],{"class":323},[178,129698,62778],{"class":184},[178,129700,330],{"class":319},[178,129702,62783],{"class":188},[178,129704,129705],{"class":319},">手机 电话卡\u003C\u002F",[178,129707,2178],{"class":323},[178,129709,336],{"class":319},[178,129711,129712,129714,129716,129718,129720,129722,129725,129727],{"class":180,"line":354},[178,129713,341],{"class":319},[178,129715,2178],{"class":323},[178,129717,62778],{"class":184},[178,129719,330],{"class":319},[178,129721,62783],{"class":188},[178,129723,129724],{"class":319},">电视 盒子\u003C\u002F",[178,129726,2178],{"class":323},[178,129728,336],{"class":319},[178,129730,129731,129733,129735,129737,129739,129741,129744,129746],{"class":180,"line":364},[178,129732,341],{"class":319},[178,129734,2178],{"class":323},[178,129736,62778],{"class":184},[178,129738,330],{"class":319},[178,129740,62783],{"class":188},[178,129742,129743],{"class":319},">笔记本 平板\u003C\u002F",[178,129745,2178],{"class":323},[178,129747,336],{"class":319},[178,129749,129750,129752,129754,129756,129758,129760,129763,129765],{"class":180,"line":740},[178,129751,341],{"class":319},[178,129753,2178],{"class":323},[178,129755,62778],{"class":184},[178,129757,330],{"class":319},[178,129759,62783],{"class":188},[178,129761,129762],{"class":319},">出行 穿戴\u003C\u002F",[178,129764,2178],{"class":323},[178,129766,336],{"class":319},[178,129768,129769,129771,129773,129775,129777,129779,129782,129784],{"class":180,"line":746},[178,129770,341],{"class":319},[178,129772,2178],{"class":323},[178,129774,62778],{"class":184},[178,129776,330],{"class":319},[178,129778,62783],{"class":188},[178,129780,129781],{"class":319},">智能 路由器\u003C\u002F",[178,129783,2178],{"class":323},[178,129785,336],{"class":319},[178,129787,129788,129790,129792,129794,129796,129798,129801,129803],{"class":180,"line":752},[178,129789,341],{"class":319},[178,129791,2178],{"class":323},[178,129793,62778],{"class":184},[178,129795,330],{"class":319},[178,129797,62783],{"class":188},[178,129799,129800],{"class":319},">健康 儿童\u003C\u002F",[178,129802,2178],{"class":323},[178,129804,336],{"class":319},[178,129806,129807,129809,129811,129813,129815,129817,129820,129822],{"class":180,"line":757},[178,129808,341],{"class":319},[178,129810,2178],{"class":323},[178,129812,62778],{"class":184},[178,129814,330],{"class":319},[178,129816,62783],{"class":188},[178,129818,129819],{"class":319},">耳机 音响\u003C\u002F",[178,129821,2178],{"class":323},[178,129823,336],{"class":319},[178,129825,129826,129828,129830],{"class":180,"line":763},[178,129827,367],{"class":319},[178,129829,53341],{"class":323},[178,129831,336],{"class":319},[154,129833,129835],{"className":127917,"code":129834,"language":127919,"meta":160,"style":160},".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",[70,129836,129837,129846,129856,129869,129881,129893,129905,129915,129926,129930,129940,129951],{"__ignoreMap":160},[178,129838,129839,129842,129844],{"class":180,"line":181},[178,129840,129841],{"class":184},".sidebar",[178,129843,3205],{"class":323},[178,129845,17330],{"class":319},[178,129847,129848,129850,129852,129854],{"class":180,"line":263},[178,129849,129533],{"class":195},[178,129851,53167],{"class":319},[178,129853,62590],{"class":195},[178,129855,3100],{"class":319},[178,129857,129858,129860,129862,129865,129867],{"class":180,"line":274},[178,129859,72288],{"class":195},[178,129861,53167],{"class":319},[178,129863,129864],{"class":195},"234",[178,129866,53222],{"class":699},[178,129868,3100],{"class":319},[178,129870,129871,129873,129875,129877,129879],{"class":180,"line":354},[178,129872,72508],{"class":195},[178,129874,53167],{"class":319},[178,129876,2392],{"class":195},[178,129878,53222],{"class":699},[178,129880,3100],{"class":319},[178,129882,129883,129885,129887,129889,129891],{"class":180,"line":364},[178,129884,128601],{"class":195},[178,129886,53167],{"class":319},[178,129888,2392],{"class":195},[178,129890,53222],{"class":699},[178,129892,3100],{"class":319},[178,129894,129895,129897,129899,129901,129903],{"class":180,"line":740},[178,129896,72543],{"class":195},[178,129898,53167],{"class":319},[178,129900,2890],{"class":195},[178,129902,53222],{"class":699},[178,129904,3100],{"class":319},[178,129906,129907,129909,129911,129913],{"class":180,"line":746},[178,129908,72625],{"class":195},[178,129910,53167],{"class":319},[178,129912,62563],{"class":195},[178,129914,3100],{"class":319},[178,129916,129917,129919,129921,129924],{"class":180,"line":752},[178,129918,72598],{"class":195},[178,129920,53167],{"class":319},[178,129922,129923],{"class":195},"#55585a",[178,129925,3100],{"class":319},[178,129927,129928],{"class":180,"line":757},[178,129929,3371],{"class":319},[178,129931,129932,129934,129936,129938],{"class":180,"line":763},[178,129933,129841],{"class":184},[178,129935,3205],{"class":323},[178,129937,62661],{"class":184},[178,129939,17330],{"class":319},[178,129941,129942,129944,129946,129949],{"class":180,"line":769},[178,129943,72598],{"class":195},[178,129945,53167],{"class":319},[178,129947,129948],{"class":195},"#ff6700",[178,129950,3100],{"class":319},[178,129952,129953],{"class":180,"line":774},[178,129954,3371],{"class":319},[3269,129956],{"style":127773,"src":129957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,129959,129960],{},"行高=盒子高度：实现文字的垂直居中",[19,129962,129963],{},"原理讲解：",[3269,129965],{"style":127773,"src":129966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,129968,129970],{"id":129969},"_82-css背景","8.2 css背景",[19,129972,129973],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[387,129975,129977],{"id":129976},"_821-背景颜色","8.2.1 背景颜色",[19,129979,129980],{},"background-color:颜色值;",[19,129982,129983],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[387,129985,129987],{"id":129986},"_822-背景图片","8.2.2 背景图片",[19,129989,129990],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[154,129992,129994],{"className":127917,"code":129993,"language":127919,"meta":160,"style":160},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[70,129995,129996,130002,130018],{"__ignoreMap":160},[178,129997,129998,130000],{"class":180,"line":181},[178,129999,53341],{"class":323},[178,130001,17330],{"class":319},[178,130003,130004,130007,130009,130011,130013,130016],{"class":180,"line":263},[178,130005,130006],{"class":195},"  background-image",[178,130008,53167],{"class":319},[178,130010,63447],{"class":195},[178,130012,944],{"class":319},[178,130014,130015],{"class":6985},"images\u002Fbg.png",[178,130017,4495],{"class":319},[178,130019,130020],{"class":180,"line":274},[178,130021,3371],{"class":319},[45,130023,130024,130033],{},[48,130025,130026],{},[51,130027,130028,130031],{},[54,130029,130030],{"align":56},"参数值",[54,130032,60],{"align":56},[62,130034,130035,130042],{},[51,130036,130037,130039],{},[67,130038,56458],{"align":56},[67,130040,130041],{"align":56},"无背景图（默认的）",[51,130043,130044,130046],{},[67,130045,63447],{"align":56},[67,130047,130048],{"align":56},"使用绝对或相对地址指定背景图像",[154,130050,130051],{"className":127917,"code":129993,"language":127919,"meta":160,"style":160},[70,130052,130053,130059,130073],{"__ignoreMap":160},[178,130054,130055,130057],{"class":180,"line":181},[178,130056,53341],{"class":323},[178,130058,17330],{"class":319},[178,130060,130061,130063,130065,130067,130069,130071],{"class":180,"line":263},[178,130062,130006],{"class":195},[178,130064,53167],{"class":319},[178,130066,63447],{"class":195},[178,130068,944],{"class":319},[178,130070,130015],{"class":6985},[178,130072,4495],{"class":319},[178,130074,130075],{"class":180,"line":274},[178,130076,3371],{"class":319},[19,130078,130079],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[387,130081,130083],{"id":130082},"_823-背景平铺","8.2.3 背景平铺",[154,130085,130087],{"className":127917,"code":130086,"language":127919,"meta":160,"style":160},"div {\n  background-repeat: no-repeat;\n}\n",[70,130088,130089,130095,130106],{"__ignoreMap":160},[178,130090,130091,130093],{"class":180,"line":181},[178,130092,53341],{"class":323},[178,130094,17330],{"class":319},[178,130096,130097,130100,130102,130104],{"class":180,"line":263},[178,130098,130099],{"class":195},"  background-repeat",[178,130101,53167],{"class":319},[178,130103,63457],{"class":195},[178,130105,3100],{"class":319},[178,130107,130108],{"class":180,"line":274},[178,130109,3371],{"class":319},[45,130111,130112,130120],{},[48,130113,130114],{},[51,130115,130116,130118],{},[54,130117,130030],{"align":56},[54,130119,60],{"align":56},[62,130121,130122,130130,130137,130145],{},[51,130123,130124,130127],{},[67,130125,130126],{"align":56},"repeat",[67,130128,130129],{"align":56},"背景图像在纵向和横向上平铺（默认的）",[51,130131,130132,130134],{},[67,130133,63457],{"align":56},[67,130135,130136],{"align":56},"背景图像不平铺",[51,130138,130139,130142],{},[67,130140,130141],{"align":56},"repeat-x",[67,130143,130144],{"align":56},"背景图像在横向上平铺",[51,130146,130147,130150],{},[67,130148,130149],{"align":56},"repeat-y",[67,130151,130152],{"align":56},"背景图像在纵向平铺",[387,130154,130156],{"id":130155},"_824-背景图片位置","8.2.4 背景图片位置",[154,130158,130160],{"className":127917,"code":130159,"language":127919,"meta":160,"style":160},"\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",[70,130161,130162,130167,130173,130187,130191,130196,130202,130218,130222,130227,130233,130247],{"__ignoreMap":160},[178,130163,130164],{"class":180,"line":181},[178,130165,130166],{"class":2008},"\u002F* 方位名词 *\u002F\n",[178,130168,130169,130171],{"class":180,"line":263},[178,130170,53341],{"class":323},[178,130172,17330],{"class":319},[178,130174,130175,130178,130180,130182,130185],{"class":180,"line":274},[178,130176,130177],{"class":195},"  background-position",[178,130179,53167],{"class":319},[178,130181,53322],{"class":195},[178,130183,130184],{"class":195}," top",[178,130186,3100],{"class":319},[178,130188,130189],{"class":180,"line":354},[178,130190,3371],{"class":319},[178,130192,130193],{"class":180,"line":364},[178,130194,130195],{"class":2008},"\u002F* 精确单位 *\u002F\n",[178,130197,130198,130200],{"class":180,"line":740},[178,130199,53341],{"class":323},[178,130201,17330],{"class":319},[178,130203,130204,130206,130208,130210,130212,130214,130216],{"class":180,"line":746},[178,130205,130177],{"class":195},[178,130207,53167],{"class":319},[178,130209,2640],{"class":195},[178,130211,53222],{"class":699},[178,130213,59225],{"class":195},[178,130215,53222],{"class":699},[178,130217,3100],{"class":319},[178,130219,130220],{"class":180,"line":752},[178,130221,3371],{"class":319},[178,130223,130224],{"class":180,"line":757},[178,130225,130226],{"class":2008},"\u002F* 混合单位 *\u002F\n",[178,130228,130229,130231],{"class":180,"line":763},[178,130230,53341],{"class":323},[178,130232,17330],{"class":319},[178,130234,130235,130237,130239,130241,130243,130245],{"class":180,"line":769},[178,130236,130177],{"class":195},[178,130238,53167],{"class":319},[178,130240,2640],{"class":195},[178,130242,53222],{"class":699},[178,130244,18902],{"class":195},[178,130246,3100],{"class":319},[178,130248,130249],{"class":180,"line":774},[178,130250,3371],{"class":319},[19,130252,130253],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[45,130255,130256,130264],{},[48,130257,130258],{},[51,130259,130260,130262],{},[54,130261,130030],{"align":56},[54,130263,27621],{"align":56},[62,130265,130266,130273],{},[51,130267,130268,130270],{},[67,130269,53696],{"align":56},[67,130271,130272],{"align":56},"百分数|由浮点数和单位标识符组成的长度值",[51,130274,130275,130278],{},[67,130276,130277],{"align":56},"position",[67,130279,130280],{"align":56},"top|center|bottom|left|center|right 方位名词",[19,130282,130283],{},"其他说明：",[19,130285,130286],{},"①参数是方位名词",[19,130288,130289],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,130291,130292],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,130294,130295],{},"②参数是精确单位",[19,130297,130298],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,130300,130301],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,130303,130304],{},"③参数是混合单位",[19,130306,130307],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[387,130309,130311],{"id":130310},"_825-背景图片固定","8.2.5 背景图片固定",[154,130313,130315],{"className":127917,"code":130314,"language":127919,"meta":160,"style":160},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[70,130316,130317,130322,130328,130340,130344,130349,130355,130365],{"__ignoreMap":160},[178,130318,130319],{"class":180,"line":181},[178,130320,130321],{"class":2008},"\u002F* 背景滚动（默认） *\u002F\n",[178,130323,130324,130326],{"class":180,"line":263},[178,130325,53341],{"class":323},[178,130327,17330],{"class":319},[178,130329,130330,130333,130335,130338],{"class":180,"line":274},[178,130331,130332],{"class":195},"  background-attachment",[178,130334,53167],{"class":319},[178,130336,130337],{"class":195},"scroll",[178,130339,3100],{"class":319},[178,130341,130342],{"class":180,"line":354},[178,130343,3371],{"class":319},[178,130345,130346],{"class":180,"line":364},[178,130347,130348],{"class":2008},"\u002F* 背景固定 *\u002F\n",[178,130350,130351,130353],{"class":180,"line":740},[178,130352,53341],{"class":323},[178,130354,17330],{"class":319},[178,130356,130357,130359,130361,130363],{"class":180,"line":746},[178,130358,130332],{"class":195},[178,130360,53167],{"class":319},[178,130362,87948],{"class":195},[178,130364,3100],{"class":319},[178,130366,130367],{"class":180,"line":752},[178,130368,3371],{"class":319},[45,130370,130371,130380],{},[48,130372,130373],{},[51,130374,130375,130378],{},[54,130376,130377],{"align":56},"参数",[54,130379,60],{"align":56},[62,130381,130382,130389],{},[51,130383,130384,130386],{},[67,130385,130337],{"align":56},[67,130387,130388],{"align":56},"背景图像是随对象内容滚动",[51,130390,130391,130393],{},[67,130392,87948],{"align":56},[67,130394,130395],{"align":56},"背景图像固定",[387,130397,130399],{"id":130398},"_826-背景样式合写","8.2.6 背景样式合写",[154,130401,130403],{"className":127917,"code":130402,"language":127919,"meta":160,"style":160},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[70,130404,130405,130410,130416,130444],{"__ignoreMap":160},[178,130406,130407],{"class":180,"line":181},[178,130408,130409],{"class":2008},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[178,130411,130412,130414],{"class":180,"line":263},[178,130413,53341],{"class":323},[178,130415,17330],{"class":319},[178,130417,130418,130420,130422,130424,130427,130429,130431,130433,130435,130438,130440,130442],{"class":180,"line":274},[178,130419,72331],{"class":195},[178,130421,53167],{"class":319},[178,130423,62563],{"class":195},[178,130425,130426],{"class":195}," url",[178,130428,944],{"class":319},[178,130430,130015],{"class":6985},[178,130432,15474],{"class":319},[178,130434,63457],{"class":195},[178,130436,130437],{"class":195}," fixed",[178,130439,18902],{"class":195},[178,130441,130184],{"class":195},[178,130443,3100],{"class":319},[178,130445,130446],{"class":180,"line":354},[178,130447,3371],{"class":319},[387,130449,130451],{"id":130450},"_827-背景色半透明","8.2.7 背景色半透明",[154,130453,130455],{"className":127917,"code":130454,"language":127919,"meta":160,"style":160},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[70,130456,130457,130463,130489],{"__ignoreMap":160},[178,130458,130459,130461],{"class":180,"line":181},[178,130460,53341],{"class":323},[178,130462,17330],{"class":319},[178,130464,130465,130467,130469,130471,130473,130475,130477,130479,130481,130483,130485,130487],{"class":180,"line":263},[178,130466,72331],{"class":195},[178,130468,53167],{"class":319},[178,130470,56831],{"class":195},[178,130472,944],{"class":319},[178,130474,2133],{"class":195},[178,130476,14196],{"class":319},[178,130478,2133],{"class":195},[178,130480,14196],{"class":319},[178,130482,2133],{"class":195},[178,130484,14196],{"class":319},[178,130486,102234],{"class":195},[178,130488,4495],{"class":319},[178,130490,130491],{"class":180,"line":274},[178,130492,3371],{"class":319},[19,130494,101109],{},[19,130496,130497],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,130499,130500],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,130502,130503],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,130505,130506],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[387,130508,130510],{"id":130509},"_828-总结","8.2.8 总结",[45,130512,130513,130524],{},[48,130514,130515],{},[51,130516,130517,130520,130522],{},[54,130518,130519],{"align":56},"属性",[54,130521,60],{"align":56},[54,130523,2096],{"align":56},[62,130525,130526,130537,130548,130559,130570,130581,130592],{},[51,130527,130528,130531,130534],{},[67,130529,130530],{"align":56},"background-color",[67,130532,130533],{"align":56},"背景颜色",[67,130535,130536],{"align":56},"预定义的颜色值\u002F十六进制\u002FRGB代码",[51,130538,130539,130542,130545],{},[67,130540,130541],{"align":56},"background-image",[67,130543,130544],{"align":56},"背景图片",[67,130546,130547],{"align":56},"url(图片路径)",[51,130549,130550,130553,130556],{},[67,130551,130552],{"align":56},"background-repeat",[67,130554,130555],{"align":56},"是否平铺",[67,130557,130558],{"align":56},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[51,130560,130561,130564,130567],{},[67,130562,130563],{"align":56},"background-position",[67,130565,130566],{"align":56},"背景位置",[67,130568,130569],{"align":56},"length\u002Fposition 分别是x和y坐标",[51,130571,130572,130575,130578],{},[67,130573,130574],{"align":56},"background-attachment",[67,130576,130577],{"align":56},"背景附着",[67,130579,130580],{"align":56},"scroll(背景滚动) \u002Ffixed (背景固定)",[51,130582,130583,130586,130589],{},[67,130584,130585],{"align":56},"背景简写",[67,130587,130588],{"align":56},"书写更简单",[67,130590,130591],{"align":56},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[51,130593,130594,130597,130600],{},[67,130595,130596],{"align":56},"背景半透明",[67,130598,130599],{"align":56},"背景颜色半透明",[67,130601,130602],{"align":56},"background: rgba(0,0,0.3); 后面必须是4个值",[19,130604,130605],{},"颜色渐变：",[3269,130607],{"style":127773,"src":130608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[3269,130610],{"style":127773,"src":130611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[387,130613,130615],{"id":130614},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[154,130617,130619],{"className":128664,"code":130618,"language":128666,"meta":160,"style":160},"\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",[70,130620,130621,130636,130655,130674,130693,130712,130731],{"__ignoreMap":160},[178,130622,130623,130625,130627,130629,130631,130634],{"class":180,"line":181},[178,130624,320],{"class":319},[178,130626,53341],{"class":323},[178,130628,55210],{"class":184},[178,130630,330],{"class":319},[178,130632,130633],{"class":188},"\"nav\"",[178,130635,336],{"class":319},[178,130637,130638,130640,130642,130644,130646,130648,130651,130653],{"class":180,"line":263},[178,130639,341],{"class":319},[178,130641,2178],{"class":323},[178,130643,62778],{"class":184},[178,130645,330],{"class":319},[178,130647,62783],{"class":188},[178,130649,130650],{"class":319},">五彩导航1\u003C\u002F",[178,130652,2178],{"class":323},[178,130654,336],{"class":319},[178,130656,130657,130659,130661,130663,130665,130667,130670,130672],{"class":180,"line":274},[178,130658,341],{"class":319},[178,130660,2178],{"class":323},[178,130662,62778],{"class":184},[178,130664,330],{"class":319},[178,130666,62783],{"class":188},[178,130668,130669],{"class":319},">五彩导航2\u003C\u002F",[178,130671,2178],{"class":323},[178,130673,336],{"class":319},[178,130675,130676,130678,130680,130682,130684,130686,130689,130691],{"class":180,"line":354},[178,130677,341],{"class":319},[178,130679,2178],{"class":323},[178,130681,62778],{"class":184},[178,130683,330],{"class":319},[178,130685,62783],{"class":188},[178,130687,130688],{"class":319},">五彩导航3\u003C\u002F",[178,130690,2178],{"class":323},[178,130692,336],{"class":319},[178,130694,130695,130697,130699,130701,130703,130705,130708,130710],{"class":180,"line":364},[178,130696,341],{"class":319},[178,130698,2178],{"class":323},[178,130700,62778],{"class":184},[178,130702,330],{"class":319},[178,130704,62783],{"class":188},[178,130706,130707],{"class":319},">五彩导航4\u003C\u002F",[178,130709,2178],{"class":323},[178,130711,336],{"class":319},[178,130713,130714,130716,130718,130720,130722,130724,130727,130729],{"class":180,"line":740},[178,130715,341],{"class":319},[178,130717,2178],{"class":323},[178,130719,62778],{"class":184},[178,130721,330],{"class":319},[178,130723,62783],{"class":188},[178,130725,130726],{"class":319},">五彩导航5\u003C\u002F",[178,130728,2178],{"class":323},[178,130730,336],{"class":319},[178,130732,130733,130735,130737],{"class":180,"line":746},[178,130734,367],{"class":319},[178,130736,53341],{"class":323},[178,130738,336],{"class":319},[154,130740,130742],{"className":127917,"code":130741,"language":127919,"meta":160,"style":160},".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",[70,130743,130744,130753,130763,130775,130787,130797,130809,130819,130823,130848,130871,130894,130917],{"__ignoreMap":160},[178,130745,130746,130749,130751],{"class":180,"line":181},[178,130747,130748],{"class":184},".nav",[178,130750,3205],{"class":323},[178,130752,17330],{"class":319},[178,130754,130755,130757,130759,130761],{"class":180,"line":263},[178,130756,129533],{"class":195},[178,130758,53167],{"class":319},[178,130760,74103],{"class":195},[178,130762,3100],{"class":319},[178,130764,130765,130767,130769,130771,130773],{"class":180,"line":274},[178,130766,72288],{"class":195},[178,130768,53167],{"class":319},[178,130770,2757],{"class":195},[178,130772,53222],{"class":699},[178,130774,3100],{"class":319},[178,130776,130777,130779,130781,130783,130785],{"class":180,"line":354},[178,130778,72508],{"class":195},[178,130780,53167],{"class":319},[178,130782,2796],{"class":195},[178,130784,53222],{"class":699},[178,130786,3100],{"class":319},[178,130788,130789,130791,130793,130795],{"class":180,"line":364},[178,130790,72246],{"class":195},[178,130792,53167],{"class":319},[178,130794,53322],{"class":195},[178,130796,3100],{"class":319},[178,130798,130799,130801,130803,130805,130807],{"class":180,"line":740},[178,130800,128601],{"class":195},[178,130802,53167],{"class":319},[178,130804,2796],{"class":195},[178,130806,53222],{"class":699},[178,130808,3100],{"class":319},[178,130810,130811,130813,130815,130817],{"class":180,"line":746},[178,130812,72625],{"class":195},[178,130814,53167],{"class":319},[178,130816,62563],{"class":195},[178,130818,3100],{"class":319},[178,130820,130821],{"class":180,"line":752},[178,130822,3371],{"class":319},[178,130824,130825,130827,130829,130832,130834,130836,130839,130841,130843,130845],{"class":180,"line":757},[178,130826,130748],{"class":184},[178,130828,3205],{"class":323},[178,130830,130831],{"class":184},":nth-child",[178,130833,944],{"class":319},[178,130835,1665],{"class":195},[178,130837,130838],{"class":319},") { ",[178,130840,130530],{"class":195},[178,130842,53167],{"class":319},[178,130844,129948],{"class":195},[178,130846,130847],{"class":319},"; }\n",[178,130849,130850,130852,130854,130856,130858,130860,130862,130864,130866,130869],{"class":180,"line":763},[178,130851,130748],{"class":184},[178,130853,3205],{"class":323},[178,130855,130831],{"class":184},[178,130857,944],{"class":319},[178,130859,1669],{"class":195},[178,130861,130838],{"class":319},[178,130863,130530],{"class":195},[178,130865,53167],{"class":319},[178,130867,130868],{"class":195},"#ff0000",[178,130870,130847],{"class":319},[178,130872,130873,130875,130877,130879,130881,130883,130885,130887,130889,130892],{"class":180,"line":769},[178,130874,130748],{"class":184},[178,130876,3205],{"class":323},[178,130878,130831],{"class":184},[178,130880,944],{"class":319},[178,130882,2021],{"class":195},[178,130884,130838],{"class":319},[178,130886,130530],{"class":195},[178,130888,53167],{"class":319},[178,130890,130891],{"class":195},"#00a4ff",[178,130893,130847],{"class":319},[178,130895,130896,130898,130900,130902,130904,130906,130908,130910,130912,130915],{"class":180,"line":774},[178,130897,130748],{"class":184},[178,130899,3205],{"class":323},[178,130901,130831],{"class":184},[178,130903,944],{"class":319},[178,130905,2233],{"class":195},[178,130907,130838],{"class":319},[178,130909,130530],{"class":195},[178,130911,53167],{"class":319},[178,130913,130914],{"class":195},"#ff00ff",[178,130916,130847],{"class":319},[178,130918,130919,130921,130923,130925,130927,130929,130931,130933,130935,130938],{"class":180,"line":780},[178,130920,130748],{"class":184},[178,130922,3205],{"class":323},[178,130924,130831],{"class":184},[178,130926,944],{"class":319},[178,130928,2259],{"class":195},[178,130930,130838],{"class":319},[178,130932,130530],{"class":195},[178,130934,53167],{"class":319},[178,130936,130937],{"class":195},"#00ff00",[178,130939,130847],{"class":319},[14,130941,130943],{"id":130942},"_83-css三大特性","8.3 css三大特性",[387,130945,130947],{"id":130946},"_831-层叠性","8.3.1 层叠性",[19,130949,130950],{},"为了解决样式冲突问题",[19,130952,130953],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,130955,130956],{},"   ②样式不冲突，不会层叠",[387,130958,130960],{"id":130959},"_832-继承性","8.3.2 继承性",[19,130962,130963],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,130965,130966],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[154,130968,130970],{"className":127917,"code":130969,"language":127919,"meta":160,"style":160},"p {\n  color: #333;\n}\n",[70,130971,130972,130978,130988],{"__ignoreMap":160},[178,130973,130974,130976],{"class":180,"line":181},[178,130975,19],{"class":323},[178,130977,17330],{"class":319},[178,130979,130980,130982,130984,130986],{"class":180,"line":263},[178,130981,72625],{"class":195},[178,130983,53167],{"class":319},[178,130985,64090],{"class":195},[178,130987,3100],{"class":319},[178,130989,130990],{"class":180,"line":274},[178,130991,3371],{"class":319},[3269,130993],{"style":127773,"src":130994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,130996,130997],{},"解释：①行高可以跟单位也可以不跟单位",[19,130999,131000],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,131002,131003],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,131005,131006],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[387,131008,131010],{"id":131009},"_833-优先级","8.3.3 优先级",[26,131012,131013,131016],{},[29,131014,131015],{},"选择器相同，则执行层叠性",[29,131017,131018],{},"选择器不同，则根据选择器权重执行",[45,131020,131021,131031],{},[48,131022,131023],{},[51,131024,131025,131028],{},[54,131026,131027],{"align":56},"选择器",[54,131029,131030],{"align":56},"选择器权重",[62,131032,131033,131041,131049,131057,131065,131073],{},[51,131034,131035,131038],{},[67,131036,131037],{"align":56},"继承 或者*",[67,131039,131040],{"align":56},"0，0，0，0",[51,131042,131043,131046],{},[67,131044,131045],{"align":56},"标签选择器",[67,131047,131048],{"align":56},"0，0，0，1",[51,131050,131051,131054],{},[67,131052,131053],{"align":56},"类选择器，伪类选择器",[67,131055,131056],{"align":56},"0，0，1，0",[51,131058,131059,131062],{},[67,131060,131061],{"align":56},"ID选择器",[67,131063,131064],{"align":56},"0，1，0，0",[51,131066,131067,131070],{},[67,131068,131069],{"align":56},"行内样式",[67,131071,131072],{"align":56},"1，0，0，0",[51,131074,131075,131078],{},[67,131076,131077],{"align":56},"！important",[67,131079,131080],{"align":56},"无穷大",[19,131082,131083],{},"! important用法：",[154,131085,131087],{"className":127917,"code":131086,"language":127919,"meta":160,"style":160},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[70,131088,131089,131094,131100,131113,131117,131122,131128,131138],{"__ignoreMap":160},[178,131090,131091],{"class":180,"line":181},[178,131092,131093],{"class":2008},"\u002F* !important 拥有最高优先级 *\u002F\n",[178,131095,131096,131098],{"class":180,"line":263},[178,131097,53341],{"class":323},[178,131099,17330],{"class":319},[178,131101,131102,131104,131106,131108,131111],{"class":180,"line":274},[178,131103,72625],{"class":195},[178,131105,53167],{"class":319},[178,131107,53375],{"class":195},[178,131109,131110],{"class":699}," !important",[178,131112,3100],{"class":319},[178,131114,131115],{"class":180,"line":354},[178,131116,3371],{"class":319},[178,131118,131119],{"class":180,"line":364},[178,131120,131121],{"class":2008},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[178,131123,131124,131126],{"class":180,"line":740},[178,131125,53341],{"class":323},[178,131127,17330],{"class":319},[178,131129,131130,131132,131134,131136],{"class":180,"line":746},[178,131131,72625],{"class":195},[178,131133,53167],{"class":319},[178,131135,59142],{"class":195},[178,131137,3100],{"class":319},[178,131139,131140],{"class":180,"line":752},[178,131141,3371],{"class":319},[19,131143,131144],{},"优先级注意点：",[19,131146,131147],{},"①权重是有4组数字组成,但是不会有进位",[19,131149,131150],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,131152,131153],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,131155,131156],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,131158,131159],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,131161,131162],{},"⑥复合选择器",[45,131164,131165,131175],{},[48,131166,131167],{},[51,131168,131169,131172],{},[54,131170,131171],{"align":56},"div ul li",[54,131173,131174],{"align":56},"0,0,0,3",[62,131176,131177,131185,131193],{},[51,131178,131179,131182],{},[67,131180,131181],{"align":56},".nav ul li",[67,131183,131184],{"align":56},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[51,131186,131187,131190],{},[67,131188,131189],{"align":56},"a:hover",[67,131191,131192],{"align":56},"0,0,1,1",[51,131194,131195,131198],{},[67,131196,131197],{"align":56},".nav a",[67,131199,131192],{"align":56},[1853,131201,131202],{},"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":160,"searchDepth":263,"depth":263,"links":131204},[131205,131213,131224],{"id":129313,"depth":263,"text":129314,"children":131206},[131207,131208,131209,131210,131211,131212],{"id":129326,"depth":274,"text":129327},{"id":129398,"depth":274,"text":129399},{"id":129470,"depth":274,"text":129471},{"id":129501,"depth":274,"text":129502},{"id":129508,"depth":274,"text":129509},{"id":129661,"depth":274,"text":129662},{"id":129969,"depth":263,"text":129970,"children":131214},[131215,131216,131217,131218,131219,131220,131221,131222,131223],{"id":129976,"depth":274,"text":129977},{"id":129986,"depth":274,"text":129987},{"id":130082,"depth":274,"text":130083},{"id":130155,"depth":274,"text":130156},{"id":130310,"depth":274,"text":130311},{"id":130398,"depth":274,"text":130399},{"id":130450,"depth":274,"text":130451},{"id":130509,"depth":274,"text":130510},{"id":130614,"depth":274,"text":130615},{"id":130942,"depth":263,"text":130943,"children":131225},[131226,131227,131228],{"id":130946,"depth":274,"text":130947},{"id":130959,"depth":274,"text":130960},{"id":131009,"depth":274,"text":131010},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":129305,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":131235,"title":131236,"body":131237,"description":25135,"extension":1880,"meta":132827,"navigation":721,"path":132828,"seo":132829,"stem":132830,"__hash__":132831},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131238,"toc":132806},[131239,131242,131246,131249,131252,131255,131258,131261,131264,131267,131271,131279,131316,131352,131355,131369,131374,131408,131411,131504,131509,131512,131542,131545,131550,131558,131562,131569,131615,131659,131664,131667,131670,131673,131676,131679,131682,131684,131687,131691,131696,131740,131745,131748,131751,131788,131793,131796,131799,131802,131805,131837,131840,131843,131846,131878,131881,131884,131887,131891,131894,131926,131929,131933,131953,131956,131964,131967,131971,131976,131979,132011,132016,132019,132057,132061,132066,132069,132072,132103,132106,132123,132128,132180,132240,132245,132299,132337,132341,132345,132348,132352,132360,132363,132365,132376,132381,132429,132463,132466,132469,132472,132475,132519,132522,132525,132528,132531,132534,132537,132581,132584,132587,132590,132593,132596,132599,132605,132608,132652,132655,132658,132661,132664,132667,132711,132714,132716,132719,132723,132727,132765,132769,132772,132775,132779,132787,132791,132794,132797,132800,132803],[10,131240,131236],{"id":131241},"_9-css盒模型浮动与切图",[14,131243,131245],{"id":131244},"_91-盒子模型","9.1 盒子模型",[19,131247,131248],{},"利用盒子来设计网页",[19,131250,131251],{},"盒子包含：边框、外边距、内边距、实际内容",[19,131253,131254],{},"网页布局设置：",[19,131256,131257],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,131259,131260],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,131262,131263],{},"③往盒子里装内容",[3269,131265],{"style":127773,"src":131266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[387,131268,131270],{"id":131269},"_911-边框border","9.1.1 边框（border）",[26,131272,131273,131276],{},[29,131274,131275],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[29,131277,131278],{},"语法",[154,131280,131282],{"className":127917,"code":131281,"language":127919,"meta":160,"style":160},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[70,131283,131284,131289,131295,131312],{"__ignoreMap":160},[178,131285,131286],{"class":180,"line":181},[178,131287,131288],{"class":2008},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[178,131290,131291,131293],{"class":180,"line":263},[178,131292,53341],{"class":323},[178,131294,17330],{"class":319},[178,131296,131297,131299,131301,131303,131305,131307,131310],{"class":180,"line":274},[178,131298,72616],{"class":195},[178,131300,53167],{"class":319},[178,131302,1665],{"class":195},[178,131304,53222],{"class":699},[178,131306,53251],{"class":195},[178,131308,131309],{"class":195}," #ccc",[178,131311,3100],{"class":319},[178,131313,131314],{"class":180,"line":354},[178,131315,3371],{"class":319},[45,131317,131318,131326],{},[48,131319,131320],{},[51,131321,131322,131324],{},[54,131323,130519],{"align":56},[54,131325,60],{"align":56},[62,131327,131328,131336,131344],{},[51,131329,131330,131333],{},[67,131331,131332],{"align":56},"border-width",[67,131334,131335],{"align":56},"定义边框粗细，单位是px",[51,131337,131338,131341],{},[67,131339,131340],{"align":56},"border-style",[67,131342,131343],{"align":56},"边框的样式",[51,131345,131346,131349],{},[67,131347,131348],{"align":56},"border-color",[67,131350,131351],{"align":56},"边框的颜色",[19,131353,131354],{},"边框样式 border-style 可以设置如下值：",[2946,131356,131357,131360,131363,131366],{},[29,131358,131359],{},"none：没有边框即忽略所有边框的宽度（默认值）",[29,131361,131362],{},"solid：边框为单实线(最为常用的)",[29,131364,131365],{},"dashed：边框为虚线",[29,131367,131368],{},"dotted：边框为点线",[26,131370,131371],{"start":274},[29,131372,131373],{},"边框的合写分写",[154,131375,131376],{"className":127917,"code":131281,"language":127919,"meta":160,"style":160},[70,131377,131378,131382,131388,131404],{"__ignoreMap":160},[178,131379,131380],{"class":180,"line":181},[178,131381,131288],{"class":2008},[178,131383,131384,131386],{"class":180,"line":263},[178,131385,53341],{"class":323},[178,131387,17330],{"class":319},[178,131389,131390,131392,131394,131396,131398,131400,131402],{"class":180,"line":274},[178,131391,72616],{"class":195},[178,131393,53167],{"class":319},[178,131395,1665],{"class":195},[178,131397,53222],{"class":699},[178,131399,53251],{"class":195},[178,131401,131309],{"class":195},[178,131403,3100],{"class":319},[178,131405,131406],{"class":180,"line":354},[178,131407,3371],{"class":319},[19,131409,131410],{},"边框分开写法：",[154,131412,131414],{"className":127917,"code":131413,"language":127919,"meta":160,"style":160},"\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",[70,131415,131416,131421,131427,131445,131463,131482,131500],{"__ignoreMap":160},[178,131417,131418],{"class":180,"line":181},[178,131419,131420],{"class":2008},"\u002F* 边框分开写法 *\u002F\n",[178,131422,131423,131425],{"class":180,"line":263},[178,131424,53341],{"class":323},[178,131426,17330],{"class":319},[178,131428,131429,131432,131434,131436,131438,131440,131443],{"class":180,"line":274},[178,131430,131431],{"class":195},"  border-top",[178,131433,53167],{"class":319},[178,131435,1665],{"class":195},[178,131437,53222],{"class":699},[178,131439,53251],{"class":195},[178,131441,131442],{"class":195}," #000",[178,131444,3100],{"class":319},[178,131446,131447,131450,131452,131454,131456,131458,131461],{"class":180,"line":354},[178,131448,131449],{"class":195},"  border-right",[178,131451,53167],{"class":319},[178,131453,1669],{"class":195},[178,131455,53222],{"class":699},[178,131457,63962],{"class":195},[178,131459,131460],{"class":195}," #333",[178,131462,3100],{"class":319},[178,131464,131465,131468,131470,131472,131474,131477,131480],{"class":180,"line":364},[178,131466,131467],{"class":195},"  border-bottom",[178,131469,53167],{"class":319},[178,131471,2021],{"class":195},[178,131473,53222],{"class":699},[178,131475,131476],{"class":195}," dotted",[178,131478,131479],{"class":195}," #666",[178,131481,3100],{"class":319},[178,131483,131484,131487,131489,131491,131493,131495,131498],{"class":180,"line":740},[178,131485,131486],{"class":195},"  border-left",[178,131488,53167],{"class":319},[178,131490,1665],{"class":195},[178,131492,53222],{"class":699},[178,131494,53251],{"class":195},[178,131496,131497],{"class":195}," #999",[178,131499,3100],{"class":319},[178,131501,131502],{"class":180,"line":746},[178,131503,3371],{"class":319},[26,131505,131506],{"start":354},[29,131507,131508],{},"表格的细线边框",[19,131510,131511],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[154,131513,131515],{"className":127917,"code":131514,"language":127919,"meta":160,"style":160},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[70,131516,131517,131522,131528,131538],{"__ignoreMap":160},[178,131518,131519],{"class":180,"line":181},[178,131520,131521],{"class":2008},"\u002F* 表格细线边框合并 *\u002F\n",[178,131523,131524,131526],{"class":180,"line":263},[178,131525,45],{"class":323},[178,131527,17330],{"class":319},[178,131529,131530,131532,131534,131536],{"class":180,"line":274},[178,131531,72298],{"class":195},[178,131533,53167],{"class":319},[178,131535,66755],{"class":195},[178,131537,3100],{"class":319},[178,131539,131540],{"class":180,"line":354},[178,131541,3371],{"class":319},[19,131543,131544],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[26,131546,131547],{"start":364},[29,131548,131549],{},"解决边框额外增加盒子的实际大小的方法：",[2946,131551,131552,131555],{},[29,131553,131554],{},"测量盒子大小的时候,不量边框",[29,131556,131557],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[387,131559,131561],{"id":131560},"_912-内边距","9.1.2 内边距",[26,131563,131564,131567],{},[29,131565,131566],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[29,131568,131278],{},[45,131570,131571,131581],{},[48,131572,131573],{},[51,131574,131575,131578],{},[54,131576,131577],{"align":56},"值的个数",[54,131579,131580],{"align":56},"表达意思",[62,131582,131583,131591,131599,131607],{},[51,131584,131585,131588],{},[67,131586,131587],{"align":56},"padding: 5px;",[67,131589,131590],{"align":56},"1个值，代表上下左右都有5个元素",[51,131592,131593,131596],{},[67,131594,131595],{"align":56},"padding: 5px 10px;",[67,131597,131598],{"align":56},"2个值，代表上下内边距为5像素，左右内边距为10像素",[51,131600,131601,131604],{},[67,131602,131603],{"align":56},"padding: 5px 10px 20px;",[67,131605,131606],{"align":56},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[51,131608,131609,131612],{},[67,131610,131611],{"align":56},"padding: 5px 10px 20px 30px;",[67,131613,131614],{"align":56},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[45,131616,131617,131625],{},[48,131618,131619],{},[51,131620,131621,131623],{},[54,131622,130519],{"align":56},[54,131624,60],{"align":56},[62,131626,131627,131635,131643,131651],{},[51,131628,131629,131632],{},[67,131630,131631],{"align":56},"padding-left",[67,131633,131634],{"align":56},"左内边距",[51,131636,131637,131640],{},[67,131638,131639],{"align":56},"padding-right",[67,131641,131642],{"align":56},"右内边距",[51,131644,131645,131648],{},[67,131646,131647],{"align":56},"padding-top",[67,131649,131650],{"align":56},"上内边距",[51,131652,131653,131656],{},[67,131654,131655],{"align":56},"padding-bottom",[67,131657,131658],{"align":56},"下内边距",[26,131660,131661],{"start":274},[29,131662,131663],{},"内边距会影响盒子的实际大小",[19,131665,131666],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,131668,131669],{},"①内容和边框有了距离，添加了内边距",[19,131671,131672],{},"②padding影响了盒子实际大小",[19,131674,131675],{},"内边距对盒子大小的影响：",[19,131677,131678],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,131680,131681],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,131683,96935],{},[19,131685,131686],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[387,131688,131690],{"id":131689},"_913-外边距","9.1.3 外边距",[26,131692,131693],{},[29,131694,131695],{},"控制盒子与盒子之间的距离",[45,131697,131698,131706],{},[48,131699,131700],{},[51,131701,131702,131704],{},[54,131703,130519],{"align":56},[54,131705,60],{"align":56},[62,131707,131708,131716,131724,131732],{},[51,131709,131710,131713],{},[67,131711,131712],{"align":56},"margin-left",[67,131714,131715],{"align":56},"左外边距",[51,131717,131718,131721],{},[67,131719,131720],{"align":56},"margin-right",[67,131722,131723],{"align":56},"右外边距",[51,131725,131726,131729],{},[67,131727,131728],{"align":56},"margin-top",[67,131730,131731],{"align":56},"上外边距",[51,131733,131734,131737],{},[67,131735,131736],{"align":56},"margin-bottom",[67,131738,131739],{"align":56},"下外边距",[26,131741,131742],{"start":263},[29,131743,131744],{},"外边距可以让块级盒子水平居中的两个条件：",[19,131746,131747],{},"①盒子必须指定了宽度（width）",[19,131749,131750],{},"②盒子左右的外边距都设置为 auto",[154,131752,131754],{"className":127917,"code":131753,"language":127919,"meta":160,"style":160},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[70,131755,131756,131761,131768,131784],{"__ignoreMap":160},[178,131757,131758],{"class":180,"line":181},[178,131759,131760],{"class":2008},"\u002F* margin 复合写法（同上） *\u002F\n",[178,131762,131763,131766],{"class":180,"line":263},[178,131764,131765],{"class":184},".box",[178,131767,17330],{"class":319},[178,131769,131770,131772,131774,131776,131778,131781],{"class":180,"line":274},[178,131771,72190],{"class":195},[178,131773,53167],{"class":319},[178,131775,2133],{"class":195},[178,131777,53286],{"class":195},[178,131779,131780],{"class":319},";  ",[178,131782,131783],{"class":2008},"\u002F* 块级盒子水平居中 *\u002F\n",[178,131785,131786],{"class":180,"line":354},[178,131787,3371],{"class":319},[26,131789,131790],{"start":274},[29,131791,131792],{},"外边距塌陷问题",[19,131794,131795],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[3269,131797],{"style":127773,"src":131798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,131800,131801],{},"解决方案：",[19,131803,131804],{},"①可以为父亲元素定义上边距",[154,131806,131807],{"className":127917,"code":131753,"language":127919,"meta":160,"style":160},[70,131808,131809,131813,131819,131833],{"__ignoreMap":160},[178,131810,131811],{"class":180,"line":181},[178,131812,131760],{"class":2008},[178,131814,131815,131817],{"class":180,"line":263},[178,131816,131765],{"class":184},[178,131818,17330],{"class":319},[178,131820,131821,131823,131825,131827,131829,131831],{"class":180,"line":274},[178,131822,72190],{"class":195},[178,131824,53167],{"class":319},[178,131826,2133],{"class":195},[178,131828,53286],{"class":195},[178,131830,131780],{"class":319},[178,131832,131783],{"class":2008},[178,131834,131835],{"class":180,"line":354},[178,131836,3371],{"class":319},[19,131838,131839],{},"②可以为父亲元素定义上内边距",[19,131841,131842],{},"③可以为父亲元素添加overflow:hidden",[3269,131844],{"style":127773,"src":131845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[154,131847,131848],{"className":127917,"code":131753,"language":127919,"meta":160,"style":160},[70,131849,131850,131854,131860,131874],{"__ignoreMap":160},[178,131851,131852],{"class":180,"line":181},[178,131853,131760],{"class":2008},[178,131855,131856,131858],{"class":180,"line":263},[178,131857,131765],{"class":184},[178,131859,17330],{"class":319},[178,131861,131862,131864,131866,131868,131870,131872],{"class":180,"line":274},[178,131863,72190],{"class":195},[178,131865,53167],{"class":319},[178,131867,2133],{"class":195},[178,131869,53286],{"class":195},[178,131871,131780],{"class":319},[178,131873,131783],{"class":2008},[178,131875,131876],{"class":180,"line":354},[178,131877,3371],{"class":319},[3269,131879],{"style":127773,"src":131880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,131882,131883],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,131885,131886],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[387,131888,131890],{"id":131889},"_914-清除内外边距","9.1.4 清除内外边距",[19,131892,131893],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[154,131895,131896],{"className":127917,"code":131753,"language":127919,"meta":160,"style":160},[70,131897,131898,131902,131908,131922],{"__ignoreMap":160},[178,131899,131900],{"class":180,"line":181},[178,131901,131760],{"class":2008},[178,131903,131904,131906],{"class":180,"line":263},[178,131905,131765],{"class":184},[178,131907,17330],{"class":319},[178,131909,131910,131912,131914,131916,131918,131920],{"class":180,"line":274},[178,131911,72190],{"class":195},[178,131913,53167],{"class":319},[178,131915,2133],{"class":195},[178,131917,53286],{"class":195},[178,131919,131780],{"class":319},[178,131921,131783],{"class":2008},[178,131923,131924],{"class":180,"line":354},[178,131925,3371],{"class":319},[19,131927,131928],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[387,131930,131932],{"id":131931},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[2946,131934,131935,131938,131941,131944,131947,131950],{},[29,131936,131937],{},"文件→打开 ：可以打开我们要测量的图片",[29,131939,131940],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[29,131942,131943],{},"右击标尺，把里面的单位改为像素",[29,131945,131946],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[29,131948,131949],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[29,131951,131952],{},"用选区拖动 可以测量大小",[3269,131954],{"style":127773,"src":131955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[2946,131957,131958,131961],{},[29,131959,131960],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[29,131962,131963],{},"吸管取色工具",[3269,131965],{"style":127773,"src":131966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[387,131968,131970],{"id":131969},"_916-案例","9.1.6 案例",[26,131972,131973],{},[29,131974,131975],{},"小米商品",[3269,131977],{"style":127773,"src":131978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[154,131980,131981],{"className":127917,"code":131753,"language":127919,"meta":160,"style":160},[70,131982,131983,131987,131993,132007],{"__ignoreMap":160},[178,131984,131985],{"class":180,"line":181},[178,131986,131760],{"class":2008},[178,131988,131989,131991],{"class":180,"line":263},[178,131990,131765],{"class":184},[178,131992,17330],{"class":319},[178,131994,131995,131997,131999,132001,132003,132005],{"class":180,"line":274},[178,131996,72190],{"class":195},[178,131998,53167],{"class":319},[178,132000,2133],{"class":195},[178,132002,53286],{"class":195},[178,132004,131780],{"class":319},[178,132006,131783],{"class":2008},[178,132008,132009],{"class":180,"line":354},[178,132010,3371],{"class":319},[26,132012,132013],{"start":263},[29,132014,132015],{},"快报模块",[3269,132017],{"style":127773,"src":132018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[154,132020,132022],{"className":128664,"code":132021,"language":128666,"meta":160,"style":160},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[70,132023,132024,132029,132044,132049],{"__ignoreMap":160},[178,132025,132026],{"class":180,"line":181},[178,132027,132028],{"class":2008},"\u003C!-- HTML 代码示例 -->\n",[178,132030,132031,132033,132035,132037,132039,132042],{"class":180,"line":263},[178,132032,320],{"class":319},[178,132034,53341],{"class":323},[178,132036,55210],{"class":184},[178,132038,330],{"class":319},[178,132040,132041],{"class":188},"\"example\"",[178,132043,336],{"class":319},[178,132045,132046],{"class":180,"line":274},[178,132047,132048],{"class":319},"  示例内容\n",[178,132050,132051,132053,132055],{"class":180,"line":354},[178,132052,367],{"class":319},[178,132054,53341],{"class":323},[178,132056,336],{"class":319},[387,132058,132060],{"id":132059},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[26,132062,132063],{},[29,132064,132065],{},"圆角边框",[19,132067,132068],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[3269,132070],{"style":127773,"src":132071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[154,132073,132075],{"className":127917,"code":132074,"language":127919,"meta":160,"style":160},"div {\n  border: 1px solid #ccc;\n}\n",[70,132076,132077,132083,132099],{"__ignoreMap":160},[178,132078,132079,132081],{"class":180,"line":181},[178,132080,53341],{"class":323},[178,132082,17330],{"class":319},[178,132084,132085,132087,132089,132091,132093,132095,132097],{"class":180,"line":263},[178,132086,72616],{"class":195},[178,132088,53167],{"class":319},[178,132090,1665],{"class":195},[178,132092,53222],{"class":699},[178,132094,53251],{"class":195},[178,132096,131309],{"class":195},[178,132098,3100],{"class":319},[178,132100,132101],{"class":180,"line":274},[178,132102,3371],{"class":319},[19,132104,132105],{},"解释:",[2946,132107,132108,132111,132114,132117,132120],{},[29,132109,132110],{},"参数值可以为数值或百分比的形式",[29,132112,132113],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[29,132115,132116],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[29,132118,132119],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[29,132121,132122],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[26,132124,132125],{"start":263},[29,132126,132127],{},"盒子阴影",[154,132129,132131],{"className":127917,"code":132130,"language":127919,"meta":160,"style":160},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[70,132132,132133,132139,132176],{"__ignoreMap":160},[178,132134,132135,132137],{"class":180,"line":181},[178,132136,53341],{"class":323},[178,132138,17330],{"class":319},[178,132140,132141,132144,132146,132148,132150,132152,132154,132156,132158,132160,132162,132164,132166,132168,132170,132172,132174],{"class":180,"line":263},[178,132142,132143],{"class":195},"  box-shadow",[178,132145,53167],{"class":319},[178,132147,2133],{"class":195},[178,132149,16514],{"class":195},[178,132151,53222],{"class":699},[178,132153,3822],{"class":195},[178,132155,53222],{"class":699},[178,132157,1323],{"class":195},[178,132159,944],{"class":319},[178,132161,2133],{"class":195},[178,132163,14196],{"class":319},[178,132165,2133],{"class":195},[178,132167,14196],{"class":319},[178,132169,2133],{"class":195},[178,132171,14196],{"class":319},[178,132173,87925],{"class":195},[178,132175,4495],{"class":319},[178,132177,132178],{"class":180,"line":274},[178,132179,3371],{"class":319},[45,132181,132182,132190],{},[48,132183,132184],{},[51,132185,132186,132188],{},[54,132187,2096],{"align":56},[54,132189,29238],{"align":56},[62,132191,132192,132200,132208,132216,132224,132232],{},[51,132193,132194,132197],{},[67,132195,132196],{"align":56},"h-shadow",[67,132198,132199],{"align":56},"必需,水平阴影的位置,允许负值",[51,132201,132202,132205],{},[67,132203,132204],{"align":56},"v-shadow",[67,132206,132207],{"align":56},"必需,垂直阴影的位置,允许负值",[51,132209,132210,132213],{},[67,132211,132212],{"align":56},"blur",[67,132214,132215],{"align":56},"可选,模糊距离,就是影子的虚实",[51,132217,132218,132221],{},[67,132219,132220],{"align":56},"spread",[67,132222,132223],{"align":56},"可选,阴影尺寸",[51,132225,132226,132229],{},[67,132227,132228],{"align":56},"color",[67,132230,132231],{"align":56},"可选,阴影的颜色",[51,132233,132234,132237],{},[67,132235,132236],{"align":56},"inset",[67,132238,132239],{"align":56},"可选,将外部阴影(outset)改为内部阴影",[26,132241,132242],{"start":274},[29,132243,132244],{},"文字阴影",[154,132246,132248],{"className":127917,"code":132247,"language":127919,"meta":160,"style":160},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[70,132249,132250,132256,132295],{"__ignoreMap":160},[178,132251,132252,132254],{"class":180,"line":181},[178,132253,19],{"class":323},[178,132255,17330],{"class":319},[178,132257,132258,132261,132263,132265,132267,132269,132271,132273,132275,132277,132279,132281,132283,132285,132287,132289,132291,132293],{"class":180,"line":263},[178,132259,132260],{"class":195},"  text-shadow",[178,132262,53167],{"class":319},[178,132264,1665],{"class":195},[178,132266,53222],{"class":699},[178,132268,26870],{"class":195},[178,132270,53222],{"class":699},[178,132272,16514],{"class":195},[178,132274,53222],{"class":699},[178,132276,1323],{"class":195},[178,132278,944],{"class":319},[178,132280,2133],{"class":195},[178,132282,14196],{"class":319},[178,132284,2133],{"class":195},[178,132286,14196],{"class":319},[178,132288,2133],{"class":195},[178,132290,14196],{"class":319},[178,132292,102234],{"class":195},[178,132294,4495],{"class":319},[178,132296,132297],{"class":180,"line":274},[178,132298,3371],{"class":319},[45,132300,132301,132309],{},[48,132302,132303],{},[51,132304,132305,132307],{},[54,132306,2096],{"align":56},[54,132308,29238],{"align":56},[62,132310,132311,132317,132324,132331],{},[51,132312,132313,132315],{},[67,132314,132196],{"align":56},[67,132316,132199],{"align":56},[51,132318,132319,132321],{},[67,132320,132204],{"align":56},[67,132322,132323],{"align":56},"必需,垂直阴影位置,允许负值",[51,132325,132326,132328],{},[67,132327,132212],{"align":56},[67,132329,132330],{"align":56},"可选,模糊的距离",[51,132332,132333,132335],{},[67,132334,132228],{"align":56},[67,132336,132231],{"align":56},[14,132338,132340],{"id":132339},"_92-浮动","9.2 浮动",[387,132342,132344],{"id":132343},"_921-浮动介绍","9.2.1 浮动介绍",[19,132346,132347],{},"在16.2中详细介绍",[387,132349,132351],{"id":132350},"_922-清除浮动","9.2.2 清除浮动",[26,132353,132354,132357],{},[29,132355,132356],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[29,132358,132359],{},"清除浮动的本质",[19,132361,132362],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,132364,10786],{},[2946,132366,132367,132370,132373],{},[29,132368,132369],{},"如果父盒子本身有高度，则不需要清除浮动",[29,132371,132372],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[29,132374,132375],{},"父级有了高度，就不会影响下面的标准流了",[26,132377,132378],{"start":274},[29,132379,132380],{},"清除浮动样式",[154,132382,132384],{"className":127917,"code":132383,"language":127919,"meta":160,"style":160},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[70,132385,132386,132393,132404,132408,132415,132425],{"__ignoreMap":160},[178,132387,132388,132391],{"class":180,"line":181},[178,132389,132390],{"class":184},".left",[178,132392,17330],{"class":319},[178,132394,132395,132398,132400,132402],{"class":180,"line":263},[178,132396,132397],{"class":195},"  float",[178,132399,53167],{"class":319},[178,132401,56],{"class":195},[178,132403,3100],{"class":319},[178,132405,132406],{"class":180,"line":274},[178,132407,3371],{"class":319},[178,132409,132410,132413],{"class":180,"line":354},[178,132411,132412],{"class":184},".right",[178,132414,17330],{"class":319},[178,132416,132417,132419,132421,132423],{"class":180,"line":364},[178,132418,132397],{"class":195},[178,132420,53167],{"class":319},[178,132422,74242],{"class":195},[178,132424,3100],{"class":319},[178,132426,132427],{"class":180,"line":740},[178,132428,3371],{"class":319},[45,132430,132431,132439],{},[48,132432,132433],{},[51,132434,132435,132437],{},[54,132436,128381],{"align":56},[54,132438,29238],{"align":56},[62,132440,132441,132448,132455],{},[51,132442,132443,132445],{},[67,132444,56],{"align":56},[67,132446,132447],{"align":56},"不允许左侧有浮动元素（清除左侧浮动的影响）",[51,132449,132450,132452],{},[67,132451,74242],{"align":56},[67,132453,132454],{"align":56},"不允许右侧有浮动元素（清除右侧浮动的影响）",[51,132456,132457,132460],{},[67,132458,132459],{"align":56},"both",[67,132461,132462],{"align":56},"同时清除左右侧浮动的影响",[19,132464,132465],{},"法一",[19,132467,132468],{},"额外标签法也称为隔墙法",[19,132470,132471],{},"使用方式：",[19,132473,132474],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[154,132476,132477],{"className":127917,"code":132383,"language":127919,"meta":160,"style":160},[70,132478,132479,132485,132495,132499,132505,132515],{"__ignoreMap":160},[178,132480,132481,132483],{"class":180,"line":181},[178,132482,132390],{"class":184},[178,132484,17330],{"class":319},[178,132486,132487,132489,132491,132493],{"class":180,"line":263},[178,132488,132397],{"class":195},[178,132490,53167],{"class":319},[178,132492,56],{"class":195},[178,132494,3100],{"class":319},[178,132496,132497],{"class":180,"line":274},[178,132498,3371],{"class":319},[178,132500,132501,132503],{"class":180,"line":354},[178,132502,132412],{"class":184},[178,132504,17330],{"class":319},[178,132506,132507,132509,132511,132513],{"class":180,"line":364},[178,132508,132397],{"class":195},[178,132510,53167],{"class":319},[178,132512,74242],{"class":195},[178,132514,3100],{"class":319},[178,132516,132517],{"class":180,"line":740},[178,132518,3371],{"class":319},[19,132520,132521],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,132523,132524],{},"优点： 通俗易懂，书写方便",[19,132526,132527],{},"缺点： 添加许多无意义的标签，结构化较差",[19,132529,132530],{},"注意： 要求这个新的空标签必须是块级元素。",[19,132532,132533],{},"法二",[19,132535,132536],{},"父级添加overflow属性",[154,132538,132539],{"className":127917,"code":132383,"language":127919,"meta":160,"style":160},[70,132540,132541,132547,132557,132561,132567,132577],{"__ignoreMap":160},[178,132542,132543,132545],{"class":180,"line":181},[178,132544,132390],{"class":184},[178,132546,17330],{"class":319},[178,132548,132549,132551,132553,132555],{"class":180,"line":263},[178,132550,132397],{"class":195},[178,132552,53167],{"class":319},[178,132554,56],{"class":195},[178,132556,3100],{"class":319},[178,132558,132559],{"class":180,"line":274},[178,132560,3371],{"class":319},[178,132562,132563,132565],{"class":180,"line":354},[178,132564,132412],{"class":184},[178,132566,17330],{"class":319},[178,132568,132569,132571,132573,132575],{"class":180,"line":364},[178,132570,132397],{"class":195},[178,132572,53167],{"class":319},[178,132574,74242],{"class":195},[178,132576,3100],{"class":319},[178,132578,132579],{"class":180,"line":740},[178,132580,3371],{"class":319},[19,132582,132583],{},"overflow: hidden;",[19,132585,132586],{},"优点：代码简洁",[19,132588,132589],{},"缺点：无法显示溢出的部分",[19,132591,132592],{},"注意：是给父元素添加代码",[19,132594,132595],{},"法三",[19,132597,132598],{},"父级添加after伪元素",[19,132600,132601,132604],{},[132602,132603],"after",{}," 方式是额外标签法的升级版",[19,132606,132607],{},"使用的时候复制就可以",[154,132609,132610],{"className":127917,"code":132383,"language":127919,"meta":160,"style":160},[70,132611,132612,132618,132628,132632,132638,132648],{"__ignoreMap":160},[178,132613,132614,132616],{"class":180,"line":181},[178,132615,132390],{"class":184},[178,132617,17330],{"class":319},[178,132619,132620,132622,132624,132626],{"class":180,"line":263},[178,132621,132397],{"class":195},[178,132623,53167],{"class":319},[178,132625,56],{"class":195},[178,132627,3100],{"class":319},[178,132629,132630],{"class":180,"line":274},[178,132631,3371],{"class":319},[178,132633,132634,132636],{"class":180,"line":354},[178,132635,132412],{"class":184},[178,132637,17330],{"class":319},[178,132639,132640,132642,132644,132646],{"class":180,"line":364},[178,132641,132397],{"class":195},[178,132643,53167],{"class":319},[178,132645,74242],{"class":195},[178,132647,3100],{"class":319},[178,132649,132650],{"class":180,"line":740},[178,132651,3371],{"class":319},[19,132653,132654],{},"优点：没有增加标签，结构更简单",[19,132656,132657],{},"缺点：照顾低版本浏览器",[19,132659,132660],{},"代表网站： 百度、淘宝网、网易等",[19,132662,132663],{},"法四",[19,132665,132666],{},"父级添加双伪元素",[154,132668,132669],{"className":127917,"code":132383,"language":127919,"meta":160,"style":160},[70,132670,132671,132677,132687,132691,132697,132707],{"__ignoreMap":160},[178,132672,132673,132675],{"class":180,"line":181},[178,132674,132390],{"class":184},[178,132676,17330],{"class":319},[178,132678,132679,132681,132683,132685],{"class":180,"line":263},[178,132680,132397],{"class":195},[178,132682,53167],{"class":319},[178,132684,56],{"class":195},[178,132686,3100],{"class":319},[178,132688,132689],{"class":180,"line":274},[178,132690,3371],{"class":319},[178,132692,132693,132695],{"class":180,"line":354},[178,132694,132412],{"class":184},[178,132696,17330],{"class":319},[178,132698,132699,132701,132703,132705],{"class":180,"line":364},[178,132700,132397],{"class":195},[178,132702,53167],{"class":319},[178,132704,74242],{"class":195},[178,132706,3100],{"class":319},[178,132708,132709],{"class":180,"line":740},[178,132710,3371],{"class":319},[19,132712,132713],{},"优点：代码更简洁",[19,132715,132657],{},[19,132717,132718],{},"代表网站：小米、腾讯等",[14,132720,132722],{"id":132721},"_93-ps切图","9.3 PS切图",[387,132724,132726],{"id":132725},"_931-常见图片格式","9.3.1 常见图片格式",[45,132728,132729,132739],{},[48,132730,132731],{},[51,132732,132733,132736],{},[54,132734,132735],{"align":56},"jpg图像格式",[54,132737,132738],{"align":56},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[62,132740,132741,132749,132757],{},[51,132742,132743,132746],{},[67,132744,132745],{"align":56},"gif图像格式",[67,132747,132748],{"align":56},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[51,132750,132751,132754],{},[67,132752,132753],{"align":56},"png图像格式",[67,132755,132756],{"align":56},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[51,132758,132759,132762],{},[67,132760,132761],{"align":56},"PSD图像格式",[67,132763,132764],{"align":56},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[387,132766,132768],{"id":132767},"_932-图层切图","9.3.2 图层切图",[19,132770,132771],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,132773,132774],{},"按住shift选中两个图层->图层菜单->合并图层",[387,132776,132778],{"id":132777},"_933-切片切图","9.3.3 切片切图",[2946,132780,132781,132784],{},[29,132782,132783],{},"利用切片工具手动划出",[29,132785,132786],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[387,132788,132790],{"id":132789},"_934-切图步骤","9.3.4 切图步骤",[19,132792,132793],{},"用切片工具选中：",[3269,132795],{"style":127773,"src":132796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,132798,132799],{},"文件 -> 导出",[3269,132801],{"style":127773,"src":132802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[1853,132804,132805],{},"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":160,"searchDepth":263,"depth":263,"links":132807},[132808,132817,132821],{"id":131244,"depth":263,"text":131245,"children":132809},[132810,132811,132812,132813,132814,132815,132816],{"id":131269,"depth":274,"text":131270},{"id":131560,"depth":274,"text":131561},{"id":131689,"depth":274,"text":131690},{"id":131889,"depth":274,"text":131890},{"id":131931,"depth":274,"text":131932},{"id":131969,"depth":274,"text":131970},{"id":132059,"depth":274,"text":132060},{"id":132339,"depth":263,"text":132340,"children":132818},[132819,132820],{"id":132343,"depth":274,"text":132344},{"id":132350,"depth":274,"text":132351},{"id":132721,"depth":263,"text":132722,"children":132822},[132823,132824,132825,132826],{"id":132725,"depth":274,"text":132726},{"id":132767,"depth":274,"text":132768},{"id":132777,"depth":274,"text":132778},{"id":132789,"depth":274,"text":132790},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131236,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":132833,"title":132834,"body":132835,"description":25135,"extension":1880,"meta":133476,"navigation":721,"path":133477,"seo":133478,"stem":133479,"__hash__":133480},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":132836,"toc":133464},[132837,132840,132844,132870,132904,132908,132912,132915,132957,132964,132974,132982,132984,132987,132990,132993,133000,133014,133018,133021,133050,133054,133057,133071,133075,133078,133106,133110,133113,133139,133143,133148,133181,133186,133214,133218,133235,133281,133286,133330,133347,133454,133462],[10,132838,132834],{"id":132839},"_10-css规范与学成在线案例",[14,132841,132843],{"id":132842},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[26,132845,132846,132852,132858,132864],{},[29,132847,132848,132851],{},[2093,132849,132850],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[29,132853,132854,132857],{},[2093,132855,132856],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[29,132859,132860,132863],{},[2093,132861,132862],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[29,132865,132866,132869],{},[2093,132867,132868],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[154,132871,132872],{"className":127917,"code":131281,"language":127919,"meta":160,"style":160},[70,132873,132874,132878,132884,132900],{"__ignoreMap":160},[178,132875,132876],{"class":180,"line":181},[178,132877,131288],{"class":2008},[178,132879,132880,132882],{"class":180,"line":263},[178,132881,53341],{"class":323},[178,132883,17330],{"class":319},[178,132885,132886,132888,132890,132892,132894,132896,132898],{"class":180,"line":274},[178,132887,72616],{"class":195},[178,132889,53167],{"class":319},[178,132891,1665],{"class":195},[178,132893,53222],{"class":699},[178,132895,53251],{"class":195},[178,132897,131309],{"class":195},[178,132899,3100],{"class":319},[178,132901,132902],{"class":180,"line":354},[178,132903,3371],{"class":319},[14,132905,132907],{"id":132906},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[387,132909,132911],{"id":132910},"_1021-header头部制作","10.2.1 header头部制作",[3269,132913],{"style":127773,"src":132914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[2946,132916,132917,132924,132931,132937,132944,132951],{},[29,132918,132919,132920,132923],{},"1号是版心盒子 ",[2093,132921,132922],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[29,132925,132926,132927,132930],{},"版心盒子 里面包含 2号盒子 ",[2093,132928,132929],{},"logo"," 图标",[29,132932,132933,132934,132936],{},"版心盒子 里面包含 3号盒子 ",[2093,132935,55436],{}," 导航栏",[29,132938,132939,132940,132943],{},"版心盒子 里面包含 4号盒子 ",[2093,132941,132942],{},"search"," 搜索框",[29,132945,132946,132947,132950],{},"版心盒子 里面包含 5号盒子 ",[2093,132948,132949],{},"user"," 个人信息",[29,132952,132953,132954],{},"注意，要求里面的 ",[2093,132955,132956],{},"4个子盒子 必须都浮动",[26,132958,132959],{},[29,132960,132961],{},[2093,132962,132963],{},"导航栏注意点:",[19,132965,132966,132967,132970,132971],{},"实际开发中， ",[2093,132968,132969],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[2093,132972,132973],{},"用 li 包含链接(li+a)的做法",[2946,132975,132976,132979],{},[29,132977,132978],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[29,132980,132981],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,132983,10786],{},[19,132985,132986],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,132988,132989],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,132991,132992],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[26,132994,132995],{"start":263},[29,132996,132997],{},[2093,132998,132999],{},"4号盒子search的细节：",[2946,133001,133002,133005,133008],{},[29,133003,133004],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[29,133006,133007],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[29,133009,133010,133013],{},[70,133011,133012],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[387,133015,133017],{"id":133016},"_1022-banner制作","10.2.2 banner制作",[3269,133019],{"style":127773,"src":133020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[2946,133022,133023,133030,133036,133043],{},[29,133024,133025,133026,133029],{},"1号盒子是通栏的大盒子 ",[2093,133027,133028],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[29,133031,133032,133033,133035],{},"2号盒子是版心 ",[2093,133034,2735],{}," ， 要水平居中对齐",[29,133037,133038,133039,133042],{},"3号盒子版心内，左对齐 ",[2093,133040,133041],{},"subnav"," 侧导航栏",[29,133044,133045,133046,133049],{},"4号盒子版心内，右对齐 ",[2093,133047,133048],{},"course"," 课程",[387,133051,133053],{"id":133052},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[3269,133055],{"style":127773,"src":133056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[2946,133058,133059,133062,133065,133068],{},[29,133060,133061],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[29,133063,133064],{},"1号盒子是标题 H3 左侧浮动",[29,133066,133067],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[29,133069,133070],{},"3号盒子 右浮动 mod 修改",[387,133072,133074],{"id":133073},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[3269,133076],{"style":127773,"src":133077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[2946,133079,133080,133086,133093,133100,133103],{},[29,133081,133082,133083,133085],{},"1号盒子为最大的盒子 ",[2093,133084,500],{}," 版心水平居中对齐",[29,133087,133088,133089,133092],{},"2号盒子为上面部分 ",[2093,133090,133091],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[29,133094,133095,133096,133099],{},"3号盒子为底下部分 ",[2093,133097,133098],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[29,133101,133102],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[29,133104,133105],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[387,133107,133109],{"id":133108},"_1025-底部模块制作","10.2.5 底部模块制作",[3269,133111],{"style":127773,"src":133112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[2946,133114,133115,133122,133125,133132],{},[29,133116,133117,133118,133121],{},"1号盒子通栏大盒子 底部 ",[2093,133119,133120],{},"footer"," 给高度 底色是白色",[29,133123,133124],{},"2号盒子版心水平居中",[29,133126,133127,133128,133131],{},"3号盒子版权 ",[2093,133129,133130],{},"copyright"," 左对齐",[29,133133,133134,133135,133138],{},"4号盒子 链接组 ",[2093,133136,133137],{},"links"," 右对齐",[387,133140,133142],{"id":133141},"_1026-代码模块","10.2.6 代码模块",[26,133144,133145],{},[29,133146,133147],{},"html部分",[154,133149,133151],{"className":128664,"code":133150,"language":128666,"meta":160,"style":160},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[70,133152,133153],{"__ignoreMap":160},[178,133154,133155,133157,133159,133161,133163,133166,133169,133171,133174,133177,133179],{"class":180,"line":181},[178,133156,320],{"class":319},[178,133158,2178],{"class":323},[178,133160,62778],{"class":184},[178,133162,330],{"class":319},[178,133164,133165],{"class":188},"\"https:\u002F\u002Fexample.com\"",[178,133167,133168],{"class":184}," target",[178,133170,330],{"class":319},[178,133172,133173],{"class":188},"\"_blank\"",[178,133175,133176],{"class":319},">链接文字\u003C\u002F",[178,133178,2178],{"class":323},[178,133180,336],{"class":319},[26,133182,133183],{"start":263},[29,133184,133185],{},"css部分",[154,133187,133188],{"className":128664,"code":133150,"language":128666,"meta":160,"style":160},[70,133189,133190],{"__ignoreMap":160},[178,133191,133192,133194,133196,133198,133200,133202,133204,133206,133208,133210,133212],{"class":180,"line":181},[178,133193,320],{"class":319},[178,133195,2178],{"class":323},[178,133197,62778],{"class":184},[178,133199,330],{"class":319},[178,133201,133165],{"class":188},[178,133203,133168],{"class":184},[178,133205,330],{"class":319},[178,133207,133173],{"class":188},[178,133209,133176],{"class":319},[178,133211,2178],{"class":323},[178,133213,336],{"class":319},[387,133215,133217],{"id":133216},"_1027-收获","10.2.7 收获",[26,133219,133220,133223,133226,133229,133232],{},[29,133221,133222],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[29,133224,133225],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[29,133227,133228],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[29,133230,133231],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[29,133233,133234],{},"遗忘代码",[154,133236,133238],{"className":127917,"code":133237,"language":127919,"meta":160,"style":160},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[70,133239,133240,133262,133267,133277],{"__ignoreMap":160},[178,133241,133242,133244,133246,133248,133250,133252,133254,133256,133258,133260],{"class":180,"line":181},[178,133243,53341],{"class":323},[178,133245,14196],{"class":319},[178,133247,19],{"class":323},[178,133249,14196],{"class":319},[178,133251,10],{"class":323},[178,133253,14196],{"class":319},[178,133255,2946],{"class":323},[178,133257,14196],{"class":319},[178,133259,29],{"class":323},[178,133261,17330],{"class":319},[178,133263,133264],{"class":180,"line":263},[178,133265,133266],{"class":2008},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[178,133268,133269,133271,133273,133275],{"class":180,"line":274},[178,133270,129533],{"class":195},[178,133272,53167],{"class":319},[178,133274,62590],{"class":195},[178,133276,3100],{"class":319},[178,133278,133279],{"class":180,"line":354},[178,133280,3371],{"class":319},[26,133282,133283],{"start":740},[29,133284,133285],{},"html引css的程序",[154,133287,133288],{"className":127917,"code":133237,"language":127919,"meta":160,"style":160},[70,133289,133290,133312,133316,133326],{"__ignoreMap":160},[178,133291,133292,133294,133296,133298,133300,133302,133304,133306,133308,133310],{"class":180,"line":181},[178,133293,53341],{"class":323},[178,133295,14196],{"class":319},[178,133297,19],{"class":323},[178,133299,14196],{"class":319},[178,133301,10],{"class":323},[178,133303,14196],{"class":319},[178,133305,2946],{"class":323},[178,133307,14196],{"class":319},[178,133309,29],{"class":323},[178,133311,17330],{"class":319},[178,133313,133314],{"class":180,"line":263},[178,133315,133266],{"class":2008},[178,133317,133318,133320,133322,133324],{"class":180,"line":274},[178,133319,129533],{"class":195},[178,133321,53167],{"class":319},[178,133323,62590],{"class":195},[178,133325,3100],{"class":319},[178,133327,133328],{"class":180,"line":354},[178,133329,3371],{"class":319},[26,133331,133332,133335,133338,133341,133344],{"start":746},[29,133333,133334],{},"浮动的盒子不会有外边距合并问题",[29,133336,133337],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[29,133339,133340],{},"ctrl+g快速定位行；shift+alt多个光标",[29,133342,133343],{},"学习上方各个模块的选择器起名方法，以后就这样用",[29,133345,133346],{},"在写选择器时尽量写全一些，例如",[154,133348,133350],{"className":127917,"code":133349,"language":127919,"meta":160,"style":160},"\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",[70,133351,133352,133357,133373,133378,133393,133398,133413,133418,133433,133438],{"__ignoreMap":160},[178,133353,133354],{"class":180,"line":181},[178,133355,133356],{"class":2008},"\u002F* 静态定位（默认） *\u002F\n",[178,133358,133359,133362,133364,133366,133368,133371],{"class":180,"line":263},[178,133360,133361],{"class":184},".static",[178,133363,81526],{"class":319},[178,133365,130277],{"class":195},[178,133367,53167],{"class":319},[178,133369,133370],{"class":195},"static",[178,133372,130847],{"class":319},[178,133374,133375],{"class":180,"line":274},[178,133376,133377],{"class":2008},"\u002F* 相对定位 *\u002F\n",[178,133379,133380,133383,133385,133387,133389,133391],{"class":180,"line":354},[178,133381,133382],{"class":184},".relative",[178,133384,81526],{"class":319},[178,133386,130277],{"class":195},[178,133388,53167],{"class":319},[178,133390,56485],{"class":195},[178,133392,130847],{"class":319},[178,133394,133395],{"class":180,"line":364},[178,133396,133397],{"class":2008},"\u002F* 绝对定位 *\u002F\n",[178,133399,133400,133403,133405,133407,133409,133411],{"class":180,"line":740},[178,133401,133402],{"class":184},".absolute",[178,133404,81526],{"class":319},[178,133406,130277],{"class":195},[178,133408,53167],{"class":319},[178,133410,56552],{"class":195},[178,133412,130847],{"class":319},[178,133414,133415],{"class":180,"line":746},[178,133416,133417],{"class":2008},"\u002F* 固定定位 *\u002F\n",[178,133419,133420,133423,133425,133427,133429,133431],{"class":180,"line":752},[178,133421,133422],{"class":184},".fixed",[178,133424,81526],{"class":319},[178,133426,130277],{"class":195},[178,133428,53167],{"class":319},[178,133430,87948],{"class":195},[178,133432,130847],{"class":319},[178,133434,133435],{"class":180,"line":757},[178,133436,133437],{"class":2008},"\u002F* 粘性定位 *\u002F\n",[178,133439,133440,133443,133445,133447,133449,133452],{"class":180,"line":763},[178,133441,133442],{"class":184},".sticky",[178,133444,81526],{"class":319},[178,133446,130277],{"class":195},[178,133448,53167],{"class":319},[178,133450,133451],{"class":195},"sticky",[178,133453,130847],{"class":319},[26,133455,133456,133459],{"start":774},[29,133457,133458],{},"一定要用好注释",[29,133460,133461],{},"浮动的盒子不会有外边距合并的问题",[1853,133463,132805],{},{"title":160,"searchDepth":263,"depth":263,"links":133465},[133466,133467],{"id":132842,"depth":263,"text":132843},{"id":132906,"depth":263,"text":132907,"children":133468},[133469,133470,133471,133472,133473,133474,133475],{"id":132910,"depth":274,"text":132911},{"id":133016,"depth":274,"text":133017},{"id":133052,"depth":274,"text":133053},{"id":133073,"depth":274,"text":133074},{"id":133108,"depth":274,"text":133109},{"id":133141,"depth":274,"text":133142},{"id":133216,"depth":274,"text":133217},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":132834,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133482,"title":133483,"body":133484,"description":25135,"extension":1880,"meta":134970,"navigation":721,"path":134971,"seo":134972,"stem":134973,"__hash__":134974},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133485,"toc":134962},[133486,133489,133493,133497,133508,133512,133529,133573,133606,133609,133626,133629,133632,133676,133680,133684,133687,133690,133694,133697,133708,133771,133812,133815,133830,133884,133892,133895,133906,133960,133986,133989,134002,134056,134088,134142,134165,134219,134222,134225,134232,134286,134307,134361,134364,134367,134452,134460,134517,134540,134544,134547,134565,134569,134588,134642,134680,134684,134687,134690,134712,134716,134724,134727,134732,134743,134746,134750,134764,134808,134811,134815,134818,134823,134849,134854,134931,134934,134938,134941,134944,134947,134950,134953,134956,134959],[10,133487,133483],{"id":133488},"_11-传统布局与定位体系",[14,133490,133492],{"id":133491},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[387,133494,133496],{"id":133495},"_1111-普通流标准流","11.1.1 普通流（标准流）",[2946,133498,133499,133502,133505],{},[29,133500,133501],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[29,133503,133504],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[29,133506,133507],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[387,133509,133511],{"id":133510},"_1112-浮动","11.1.2 浮动",[2946,133513,133514,133517,133520,133523,133526],{},[29,133515,133516],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[29,133518,133519],{},"浮动可以改变元素标签默认的排列方式",[29,133521,133522],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[29,133524,133525],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[29,133527,133528],{},"在使用行内块转换时盒子之间是有空隙的",[154,133530,133531],{"className":127917,"code":132383,"language":127919,"meta":160,"style":160},[70,133532,133533,133539,133549,133553,133559,133569],{"__ignoreMap":160},[178,133534,133535,133537],{"class":180,"line":181},[178,133536,132390],{"class":184},[178,133538,17330],{"class":319},[178,133540,133541,133543,133545,133547],{"class":180,"line":263},[178,133542,132397],{"class":195},[178,133544,53167],{"class":319},[178,133546,56],{"class":195},[178,133548,3100],{"class":319},[178,133550,133551],{"class":180,"line":274},[178,133552,3371],{"class":319},[178,133554,133555,133557],{"class":180,"line":354},[178,133556,132412],{"class":184},[178,133558,17330],{"class":319},[178,133560,133561,133563,133565,133567],{"class":180,"line":364},[178,133562,132397],{"class":195},[178,133564,53167],{"class":319},[178,133566,74242],{"class":195},[178,133568,3100],{"class":319},[178,133570,133571],{"class":180,"line":740},[178,133572,3371],{"class":319},[45,133574,133575,133583],{},[48,133576,133577],{},[51,133578,133579,133581],{},[54,133580,128381],{"align":56},[54,133582,29238],{"align":56},[62,133584,133585,133592,133599],{},[51,133586,133587,133589],{},[67,133588,56458],{"align":56},[67,133590,133591],{"align":56},"元素不浮动（默认值）",[51,133593,133594,133596],{},[67,133595,56],{"align":56},[67,133597,133598],{"align":56},"元素向左浮动",[51,133600,133601,133603],{},[67,133602,74242],{"align":56},[67,133604,133605],{"align":56},"元素向右浮动",[19,133607,133608],{},"浮动重点：",[2946,133610,133611,133614,133617,133620,133623],{},[29,133612,133613],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[29,133615,133616],{},"浮动的元素会一行内显示并且元素顶部对齐",[29,133618,133619],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[29,133621,133622],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[29,133624,133625],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,133627,133628],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,133630,133631],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[154,133633,133634],{"className":127917,"code":132383,"language":127919,"meta":160,"style":160},[70,133635,133636,133642,133652,133656,133662,133672],{"__ignoreMap":160},[178,133637,133638,133640],{"class":180,"line":181},[178,133639,132390],{"class":184},[178,133641,17330],{"class":319},[178,133643,133644,133646,133648,133650],{"class":180,"line":263},[178,133645,132397],{"class":195},[178,133647,53167],{"class":319},[178,133649,56],{"class":195},[178,133651,3100],{"class":319},[178,133653,133654],{"class":180,"line":274},[178,133655,3371],{"class":319},[178,133657,133658,133660],{"class":180,"line":354},[178,133659,132412],{"class":184},[178,133661,17330],{"class":319},[178,133663,133664,133666,133668,133670],{"class":180,"line":364},[178,133665,132397],{"class":195},[178,133667,53167],{"class":319},[178,133669,74242],{"class":195},[178,133671,3100],{"class":319},[178,133673,133674],{"class":180,"line":740},[178,133675,3371],{"class":319},[387,133677,133679],{"id":133678},"_1113-定位","11.1.3 定位",[23756,133681,133683],{"id":133682},"_11131-使用场景","11.1.3.1 使用场景",[19,133685,133686],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,133688,133689],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[23756,133691,133693],{"id":133692},"_11132-定位组成","11.1.3.2 定位组成",[19,133695,133696],{},"定位 = 定位模式 + 边偏移",[26,133698,133699],{},[29,133700,133701,133704,133705],{},[2093,133702,133703],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[2093,133706,133707],{},"定位模式",[154,133709,133711],{"className":127917,"code":133710,"language":127919,"meta":160,"style":160},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[70,133712,133713,133719,133733,133750,133767],{"__ignoreMap":160},[178,133714,133715,133717],{"class":180,"line":181},[178,133716,131765],{"class":184},[178,133718,17330],{"class":319},[178,133720,133721,133724,133726,133728,133730],{"class":180,"line":263},[178,133722,133723],{"class":195},"  position",[178,133725,53167],{"class":319},[178,133727,56485],{"class":195},[178,133729,131780],{"class":319},[178,133731,133732],{"class":2008},"\u002F* 定位模式 *\u002F\n",[178,133734,133735,133738,133740,133742,133744,133747],{"class":180,"line":274},[178,133736,133737],{"class":195},"  top",[178,133739,53167],{"class":319},[178,133741,2386],{"class":195},[178,133743,53222],{"class":699},[178,133745,133746],{"class":319},";           ",[178,133748,133749],{"class":2008},"\u002F* 边偏移：上 *\u002F\n",[178,133751,133752,133755,133757,133759,133761,133764],{"class":180,"line":354},[178,133753,133754],{"class":195},"  left",[178,133756,53167],{"class":319},[178,133758,2640],{"class":195},[178,133760,53222],{"class":699},[178,133762,133763],{"class":319},";          ",[178,133765,133766],{"class":2008},"\u002F* 边偏移：左 *\u002F\n",[178,133768,133769],{"class":180,"line":364},[178,133770,3371],{"class":319},[45,133772,133773,133782],{},[48,133774,133775],{},[51,133776,133777,133779],{},[54,133778,2096],{"align":56},[54,133780,133781],{"align":56},"语义",[62,133783,133784,133791,133798,133805],{},[51,133785,133786,133788],{},[67,133787,133370],{"align":56},[67,133789,133790],{"align":56},"静态定位",[51,133792,133793,133795],{},[67,133794,56485],{"align":56},[67,133796,133797],{"align":56},"相对定位",[51,133799,133800,133802],{},[67,133801,56552],{"align":56},[67,133803,133804],{"align":56},"绝对定位",[51,133806,133807,133809],{},[67,133808,87948],{"align":56},[67,133810,133811],{"align":56},"固定定位",[19,133813,133814],{},"（1）静态定位：",[2946,133816,133817,133828],{},[29,133818,133819,133820,133823,133824,133827],{},"静态定位是元素的 ",[2093,133821,133822],{},"默认定位方式"," ， ",[2093,133825,133826],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[29,133829,6952],{},[154,133831,133832],{"className":127917,"code":133710,"language":127919,"meta":160,"style":160},[70,133833,133834,133840,133852,133866,133880],{"__ignoreMap":160},[178,133835,133836,133838],{"class":180,"line":181},[178,133837,131765],{"class":184},[178,133839,17330],{"class":319},[178,133841,133842,133844,133846,133848,133850],{"class":180,"line":263},[178,133843,133723],{"class":195},[178,133845,53167],{"class":319},[178,133847,56485],{"class":195},[178,133849,131780],{"class":319},[178,133851,133732],{"class":2008},[178,133853,133854,133856,133858,133860,133862,133864],{"class":180,"line":274},[178,133855,133737],{"class":195},[178,133857,53167],{"class":319},[178,133859,2386],{"class":195},[178,133861,53222],{"class":699},[178,133863,133746],{"class":319},[178,133865,133749],{"class":2008},[178,133867,133868,133870,133872,133874,133876,133878],{"class":180,"line":354},[178,133869,133754],{"class":195},[178,133871,53167],{"class":319},[178,133873,2640],{"class":195},[178,133875,53222],{"class":699},[178,133877,133763],{"class":319},[178,133879,133766],{"class":2008},[178,133881,133882],{"class":180,"line":364},[178,133883,3371],{"class":319},[2946,133885,133886,133889],{},[29,133887,133888],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[29,133890,133891],{},"静态定位在布局时我们几乎不用的",[19,133893,133894],{},"（2）相对定位",[2946,133896,133897,133904],{},[29,133898,133899,133900,133903],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[2093,133901,133902],{},"原来的位置"," 来说的（自恋型）",[29,133905,6952],{},[154,133907,133908],{"className":127917,"code":133710,"language":127919,"meta":160,"style":160},[70,133909,133910,133916,133928,133942,133956],{"__ignoreMap":160},[178,133911,133912,133914],{"class":180,"line":181},[178,133913,131765],{"class":184},[178,133915,17330],{"class":319},[178,133917,133918,133920,133922,133924,133926],{"class":180,"line":263},[178,133919,133723],{"class":195},[178,133921,53167],{"class":319},[178,133923,56485],{"class":195},[178,133925,131780],{"class":319},[178,133927,133732],{"class":2008},[178,133929,133930,133932,133934,133936,133938,133940],{"class":180,"line":274},[178,133931,133737],{"class":195},[178,133933,53167],{"class":319},[178,133935,2386],{"class":195},[178,133937,53222],{"class":699},[178,133939,133746],{"class":319},[178,133941,133749],{"class":2008},[178,133943,133944,133946,133948,133950,133952,133954],{"class":180,"line":354},[178,133945,133754],{"class":195},[178,133947,53167],{"class":319},[178,133949,2640],{"class":195},[178,133951,53222],{"class":699},[178,133953,133763],{"class":319},[178,133955,133766],{"class":2008},[178,133957,133958],{"class":180,"line":364},[178,133959,3371],{"class":319},[2946,133961,133962],{},[29,133963,133964,133965,133967,133968,133970,133971,133974,133975,133978,133979,133981,133982,133985],{},"相对定位的特点：",[55438,133966],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55438,133969],{},"  ② ",[2093,133972,133973],{},"原来"," 在标准流的 ",[2093,133976,133977],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55438,133980],{},"  ③因此， ",[2093,133983,133984],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,133987,133988],{},"（3）绝对定位",[2946,133990,133991,134000],{},[29,133992,133993,133995,133996,133999],{},[2093,133994,133804],{}," 是元素在移动位置的时候，是相对于它 ",[2093,133997,133998],{},"祖先元素"," 来说的（拼爹型）",[29,134001,6952],{},[154,134003,134004],{"className":127917,"code":133710,"language":127919,"meta":160,"style":160},[70,134005,134006,134012,134024,134038,134052],{"__ignoreMap":160},[178,134007,134008,134010],{"class":180,"line":181},[178,134009,131765],{"class":184},[178,134011,17330],{"class":319},[178,134013,134014,134016,134018,134020,134022],{"class":180,"line":263},[178,134015,133723],{"class":195},[178,134017,53167],{"class":319},[178,134019,56485],{"class":195},[178,134021,131780],{"class":319},[178,134023,133732],{"class":2008},[178,134025,134026,134028,134030,134032,134034,134036],{"class":180,"line":274},[178,134027,133737],{"class":195},[178,134029,53167],{"class":319},[178,134031,2386],{"class":195},[178,134033,53222],{"class":699},[178,134035,133746],{"class":319},[178,134037,133749],{"class":2008},[178,134039,134040,134042,134044,134046,134048,134050],{"class":180,"line":354},[178,134041,133754],{"class":195},[178,134043,53167],{"class":319},[178,134045,2640],{"class":195},[178,134047,53222],{"class":699},[178,134049,133763],{"class":319},[178,134051,133766],{"class":2008},[178,134053,134054],{"class":180,"line":364},[178,134055,3371],{"class":319},[2946,134057,134058,134073,134082,134085],{},[29,134059,134060,134061,134063,134064,134066,134067,134069,134070,134072],{},"绝对定位的特点：",[55438,134062],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55438,134065],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55438,134068],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55438,134071],{},"  (4)固定定位",[29,134074,134075,134077,134078,134081],{},[2093,134076,133811],{}," 是元素 ",[2093,134079,134080],{},"固定于浏览器可视区的位置"," 。（认死理型）",[29,134083,134084],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[29,134086,134087],{},"语法:",[154,134089,134090],{"className":127917,"code":133710,"language":127919,"meta":160,"style":160},[70,134091,134092,134098,134110,134124,134138],{"__ignoreMap":160},[178,134093,134094,134096],{"class":180,"line":181},[178,134095,131765],{"class":184},[178,134097,17330],{"class":319},[178,134099,134100,134102,134104,134106,134108],{"class":180,"line":263},[178,134101,133723],{"class":195},[178,134103,53167],{"class":319},[178,134105,56485],{"class":195},[178,134107,131780],{"class":319},[178,134109,133732],{"class":2008},[178,134111,134112,134114,134116,134118,134120,134122],{"class":180,"line":274},[178,134113,133737],{"class":195},[178,134115,53167],{"class":319},[178,134117,2386],{"class":195},[178,134119,53222],{"class":699},[178,134121,133746],{"class":319},[178,134123,133749],{"class":2008},[178,134125,134126,134128,134130,134132,134134,134136],{"class":180,"line":354},[178,134127,133754],{"class":195},[178,134129,53167],{"class":319},[178,134131,2640],{"class":195},[178,134133,53222],{"class":699},[178,134135,133763],{"class":319},[178,134137,133766],{"class":2008},[178,134139,134140],{"class":180,"line":364},[178,134141,3371],{"class":319},[2946,134143,134144,134153],{},[29,134145,134146,134147,134149,134150,134152],{},"特点:",[55438,134148],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55438,134151],{},"  ②固定定位不再占有原先的位置,完全脱标",[29,134154,134155,134156,134158,134159,134161,134162,134164],{},"固定在版心位置的方法:",[55438,134157],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55438,134160],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55438,134163],{},"  实例：",[154,134166,134167],{"className":127917,"code":133710,"language":127919,"meta":160,"style":160},[70,134168,134169,134175,134187,134201,134215],{"__ignoreMap":160},[178,134170,134171,134173],{"class":180,"line":181},[178,134172,131765],{"class":184},[178,134174,17330],{"class":319},[178,134176,134177,134179,134181,134183,134185],{"class":180,"line":263},[178,134178,133723],{"class":195},[178,134180,53167],{"class":319},[178,134182,56485],{"class":195},[178,134184,131780],{"class":319},[178,134186,133732],{"class":2008},[178,134188,134189,134191,134193,134195,134197,134199],{"class":180,"line":274},[178,134190,133737],{"class":195},[178,134192,53167],{"class":319},[178,134194,2386],{"class":195},[178,134196,53222],{"class":699},[178,134198,133746],{"class":319},[178,134200,133749],{"class":2008},[178,134202,134203,134205,134207,134209,134211,134213],{"class":180,"line":354},[178,134204,133754],{"class":195},[178,134206,53167],{"class":319},[178,134208,2640],{"class":195},[178,134210,53222],{"class":699},[178,134212,133763],{"class":319},[178,134214,133766],{"class":2008},[178,134216,134217],{"class":180,"line":364},[178,134218,3371],{"class":319},[3269,134220],{"style":127773,"src":134221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,134223,134224],{},"(5)粘性定位",[2946,134226,134227,134230],{},[29,134228,134229],{},"粘性定位可以被认为是相对定位和固定定位的混合",[29,134231,6952],{},[154,134233,134234],{"className":127917,"code":133710,"language":127919,"meta":160,"style":160},[70,134235,134236,134242,134254,134268,134282],{"__ignoreMap":160},[178,134237,134238,134240],{"class":180,"line":181},[178,134239,131765],{"class":184},[178,134241,17330],{"class":319},[178,134243,134244,134246,134248,134250,134252],{"class":180,"line":263},[178,134245,133723],{"class":195},[178,134247,53167],{"class":319},[178,134249,56485],{"class":195},[178,134251,131780],{"class":319},[178,134253,133732],{"class":2008},[178,134255,134256,134258,134260,134262,134264,134266],{"class":180,"line":274},[178,134257,133737],{"class":195},[178,134259,53167],{"class":319},[178,134261,2386],{"class":195},[178,134263,53222],{"class":699},[178,134265,133746],{"class":319},[178,134267,133749],{"class":2008},[178,134269,134270,134272,134274,134276,134278,134280],{"class":180,"line":354},[178,134271,133754],{"class":195},[178,134273,53167],{"class":319},[178,134275,2640],{"class":195},[178,134277,53222],{"class":699},[178,134279,133763],{"class":319},[178,134281,133766],{"class":2008},[178,134283,134284],{"class":180,"line":364},[178,134285,3371],{"class":319},[2946,134287,134288],{},[29,134289,134290,134291,134293,134294,134296,134297,134299,134300,134303,134304,134306],{},"粘性定位的特点：",[55438,134292],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55438,134295],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55438,134298],{},"  ③必须添加 top 、left、right、bottom ",[2093,134301,134302],{},"其中一个"," 才有效",[55438,134305],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[154,134308,134309],{"className":127917,"code":133710,"language":127919,"meta":160,"style":160},[70,134310,134311,134317,134329,134343,134357],{"__ignoreMap":160},[178,134312,134313,134315],{"class":180,"line":181},[178,134314,131765],{"class":184},[178,134316,17330],{"class":319},[178,134318,134319,134321,134323,134325,134327],{"class":180,"line":263},[178,134320,133723],{"class":195},[178,134322,53167],{"class":319},[178,134324,56485],{"class":195},[178,134326,131780],{"class":319},[178,134328,133732],{"class":2008},[178,134330,134331,134333,134335,134337,134339,134341],{"class":180,"line":274},[178,134332,133737],{"class":195},[178,134334,53167],{"class":319},[178,134336,2386],{"class":195},[178,134338,53222],{"class":699},[178,134340,133746],{"class":319},[178,134342,133749],{"class":2008},[178,134344,134345,134347,134349,134351,134353,134355],{"class":180,"line":354},[178,134346,133754],{"class":195},[178,134348,53167],{"class":319},[178,134350,2640],{"class":195},[178,134352,53222],{"class":699},[178,134354,133763],{"class":319},[178,134356,133766],{"class":2008},[178,134358,134359],{"class":180,"line":364},[178,134360,3371],{"class":319},[3269,134362],{"style":127773,"src":134363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,134365,134366],{},"(6)总结",[45,134368,134369,134384],{},[48,134370,134371],{},[51,134372,134373,134375,134378,134381],{},[54,134374,133707],{"align":56},[54,134376,134377],{"align":56},"是否脱标",[54,134379,134380],{"align":56},"移动位置",[54,134382,134383],{"align":56},"是否常用",[62,134385,134386,134399,134413,134427,134440],{},[51,134387,134388,134391,134393,134396],{},[67,134389,134390],{"align":56},"Static 静态定位",[67,134392,106043],{"align":56},[67,134394,134395],{"align":56},"不能使用边偏移",[67,134397,134398],{"align":56},"很少",[51,134400,134401,134404,134407,134410],{},[67,134402,134403],{"align":56},"Relative 相对定位",[67,134405,134406],{"align":56},"否(占有位置)",[67,134408,134409],{"align":56},"相对于自身位置移动",[67,134411,134412],{"align":56},"基本单独使用",[51,134414,134415,134418,134421,134424],{},[67,134416,134417],{"align":56},"Absolute 绝对定位",[67,134419,134420],{"align":56},"是(不占有位置)",[67,134422,134423],{"align":56},"带有定位的父级",[67,134425,134426],{"align":56},"要和定位父级元素搭配使用",[51,134428,134429,134432,134434,134437],{},[67,134430,134431],{"align":56},"Fixed 固定定位",[67,134433,134420],{"align":56},[67,134435,134436],{"align":56},"浏览器可视区",[67,134438,134439],{"align":56},"单独使用,不需要父级",[51,134441,134442,134445,134447,134449],{},[67,134443,134444],{"align":56},"Sticky 粘性定位",[67,134446,134406],{"align":56},[67,134448,134436],{"align":56},[67,134450,134451],{"align":56},"当前阶段少",[26,134453,134454],{"start":263},[29,134455,134456,134459],{},[2093,134457,134458],{},"边偏移"," 则决定了该元素的最终位置",[45,134461,134462,134473],{},[48,134463,134464],{},[51,134465,134466,134469,134471],{},[54,134467,134468],{"align":56},"边偏移属性",[54,134470,29241],{"align":56},[54,134472,29238],{"align":56},[62,134474,134475,134486,134497,134507],{},[51,134476,134477,134480,134483],{},[67,134478,134479],{"align":56},"top",[67,134481,134482],{"align":56},"top: 80px;",[67,134484,134485],{"align":56},"顶端偏移量，定义元素相对于父元素上边线的距离",[51,134487,134488,134491,134494],{},[67,134489,134490],{"align":56},"bottom",[67,134492,134493],{"align":56},"bottom: 80px ;",[67,134495,134496],{"align":56},"底部偏移量，定义元素相对于其父元素下边线的距离",[51,134498,134499,134501,134504],{},[67,134500,56],{"align":56},[67,134502,134503],{"align":56},"left: 80px ;",[67,134505,134506],{"align":56},"左侧偏移量，定义元素相对于其父元素左边线的距离",[51,134508,134509,134511,134514],{},[67,134510,74242],{"align":56},[67,134512,134513],{"align":56},"right: 80px ;",[67,134515,134516],{"align":56},"右侧偏移量，定义元素相对于其父元素右边线的距离",[2946,134518,134519],{},[29,134520,10786,134521,134523,134524,134526,134527,134529,134530,134533,134534,134536,134537,134539],{},[55438,134522],{},"  ① ",[2093,134525,134458],{}," 需要和 ",[2093,134528,133707],{}," 联合使用， ",[2093,134531,134532],{},"单独使用无效"," ；",[55438,134535],{},"  ②top和bottom不要同时使用",[55438,134538],{},"  ③left和right不要同时使用",[23756,134541,134543],{"id":134542},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,134545,134546],{},"子级是绝对定位的话，父级要用相对定位",[2946,134548,134549,134552,134555,134558],{},[29,134550,134551],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[29,134553,134554],{},"父盒子需要加定位限制子盒子在父盒子内显示",[29,134556,134557],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[29,134559,134560,134561,134564],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[2093,134562,134563],{},"子绝父绝"," 也会遇到",[23756,134566,134568],{"id":134567},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[2946,134570,134571,134586],{},[29,134572,134573,134574,134577,134578,134581,134582,134585],{},"在使用 ",[2093,134575,134576],{},"定位"," 布局时，可能会 ",[2093,134579,134580],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[2093,134583,134584],{},"z-index"," 来控制盒子的前后次序 (z轴)",[29,134587,6952],{},[154,134589,134590],{"className":127917,"code":133710,"language":127919,"meta":160,"style":160},[70,134591,134592,134598,134610,134624,134638],{"__ignoreMap":160},[178,134593,134594,134596],{"class":180,"line":181},[178,134595,131765],{"class":184},[178,134597,17330],{"class":319},[178,134599,134600,134602,134604,134606,134608],{"class":180,"line":263},[178,134601,133723],{"class":195},[178,134603,53167],{"class":319},[178,134605,56485],{"class":195},[178,134607,131780],{"class":319},[178,134609,133732],{"class":2008},[178,134611,134612,134614,134616,134618,134620,134622],{"class":180,"line":274},[178,134613,133737],{"class":195},[178,134615,53167],{"class":319},[178,134617,2386],{"class":195},[178,134619,53222],{"class":699},[178,134621,133746],{"class":319},[178,134623,133749],{"class":2008},[178,134625,134626,134628,134630,134632,134634,134636],{"class":180,"line":354},[178,134627,133754],{"class":195},[178,134629,53167],{"class":319},[178,134631,2640],{"class":195},[178,134633,53222],{"class":699},[178,134635,133763],{"class":319},[178,134637,133766],{"class":2008},[178,134639,134640],{"class":180,"line":364},[178,134641,3371],{"class":319},[2946,134643,134644],{},[29,134645,134646,134647,134523,134649,134651,134652,129080,134655,1815,134658,134660,134661,134663,134664,134667,134668,134533,134671,134673,134674,134677,134679],{},"z-index的特性",[55438,134648],{},[2093,134650,128381],{}," ： ",[2093,134653,134654],{},"正整数",[2093,134656,134657],{},"负整数",[2093,134659,2133],{}," ，默认值是 0，数值越大，盒子越靠上；",[55438,134662],{},"  ②如果 ",[2093,134665,134666],{},"属性值相同"," ，则按照书写顺序， ",[2093,134669,134670],{},"后来居上",[55438,134672],{},"  ③数字后面 ",[2093,134675,134676],{},"不能加单位",[55438,134678],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[23756,134681,134683],{"id":134682},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,134685,134686],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,134688,134689],{},"方法:",[2946,134691,134692,134702],{},[29,134693,134694,134695,134698,134699],{},"left: 50%; 让 ",[2093,134696,134697],{},"盒子的左侧"," 移动到 ",[2093,134700,134701],{},"父级元素的水平中心位置",[29,134703,134704,134705,134708,134709],{},"margin-left: -100px; 让盒子 ",[2093,134706,134707],{},"向左"," 移动 ",[2093,134710,134711],{},"自身宽度的一半",[23756,134713,134715],{"id":134714},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[26,134717,134718,134721],{},[29,134719,134720],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[29,134722,134723],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,134725,134726],{},"也就是说绝对定位和固定定位和浮动类似",[26,134728,134729],{"start":274},[29,134730,134731],{},"display 是显示模式， 可以改变显示模式有以下方式:",[2946,134733,134734,134737,134740],{},[29,134735,134736],{},"可以用inline-block 转换为行内块",[29,134738,134739],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[29,134741,134742],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,134744,134745],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[23756,134747,134749],{"id":134748},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[26,134751,134752,134755,134758,134761],{},[29,134753,134754],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[29,134756,134757],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[29,134759,134760],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[29,134762,134763],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[154,134765,134766],{"className":127917,"code":132383,"language":127919,"meta":160,"style":160},[70,134767,134768,134774,134784,134788,134794,134804],{"__ignoreMap":160},[178,134769,134770,134772],{"class":180,"line":181},[178,134771,132390],{"class":184},[178,134773,17330],{"class":319},[178,134775,134776,134778,134780,134782],{"class":180,"line":263},[178,134777,132397],{"class":195},[178,134779,53167],{"class":319},[178,134781,56],{"class":195},[178,134783,3100],{"class":319},[178,134785,134786],{"class":180,"line":274},[178,134787,3371],{"class":319},[178,134789,134790,134792],{"class":180,"line":354},[178,134791,132412],{"class":184},[178,134793,17330],{"class":319},[178,134795,134796,134798,134800,134802],{"class":180,"line":364},[178,134797,132397],{"class":195},[178,134799,53167],{"class":319},[178,134801,74242],{"class":195},[178,134803,3100],{"class":319},[178,134805,134806],{"class":180,"line":740},[178,134807,3371],{"class":319},[3269,134809],{"style":127773,"src":134810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[23756,134812,134814],{"id":134813},"_11138-轮播图","11.1.3.8 轮播图",[3269,134816],{"style":127773,"src":134817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[26,134819,134820],{},[29,134821,134822],{},"制作顺序:",[2946,134824,134825,134828,134831,134840],{},[29,134826,134827],{},"大盒子我们类名为： tb-promo 淘宝广告",[29,134829,134830],{},"里面先放一张图片",[29,134832,134833,134834,134836,134837,134839],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55438,134835],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55438,134838],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[29,134841,134842,134843,134845,134846,134848],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55438,134844],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55438,134847],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[26,134850,134851],{"start":263},[29,134852,134853],{},"代码模块",[154,134855,134857],{"className":127917,"code":134856,"language":127919,"meta":160,"style":160},"\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",[70,134858,134859,134864,134871,134881,134891,134901,134905,134910,134917,134927],{"__ignoreMap":160},[178,134860,134861],{"class":180,"line":181},[178,134862,134863],{"class":2008},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[178,134865,134866,134869],{"class":180,"line":263},[178,134867,134868],{"class":184},".son",[178,134870,17330],{"class":319},[178,134872,134873,134875,134877,134879],{"class":180,"line":274},[178,134874,133723],{"class":195},[178,134876,53167],{"class":319},[178,134878,56552],{"class":195},[178,134880,3100],{"class":319},[178,134882,134883,134885,134887,134889],{"class":180,"line":354},[178,134884,133737],{"class":195},[178,134886,53167],{"class":319},[178,134888,2133],{"class":195},[178,134890,3100],{"class":319},[178,134892,134893,134895,134897,134899],{"class":180,"line":364},[178,134894,133754],{"class":195},[178,134896,53167],{"class":319},[178,134898,2133],{"class":195},[178,134900,3100],{"class":319},[178,134902,134903],{"class":180,"line":740},[178,134904,3371],{"class":319},[178,134906,134907],{"class":180,"line":746},[178,134908,134909],{"class":2008},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[178,134911,134912,134915],{"class":180,"line":752},[178,134913,134914],{"class":184},".father",[178,134916,17330],{"class":319},[178,134918,134919,134921,134923,134925],{"class":180,"line":757},[178,134920,133723],{"class":195},[178,134922,53167],{"class":319},[178,134924,56485],{"class":195},[178,134926,3100],{"class":319},[178,134928,134929],{"class":180,"line":763},[178,134930,3371],{"class":319},[19,134932,134933],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[387,134935,134937],{"id":134936},"_1114-定位数值的移动","11.1.4 定位数值的移动",[3269,134939],{"style":127773,"src":134940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,134942,134943],{},"✨ 黄金口诀：",[19,134945,134946],{},"\"TOP正下负上，LEFT正右负左\"",[19,134948,134949],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,134951,134952],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,134954,134955],{},"✨ 简单记：",[19,134957,134958],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[1853,134960,134961],{},"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":160,"searchDepth":263,"depth":263,"links":134963},[134964],{"id":133491,"depth":263,"text":133492,"children":134965},[134966,134967,134968,134969],{"id":133495,"depth":274,"text":133496},{"id":133510,"depth":274,"text":133511},{"id":133678,"depth":274,"text":133679},{"id":134936,"depth":274,"text":134937},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133483,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":134976,"title":134977,"body":134978,"description":25135,"extension":1880,"meta":136401,"navigation":721,"path":136402,"seo":136403,"stem":136404,"__hash__":136405},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":134979,"toc":136380},[134980,134983,134987,134995,134999,135004,135012,135024,135028,135033,135041,135052,135056,135061,135102,135110,135114,135117,135120,135123,135217,135220,135314,135317,135411,135414,135417,135452,135455,135458,135488,135491,135494,135497,135500,135503,135506,135509,135579,135582,135586,135590,135631,135635,135641,135644,135647,135651,135654,135657,135660,135741,135744,135747,135751,135755,135758,135761,135764,135767,135770,135776,135785,135789,135808,135812,135822,135825,135828,135831,135834,135837,135840,135843,135846,135855,135859,135868,135871,135876,135929,135934,136100,136103,136106,136111,136114,136117,136120,136123,136128,136276,136279,136282,136287,136290,136295,136329,136332,136335,136339,136342,136349,136352,136355,136358,136361,136364,136367,136370,136374,136377],[10,134981,134977],{"id":134982},"_12-显示隐藏与图形资源",[14,134984,134986],{"id":134985},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[2946,134988,134989,134992],{},[29,134990,134991],{},"目的:让一个元素在页面中消失或者显示出来",[29,134993,134994],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[387,134996,134998],{"id":134997},"_1211-display-显示","12.1.1 display 显示",[26,135000,135001],{},[29,135002,135003],{},"display 设置或检索对象是否及如何显示",[2946,135005,135006,135009],{},[29,135007,135008],{},"display: none;隐藏对象",[29,135010,135011],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[26,135013,135014,135021],{"start":263},[29,135015,135016,135017,135020],{},"特点： display 隐藏元素后， ",[2093,135018,135019],{},"不再占"," 有原来的位置",[29,135022,135023],{},"在js中使用非常的广泛",[387,135025,135027],{"id":135026},"_1212-visibility可见性","12.1.2 visibility可见性",[26,135029,135030],{},[29,135031,135032],{},"visibility 属性用于指定一个元素应可见还是隐藏",[2946,135034,135035,135038],{},[29,135036,135037],{},"visibility： visible；元素可见",[29,135039,135040],{},"visibility：hidden；元素隐藏",[26,135042,135043,135046,135049],{"start":263},[29,135044,135045],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[29,135047,135048],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[29,135050,135051],{},"隐藏后继续占有原有位置",[387,135053,135055],{"id":135054},"_1213-overflow溢出","12.1.3 overflow溢出",[2946,135057,135058],{},[29,135059,135060],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[45,135062,135063,135071],{},[48,135064,135065],{},[51,135066,135067,135069],{},[54,135068,128381],{"align":56},[54,135070,29238],{"align":56},[62,135072,135073,135081,135088,135095],{},[51,135074,135075,135078],{},[67,135076,135077],{"align":56},"visible",[67,135079,135080],{"align":56},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[51,135082,135083,135085],{},[67,135084,63435],{"align":56},[67,135086,135087],{"align":56},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[51,135089,135090,135092],{},[67,135091,130337],{"align":56},[67,135093,135094],{"align":56},"不管超出内容否，总是显示滚动条",[51,135096,135097,135099],{},[67,135098,74383],{"align":56},[67,135100,135101],{"align":56},"超出自动显示滚动条，不超出不显示滚动条",[2946,135103,135104,135107],{},[29,135105,135106],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[29,135108,135109],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[387,135111,135113],{"id":135112},"_1214-案例收获","12.1.4 案例收获",[3269,135115],{"style":127773,"src":135116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,135118,135119],{},"问题：没做出来动态效果，使用hover没实现",[19,135121,135122],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[154,135124,135125],{"className":127917,"code":133349,"language":127919,"meta":160,"style":160},[70,135126,135127,135131,135145,135149,135163,135167,135181,135185,135199,135203],{"__ignoreMap":160},[178,135128,135129],{"class":180,"line":181},[178,135130,133356],{"class":2008},[178,135132,135133,135135,135137,135139,135141,135143],{"class":180,"line":263},[178,135134,133361],{"class":184},[178,135136,81526],{"class":319},[178,135138,130277],{"class":195},[178,135140,53167],{"class":319},[178,135142,133370],{"class":195},[178,135144,130847],{"class":319},[178,135146,135147],{"class":180,"line":274},[178,135148,133377],{"class":2008},[178,135150,135151,135153,135155,135157,135159,135161],{"class":180,"line":354},[178,135152,133382],{"class":184},[178,135154,81526],{"class":319},[178,135156,130277],{"class":195},[178,135158,53167],{"class":319},[178,135160,56485],{"class":195},[178,135162,130847],{"class":319},[178,135164,135165],{"class":180,"line":364},[178,135166,133397],{"class":2008},[178,135168,135169,135171,135173,135175,135177,135179],{"class":180,"line":740},[178,135170,133402],{"class":184},[178,135172,81526],{"class":319},[178,135174,130277],{"class":195},[178,135176,53167],{"class":319},[178,135178,56552],{"class":195},[178,135180,130847],{"class":319},[178,135182,135183],{"class":180,"line":746},[178,135184,133417],{"class":2008},[178,135186,135187,135189,135191,135193,135195,135197],{"class":180,"line":752},[178,135188,133422],{"class":184},[178,135190,81526],{"class":319},[178,135192,130277],{"class":195},[178,135194,53167],{"class":319},[178,135196,87948],{"class":195},[178,135198,130847],{"class":319},[178,135200,135201],{"class":180,"line":757},[178,135202,133437],{"class":2008},[178,135204,135205,135207,135209,135211,135213,135215],{"class":180,"line":763},[178,135206,133442],{"class":184},[178,135208,81526],{"class":319},[178,135210,130277],{"class":195},[178,135212,53167],{"class":319},[178,135214,133451],{"class":195},[178,135216,130847],{"class":319},[19,135218,135219],{},"完整代码：",[154,135221,135222],{"className":127917,"code":133349,"language":127919,"meta":160,"style":160},[70,135223,135224,135228,135242,135246,135260,135264,135278,135282,135296,135300],{"__ignoreMap":160},[178,135225,135226],{"class":180,"line":181},[178,135227,133356],{"class":2008},[178,135229,135230,135232,135234,135236,135238,135240],{"class":180,"line":263},[178,135231,133361],{"class":184},[178,135233,81526],{"class":319},[178,135235,130277],{"class":195},[178,135237,53167],{"class":319},[178,135239,133370],{"class":195},[178,135241,130847],{"class":319},[178,135243,135244],{"class":180,"line":274},[178,135245,133377],{"class":2008},[178,135247,135248,135250,135252,135254,135256,135258],{"class":180,"line":354},[178,135249,133382],{"class":184},[178,135251,81526],{"class":319},[178,135253,130277],{"class":195},[178,135255,53167],{"class":319},[178,135257,56485],{"class":195},[178,135259,130847],{"class":319},[178,135261,135262],{"class":180,"line":364},[178,135263,133397],{"class":2008},[178,135265,135266,135268,135270,135272,135274,135276],{"class":180,"line":740},[178,135267,133402],{"class":184},[178,135269,81526],{"class":319},[178,135271,130277],{"class":195},[178,135273,53167],{"class":319},[178,135275,56552],{"class":195},[178,135277,130847],{"class":319},[178,135279,135280],{"class":180,"line":746},[178,135281,133417],{"class":2008},[178,135283,135284,135286,135288,135290,135292,135294],{"class":180,"line":752},[178,135285,133422],{"class":184},[178,135287,81526],{"class":319},[178,135289,130277],{"class":195},[178,135291,53167],{"class":319},[178,135293,87948],{"class":195},[178,135295,130847],{"class":319},[178,135297,135298],{"class":180,"line":757},[178,135299,133437],{"class":2008},[178,135301,135302,135304,135306,135308,135310,135312],{"class":180,"line":763},[178,135303,133442],{"class":184},[178,135305,81526],{"class":319},[178,135307,130277],{"class":195},[178,135309,53167],{"class":319},[178,135311,133451],{"class":195},[178,135313,130847],{"class":319},[19,135315,135316],{},"分布思路重点详解：",[154,135318,135319],{"className":127917,"code":133349,"language":127919,"meta":160,"style":160},[70,135320,135321,135325,135339,135343,135357,135361,135375,135379,135393,135397],{"__ignoreMap":160},[178,135322,135323],{"class":180,"line":181},[178,135324,133356],{"class":2008},[178,135326,135327,135329,135331,135333,135335,135337],{"class":180,"line":263},[178,135328,133361],{"class":184},[178,135330,81526],{"class":319},[178,135332,130277],{"class":195},[178,135334,53167],{"class":319},[178,135336,133370],{"class":195},[178,135338,130847],{"class":319},[178,135340,135341],{"class":180,"line":274},[178,135342,133377],{"class":2008},[178,135344,135345,135347,135349,135351,135353,135355],{"class":180,"line":354},[178,135346,133382],{"class":184},[178,135348,81526],{"class":319},[178,135350,130277],{"class":195},[178,135352,53167],{"class":319},[178,135354,56485],{"class":195},[178,135356,130847],{"class":319},[178,135358,135359],{"class":180,"line":364},[178,135360,133397],{"class":2008},[178,135362,135363,135365,135367,135369,135371,135373],{"class":180,"line":740},[178,135364,133402],{"class":184},[178,135366,81526],{"class":319},[178,135368,130277],{"class":195},[178,135370,53167],{"class":319},[178,135372,56552],{"class":195},[178,135374,130847],{"class":319},[178,135376,135377],{"class":180,"line":746},[178,135378,133417],{"class":2008},[178,135380,135381,135383,135385,135387,135389,135391],{"class":180,"line":752},[178,135382,133422],{"class":184},[178,135384,81526],{"class":319},[178,135386,130277],{"class":195},[178,135388,53167],{"class":319},[178,135390,87948],{"class":195},[178,135392,130847],{"class":319},[178,135394,135395],{"class":180,"line":757},[178,135396,133437],{"class":2008},[178,135398,135399,135401,135403,135405,135407,135409],{"class":180,"line":763},[178,135400,133442],{"class":184},[178,135402,81526],{"class":319},[178,135404,130277],{"class":195},[178,135406,53167],{"class":319},[178,135408,133451],{"class":195},[178,135410,130847],{"class":319},[3269,135412],{"style":127773,"src":135413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,135415,135416],{},"图片太大，盒子太小，此时需要修改图片的大小",[154,135418,135420],{"className":128664,"code":135419,"language":128666,"meta":160,"style":160},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[70,135421,135422],{"__ignoreMap":160},[178,135423,135424,135426,135428,135430,135432,135435,135437,135439,135442,135445,135447,135450],{"class":180,"line":181},[178,135425,320],{"class":319},[178,135427,3269],{"class":323},[178,135429,56960],{"class":184},[178,135431,330],{"class":319},[178,135433,135434],{"class":188},"\"images\u002Fpic.jpg\"",[178,135436,56968],{"class":184},[178,135438,330],{"class":319},[178,135440,135441],{"class":188},"\"描述文字\"",[178,135443,135444],{"class":184}," title",[178,135446,330],{"class":319},[178,135448,135449],{"class":188},"\"悬停提示\"",[178,135451,336],{"class":319},[3269,135453],{"style":127773,"src":135454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,135456,135457],{},"制造遮罩层",[154,135459,135460],{"className":128664,"code":135419,"language":128666,"meta":160,"style":160},[70,135461,135462],{"__ignoreMap":160},[178,135463,135464,135466,135468,135470,135472,135474,135476,135478,135480,135482,135484,135486],{"class":180,"line":181},[178,135465,320],{"class":319},[178,135467,3269],{"class":323},[178,135469,56960],{"class":184},[178,135471,330],{"class":319},[178,135473,135434],{"class":188},[178,135475,56968],{"class":184},[178,135477,330],{"class":319},[178,135479,135441],{"class":188},[178,135481,135444],{"class":184},[178,135483,330],{"class":319},[178,135485,135449],{"class":188},[178,135487,336],{"class":319},[19,135489,135490],{},"此时是这样的为标准流",[3269,135492],{"style":127773,"src":135493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,135495,135496],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,135498,135499],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,135501,135502],{},"让他在中间，用center(background-position)",[19,135504,135505],{},"将需要变的尽可能放到一个盒子中",[19,135507,135508],{},"放大盒子上内部盒子发生变化",[154,135510,135512],{"className":127917,"code":135511,"language":127919,"meta":160,"style":160},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[70,135513,135514,135520,135530,135534,135541,135551,135563,135575],{"__ignoreMap":160},[178,135515,135516,135518],{"class":180,"line":181},[178,135517,128984],{"class":184},[178,135519,17330],{"class":319},[178,135521,135522,135524,135526,135528],{"class":180,"line":263},[178,135523,133723],{"class":195},[178,135525,53167],{"class":319},[178,135527,56485],{"class":195},[178,135529,3100],{"class":319},[178,135531,135532],{"class":180,"line":274},[178,135533,3371],{"class":319},[178,135535,135536,135539],{"class":180,"line":354},[178,135537,135538],{"class":184},".child",[178,135540,17330],{"class":319},[178,135542,135543,135545,135547,135549],{"class":180,"line":364},[178,135544,133723],{"class":195},[178,135546,53167],{"class":319},[178,135548,56552],{"class":195},[178,135550,3100],{"class":319},[178,135552,135553,135555,135557,135559,135561],{"class":180,"line":740},[178,135554,133737],{"class":195},[178,135556,53167],{"class":319},[178,135558,2596],{"class":195},[178,135560,2268],{"class":699},[178,135562,3100],{"class":319},[178,135564,135565,135567,135569,135571,135573],{"class":180,"line":746},[178,135566,133754],{"class":195},[178,135568,53167],{"class":319},[178,135570,2596],{"class":195},[178,135572,2268],{"class":699},[178,135574,3100],{"class":319},[178,135576,135577],{"class":180,"line":752},[178,135578,3371],{"class":319},[19,135580,135581],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135583,135585],{"id":135584},"_122-精灵图","12.2 精灵图",[387,135587,135589],{"id":135588},"_1221-理解","12.2.1 理解",[26,135591,135592,135610],{},[29,135593,135594,135595,133823,135598,135601,135602,135605,135606,135609],{},"目的： ",[2093,135596,135597],{},"为了有效地减少服务器接收和发送请求的次数",[2093,135599,135600],{},"提高"," 页面的 ",[2093,135603,135604],{},"加载速度"," ，出现了 ",[2093,135607,135608],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[29,135611,135612,135613,135615,135616,135618,135619,135621,135622,135624,135625,135627,135628,135630],{},"使用精灵图核心：",[55438,135614],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55438,135617],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55438,135620],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55438,135623],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55438,135626],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55438,135629],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[387,135632,135634],{"id":135633},"_1222-扒图","12.2.2 扒图",[154,135636,135639],{"className":135637,"code":135638,"language":159},[157],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[70,135640,135638],{"__ignoreMap":160},[3269,135642],{"style":127773,"src":135643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[3269,135645],{"style":127773,"src":135646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[387,135648,135650],{"id":135649},"_1223-精灵图的实现","12.2.3 精灵图的实现",[3269,135652],{"style":127773,"src":135653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,135655,135656],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[3269,135658],{"style":127773,"src":135659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[154,135661,135663],{"className":127917,"code":135662,"language":127919,"meta":160,"style":160},"\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",[70,135664,135665,135670,135677,135689,135701,135720,135737],{"__ignoreMap":160},[178,135666,135667],{"class":180,"line":181},[178,135668,135669],{"class":2008},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[178,135671,135672,135675],{"class":180,"line":263},[178,135673,135674],{"class":184},".icon",[178,135676,17330],{"class":319},[178,135678,135679,135681,135683,135685,135687],{"class":180,"line":274},[178,135680,72288],{"class":195},[178,135682,53167],{"class":319},[178,135684,2640],{"class":195},[178,135686,53222],{"class":699},[178,135688,3100],{"class":319},[178,135690,135691,135693,135695,135697,135699],{"class":180,"line":354},[178,135692,72508],{"class":195},[178,135694,53167],{"class":319},[178,135696,2640],{"class":195},[178,135698,53222],{"class":699},[178,135700,3100],{"class":319},[178,135702,135703,135705,135707,135709,135711,135714,135716,135718],{"class":180,"line":364},[178,135704,72331],{"class":195},[178,135706,53167],{"class":319},[178,135708,63447],{"class":195},[178,135710,944],{"class":319},[178,135712,135713],{"class":6985},"sprites.png",[178,135715,15474],{"class":319},[178,135717,63457],{"class":195},[178,135719,3100],{"class":319},[178,135721,135722,135724,135726,135728,135730,135733,135735],{"class":180,"line":740},[178,135723,130177],{"class":195},[178,135725,53167],{"class":319},[178,135727,53493],{"class":195},[178,135729,53222],{"class":699},[178,135731,135732],{"class":195}," -20",[178,135734,53222],{"class":699},[178,135736,3100],{"class":319},[178,135738,135739],{"class":180,"line":746},[178,135740,3371],{"class":319},[3269,135742],{"style":127773,"src":135743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,135745,135746],{},"在前端中坐标轴的正方向是右和下",[14,135748,135750],{"id":135749},"_123-字体图标","12.3 字体图标",[387,135752,135754],{"id":135753},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,135756,135757],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,135759,135760],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,135762,135763],{},"1.图片文件还是比较大的。",[19,135765,135766],{},"2.图片本身放大和缩小会失真。",[19,135768,135769],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,135771,135772,135773,27492],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[2093,135774,135775],{},"字体图标 iconfont",[19,135777,135778,135781,135782,297],{},[2093,135779,135780],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[2093,135783,135784],{},"展示的是图标，本质属于字体",[387,135786,135788],{"id":135787},"_1232-字体图标的优点","12.3.2 字体图标的优点",[2946,135790,135791,135796,135799,135802,135805],{},[29,135792,135793,135795],{},[2093,135794,27628],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[29,135797,135798],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[29,135800,135801],{},"兼容性：几乎支持所有的浏览器，请放心使用",[29,135803,135804],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[29,135806,135807],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[387,135809,135811],{"id":135810},"_1233-字体库下载网站","12.3.3 字体库下载网站",[2946,135813,135814],{},[29,135815,135816,135817],{},"icomoon字体库：",[2178,135818,135821],{"href":135819,"rel":135820},"http:\u002F\u002Ficomoon.io\u002F",[25619],"http:\u002F\u002Ficomoon.io",[19,135823,135824],{},"进去之后点icomoon app",[3269,135826],{"style":127773,"src":135827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,135829,135830],{},"可以对其编辑：",[3269,135832],{"style":127773,"src":135833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,135835,135836],{},"生成字体：",[3269,135838],{"style":127773,"src":135839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,135841,135842],{},"下载：",[3269,135844],{"style":127773,"src":135845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[2946,135847,135848],{},[29,135849,135850,135851],{},"阿里iconfont字体库： ",[2178,135852,135853],{"href":135853,"rel":135854},"http:\u002F\u002Fwww.iconfont.cn\u002F",[25619],[387,135856,135858],{"id":135857},"_1234-字体图标的引入","12.3.4 字体图标的引入",[26,135860,135861],{},[29,135862,135863,135864,135867],{},"把下载包里面的 ",[2093,135865,135866],{},"fonts"," 文件夹放入页面根目录下",[3269,135869],{"style":127773,"src":135870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[26,135872,135873],{"start":263},[29,135874,135875],{},"字体文件格式",[45,135877,135878,135887],{},[48,135879,135880],{},[51,135881,135882,135885],{},[54,135883,135884],{"align":56},"格式",[54,135886,25498],{"align":56},[62,135888,135889,135899,135909,135919],{},[51,135890,135891,135896],{},[67,135892,135893],{"align":56},[2093,135894,135895],{},".ttf",[67,135897,135898],{"align":56},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[51,135900,135901,135906],{},[67,135902,135903],{"align":56},[2093,135904,135905],{},".woff",[67,135907,135908],{"align":56},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[51,135910,135911,135916],{},[67,135912,135913],{"align":56},[2093,135914,135915],{},".eot",[67,135917,135918],{"align":56},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[51,135920,135921,135926],{},[67,135922,135923],{"align":56},[2093,135924,135925],{},"svg",[67,135927,135928],{"align":56},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[26,135930,135931],{"start":274},[29,135932,135933],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[154,135935,135937],{"className":127917,"code":135936,"language":127919,"meta":160,"style":160},"\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",[70,135938,135939,135944,135951,135963,135979,136004,136025,136045,136065,136069,136075,136085,136096],{"__ignoreMap":160},[178,135940,135941],{"class":180,"line":181},[178,135942,135943],{"class":2008},"\u002F* 引入字体图标 *\u002F\n",[178,135945,135946,135949],{"class":180,"line":263},[178,135947,135948],{"class":699},"@font-face",[178,135950,17330],{"class":319},[178,135952,135953,135956,135958,135961],{"class":180,"line":274},[178,135954,135955],{"class":195},"  font-family",[178,135957,53167],{"class":319},[178,135959,135960],{"class":188},"'icomoon'",[178,135962,3100],{"class":319},[178,135964,135965,135968,135970,135972,135974,135977],{"class":180,"line":354},[178,135966,135967],{"class":195},"  src",[178,135969,53167],{"class":319},[178,135971,63447],{"class":195},[178,135973,944],{"class":319},[178,135975,135976],{"class":188},"'fonts\u002Ficomoon.eot'",[178,135978,4495],{"class":319},[178,135980,135981,135983,135985,135987,135989,135992,135994,135997,135999,136002],{"class":180,"line":364},[178,135982,135967],{"class":195},[178,135984,53167],{"class":319},[178,135986,63447],{"class":195},[178,135988,944],{"class":319},[178,135990,135991],{"class":188},"'fonts\u002Ficomoon.eot?#iefix'",[178,135993,15474],{"class":319},[178,135995,135996],{"class":195},"format",[178,135998,944],{"class":319},[178,136000,136001],{"class":188},"'embedded-opentype'",[178,136003,39779],{"class":319},[178,136005,136006,136009,136011,136014,136016,136018,136020,136023],{"class":180,"line":740},[178,136007,136008],{"class":195},"       url",[178,136010,944],{"class":319},[178,136012,136013],{"class":188},"'fonts\u002Ficomoon.woff'",[178,136015,15474],{"class":319},[178,136017,135996],{"class":195},[178,136019,944],{"class":319},[178,136021,136022],{"class":188},"'woff'",[178,136024,39779],{"class":319},[178,136026,136027,136029,136031,136034,136036,136038,136040,136043],{"class":180,"line":746},[178,136028,136008],{"class":195},[178,136030,944],{"class":319},[178,136032,136033],{"class":188},"'fonts\u002Ficomoon.ttf'",[178,136035,15474],{"class":319},[178,136037,135996],{"class":195},[178,136039,944],{"class":319},[178,136041,136042],{"class":188},"'truetype'",[178,136044,39779],{"class":319},[178,136046,136047,136049,136051,136054,136056,136058,136060,136063],{"class":180,"line":752},[178,136048,136008],{"class":195},[178,136050,944],{"class":319},[178,136052,136053],{"class":188},"'fonts\u002Ficomoon.svg#icomoon'",[178,136055,15474],{"class":319},[178,136057,135996],{"class":195},[178,136059,944],{"class":319},[178,136061,136062],{"class":188},"'svg'",[178,136064,4495],{"class":319},[178,136066,136067],{"class":180,"line":757},[178,136068,3371],{"class":319},[178,136070,136071,136073],{"class":180,"line":763},[178,136072,135674],{"class":184},[178,136074,17330],{"class":319},[178,136076,136077,136079,136081,136083],{"class":180,"line":769},[178,136078,135955],{"class":195},[178,136080,53167],{"class":319},[178,136082,135960],{"class":188},[178,136084,3100],{"class":319},[178,136086,136087,136090,136092,136094],{"class":180,"line":774},[178,136088,136089],{"class":195},"  font-style",[178,136091,53167],{"class":319},[178,136093,65561],{"class":195},[178,136095,3100],{"class":319},[178,136097,136098],{"class":180,"line":780},[178,136099,3371],{"class":319},[19,136101,136102],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[3269,136104],{"style":127773,"src":136105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[26,136107,136108],{"start":354},[29,136109,136110],{},"添加字体",[3269,136112],{"style":127773,"src":136113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,136115,136116],{},"复制：",[3269,136118],{"style":127773,"src":136119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,136121,136122],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[26,136124,136125],{"start":364},[29,136126,136127],{},"代码展示：",[154,136129,136130],{"className":127917,"code":135936,"language":127919,"meta":160,"style":160},[70,136131,136132,136136,136142,136152,136166,136188,136206,136224,136242,136246,136252,136262,136272],{"__ignoreMap":160},[178,136133,136134],{"class":180,"line":181},[178,136135,135943],{"class":2008},[178,136137,136138,136140],{"class":180,"line":263},[178,136139,135948],{"class":699},[178,136141,17330],{"class":319},[178,136143,136144,136146,136148,136150],{"class":180,"line":274},[178,136145,135955],{"class":195},[178,136147,53167],{"class":319},[178,136149,135960],{"class":188},[178,136151,3100],{"class":319},[178,136153,136154,136156,136158,136160,136162,136164],{"class":180,"line":354},[178,136155,135967],{"class":195},[178,136157,53167],{"class":319},[178,136159,63447],{"class":195},[178,136161,944],{"class":319},[178,136163,135976],{"class":188},[178,136165,4495],{"class":319},[178,136167,136168,136170,136172,136174,136176,136178,136180,136182,136184,136186],{"class":180,"line":364},[178,136169,135967],{"class":195},[178,136171,53167],{"class":319},[178,136173,63447],{"class":195},[178,136175,944],{"class":319},[178,136177,135991],{"class":188},[178,136179,15474],{"class":319},[178,136181,135996],{"class":195},[178,136183,944],{"class":319},[178,136185,136001],{"class":188},[178,136187,39779],{"class":319},[178,136189,136190,136192,136194,136196,136198,136200,136202,136204],{"class":180,"line":740},[178,136191,136008],{"class":195},[178,136193,944],{"class":319},[178,136195,136013],{"class":188},[178,136197,15474],{"class":319},[178,136199,135996],{"class":195},[178,136201,944],{"class":319},[178,136203,136022],{"class":188},[178,136205,39779],{"class":319},[178,136207,136208,136210,136212,136214,136216,136218,136220,136222],{"class":180,"line":746},[178,136209,136008],{"class":195},[178,136211,944],{"class":319},[178,136213,136033],{"class":188},[178,136215,15474],{"class":319},[178,136217,135996],{"class":195},[178,136219,944],{"class":319},[178,136221,136042],{"class":188},[178,136223,39779],{"class":319},[178,136225,136226,136228,136230,136232,136234,136236,136238,136240],{"class":180,"line":752},[178,136227,136008],{"class":195},[178,136229,944],{"class":319},[178,136231,136053],{"class":188},[178,136233,15474],{"class":319},[178,136235,135996],{"class":195},[178,136237,944],{"class":319},[178,136239,136062],{"class":188},[178,136241,4495],{"class":319},[178,136243,136244],{"class":180,"line":757},[178,136245,3371],{"class":319},[178,136247,136248,136250],{"class":180,"line":763},[178,136249,135674],{"class":184},[178,136251,17330],{"class":319},[178,136253,136254,136256,136258,136260],{"class":180,"line":769},[178,136255,135955],{"class":195},[178,136257,53167],{"class":319},[178,136259,135960],{"class":188},[178,136261,3100],{"class":319},[178,136263,136264,136266,136268,136270],{"class":180,"line":774},[178,136265,136089],{"class":195},[178,136267,53167],{"class":319},[178,136269,65561],{"class":195},[178,136271,3100],{"class":319},[178,136273,136274],{"class":180,"line":780},[178,136275,3371],{"class":319},[3269,136277],{"style":127773,"src":136278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,136280,136281],{},"更加细节展示：",[26,136283,136284],{},[29,136285,136286],{},"html 标签内添加小图标",[3269,136288],{"style":127773,"src":136289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[26,136291,136292],{"start":263},[29,136293,136294],{},"给标签定义字体",[154,136296,136297],{"className":128664,"code":132021,"language":128666,"meta":160,"style":160},[70,136298,136299,136303,136317,136321],{"__ignoreMap":160},[178,136300,136301],{"class":180,"line":181},[178,136302,132028],{"class":2008},[178,136304,136305,136307,136309,136311,136313,136315],{"class":180,"line":263},[178,136306,320],{"class":319},[178,136308,53341],{"class":323},[178,136310,55210],{"class":184},[178,136312,330],{"class":319},[178,136314,132041],{"class":188},[178,136316,336],{"class":319},[178,136318,136319],{"class":180,"line":274},[178,136320,132048],{"class":319},[178,136322,136323,136325,136327],{"class":180,"line":354},[178,136324,367],{"class":319},[178,136326,53341],{"class":323},[178,136328,336],{"class":319},[19,136330,136331],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[3269,136333],{"style":127773,"src":136334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[387,136336,136338],{"id":136337},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,136340,136341],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,136343,136344,136345,136348],{},"把压缩包里面的 ",[2093,136346,136347],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,136350,136351],{},"打开网站，点下方：",[3269,136353],{"style":127773,"src":136354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[3269,136356],{"style":127773,"src":136357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[3269,136359],{"style":127773,"src":136360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,136362,136363],{},"点yes重新加载",[19,136365,136366],{},"然后重复之前的操作就可以实现了",[19,136368,136369],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[387,136371,136373],{"id":136372},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[3269,136375],{"style":127773,"src":136376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[1853,136378,136379],{},"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":160,"searchDepth":263,"depth":263,"links":136381},[136382,136388,136393],{"id":134985,"depth":263,"text":134986,"children":136383},[136384,136385,136386,136387],{"id":134997,"depth":274,"text":134998},{"id":135026,"depth":274,"text":135027},{"id":135054,"depth":274,"text":135055},{"id":135112,"depth":274,"text":135113},{"id":135584,"depth":263,"text":135585,"children":136389},[136390,136391,136392],{"id":135588,"depth":274,"text":135589},{"id":135633,"depth":274,"text":135634},{"id":135649,"depth":274,"text":135650},{"id":135749,"depth":263,"text":135750,"children":136394},[136395,136396,136397,136398,136399,136400],{"id":135753,"depth":274,"text":135754},{"id":135787,"depth":274,"text":135788},{"id":135810,"depth":274,"text":135811},{"id":135857,"depth":274,"text":135858},{"id":136337,"depth":274,"text":136338},{"id":136372,"depth":274,"text":136373},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":134977,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136407,"title":136408,"body":136409,"description":25135,"extension":1880,"meta":137636,"navigation":721,"path":137637,"seo":137638,"stem":137639,"__hash__":137640},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136410,"toc":137617},[136411,136414,136418,136421,136435,136503,136533,136536,136540,136544,136646,136693,136697,136700,136703,136737,136740,136743,136746,136749,136752,136755,136758,136760,136763,136766,136769,136772,136775,136778,136781,136809,136812,136816,136819,136826,136829,136832,136858,136861,136865,136868,136871,136878,136882,136885,136887,136919,136922,136925,136937,136943,136946,136949,136952,136954,136958,136961,136964,136967,137012,137016,137018,137021,137028,137070,137073,137077,137082,137096,137100,137103,137106,137109,137112,137115,137149,137152,137155,137209,137212,137215,137218,137221,137273,137276,137279,137328,137332,137334,137337,137340,137343,137346,137349,137407,137410,137416,137419,137422,137454,137457,137461,137465,137468,137500,137504,137507,137551,137555,137558,137561,137564,137567,137570,137573,137576,137578,137581,137583,137586,137589,137592,137595,137600,137603,137605,137608,137611,137614],[10,136412,136408],{"id":136413},"_13-界面样式与布局技巧",[14,136415,136417],{"id":136416},"_131-css三角","13.1 css三角",[19,136419,136420],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[2946,136422,136423,136426,136429,136432],{},[29,136424,136425],{},"用css 边框可以模拟三角效果",[29,136427,136428],{},"宽度高度为0",[29,136430,136431],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[29,136433,136434],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[154,136436,136438],{"className":127917,"code":136437,"language":127919,"meta":160,"style":160},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[70,136439,136440,136445,136452,136462,136472,136488,136499],{"__ignoreMap":160},[178,136441,136442],{"class":180,"line":181},[178,136443,136444],{"class":2008},"\u002F* CSS 实现三角形 *\u002F\n",[178,136446,136447,136450],{"class":180,"line":263},[178,136448,136449],{"class":184},".triangle",[178,136451,17330],{"class":319},[178,136453,136454,136456,136458,136460],{"class":180,"line":274},[178,136455,72288],{"class":195},[178,136457,53167],{"class":319},[178,136459,2133],{"class":195},[178,136461,3100],{"class":319},[178,136463,136464,136466,136468,136470],{"class":180,"line":354},[178,136465,72508],{"class":195},[178,136467,53167],{"class":319},[178,136469,2133],{"class":195},[178,136471,3100],{"class":319},[178,136473,136474,136476,136478,136480,136482,136484,136486],{"class":180,"line":364},[178,136475,72616],{"class":195},[178,136477,53167],{"class":319},[178,136479,2386],{"class":195},[178,136481,53222],{"class":699},[178,136483,53251],{"class":195},[178,136485,65711],{"class":195},[178,136487,3100],{"class":319},[178,136489,136490,136493,136495,136497],{"class":180,"line":740},[178,136491,136492],{"class":195},"  border-bottom-color",[178,136494,53167],{"class":319},[178,136496,64090],{"class":195},[178,136498,3100],{"class":319},[178,136500,136501],{"class":180,"line":746},[178,136502,3371],{"class":319},[154,136504,136505],{"className":127917,"code":132074,"language":127919,"meta":160,"style":160},[70,136506,136507,136513,136529],{"__ignoreMap":160},[178,136508,136509,136511],{"class":180,"line":181},[178,136510,53341],{"class":323},[178,136512,17330],{"class":319},[178,136514,136515,136517,136519,136521,136523,136525,136527],{"class":180,"line":263},[178,136516,72616],{"class":195},[178,136518,53167],{"class":319},[178,136520,1665],{"class":195},[178,136522,53222],{"class":699},[178,136524,53251],{"class":195},[178,136526,131309],{"class":195},[178,136528,3100],{"class":319},[178,136530,136531],{"class":180,"line":274},[178,136532,3371],{"class":319},[3269,136534],{"style":127773,"src":136535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136537,136539],{"id":136538},"_132-css用户界面样式","13.2 css用户界面样式",[387,136541,136543],{"id":136542},"_1321-鼠标样式","13.2.1 鼠标样式",[154,136545,136547],{"className":127917,"code":136546,"language":127919,"meta":160,"style":160},"\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",[70,136548,136549,136554,136573,136591,136610,136627],{"__ignoreMap":160},[178,136550,136551],{"class":180,"line":181},[178,136552,136553],{"class":2008},"\u002F* 鼠标样式 *\u002F\n",[178,136555,136556,136558,136560,136563,136565,136567,136570],{"class":180,"line":263},[178,136557,53341],{"class":323},[178,136559,81526],{"class":319},[178,136561,136562],{"class":195},"cursor",[178,136564,53167],{"class":319},[178,136566,63751],{"class":195},[178,136568,136569],{"class":319},"; }   ",[178,136571,136572],{"class":2008},"\u002F* 手型 *\u002F\n",[178,136574,136575,136577,136579,136581,136583,136586,136588],{"class":180,"line":274},[178,136576,53341],{"class":323},[178,136578,81526],{"class":319},[178,136580,136562],{"class":195},[178,136582,53167],{"class":319},[178,136584,136585],{"class":195},"default",[178,136587,136569],{"class":319},[178,136589,136590],{"class":2008},"\u002F* 默认 *\u002F\n",[178,136592,136593,136595,136597,136599,136601,136604,136607],{"class":180,"line":354},[178,136594,53341],{"class":323},[178,136596,81526],{"class":319},[178,136598,136562],{"class":195},[178,136600,53167],{"class":319},[178,136602,136603],{"class":195},"move",[178,136605,136606],{"class":319},"; }      ",[178,136608,136609],{"class":2008},"\u002F* 移动 *\u002F\n",[178,136611,136612,136614,136616,136618,136620,136622,136624],{"class":180,"line":364},[178,136613,53341],{"class":323},[178,136615,81526],{"class":319},[178,136617,136562],{"class":195},[178,136619,53167],{"class":319},[178,136621,159],{"class":195},[178,136623,136606],{"class":319},[178,136625,136626],{"class":2008},"\u002F* 文本 *\u002F\n",[178,136628,136629,136631,136633,136635,136637,136640,136643],{"class":180,"line":740},[178,136630,53341],{"class":323},[178,136632,81526],{"class":319},[178,136634,136562],{"class":195},[178,136636,53167],{"class":319},[178,136638,136639],{"class":195},"not-allowed",[178,136641,136642],{"class":319},"; } ",[178,136644,136645],{"class":2008},"\u002F* 禁止 *\u002F\n",[45,136647,136648,136656],{},[48,136649,136650],{},[51,136651,136652,136654],{},[54,136653,128381],{"align":56},[54,136655,29238],{"align":56},[62,136657,136658,136665,136672,136679,136686],{},[51,136659,136660,136662],{},[67,136661,136585],{"align":56},[67,136663,136664],{"align":56},"小白 默认",[51,136666,136667,136669],{},[67,136668,63751],{"align":56},[67,136670,136671],{"align":56},"小手",[51,136673,136674,136676],{},[67,136675,136603],{"align":56},[67,136677,136678],{"align":56},"移动",[51,136680,136681,136683],{},[67,136682,159],{"align":56},[67,136684,136685],{"align":56},"文本",[51,136687,136688,136690],{},[67,136689,136639],{"align":56},[67,136691,136692],{"align":56},"禁止",[387,136694,136696],{"id":136695},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,136698,136699],{},"去除表单轮廓线",[19,136701,136702],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[154,136704,136705],{"className":127917,"code":131281,"language":127919,"meta":160,"style":160},[70,136706,136707,136711,136717,136733],{"__ignoreMap":160},[178,136708,136709],{"class":180,"line":181},[178,136710,131288],{"class":2008},[178,136712,136713,136715],{"class":180,"line":263},[178,136714,53341],{"class":323},[178,136716,17330],{"class":319},[178,136718,136719,136721,136723,136725,136727,136729,136731],{"class":180,"line":274},[178,136720,72616],{"class":195},[178,136722,53167],{"class":319},[178,136724,1665],{"class":195},[178,136726,53222],{"class":699},[178,136728,53251],{"class":195},[178,136730,131309],{"class":195},[178,136732,3100],{"class":319},[178,136734,136735],{"class":180,"line":354},[178,136736,3371],{"class":319},[19,136738,136739],{},"文本域：",[3269,136741],{"style":127773,"src":136742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,136744,136745],{},"此时会有一个空白区域",[3269,136747],{"style":127773,"src":136748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,136750,136751],{},"写在同一行就不会出现这个问题",[3269,136753],{"style":127773,"src":136754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,136756,136757],{},"文本域是行内块元素，一定记住！！！",[19,136759,99946],{},[3269,136761],{"style":127773,"src":136762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,136764,136765],{},"文本域尽量放在一行",[19,136767,136768],{},"知识回顾：cols是列，rols是行",[3269,136770],{"style":127773,"src":136771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,136773,136774],{},"它可以进行拖动，显然这是我们不愿意看到的",[3269,136776],{"style":127773,"src":136777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,136779,136780],{},"使用resize进行解决",[154,136782,136784],{"className":127917,"code":136783,"language":127919,"meta":160,"style":160},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[70,136785,136786,136792,136805],{"__ignoreMap":160},[178,136787,136788,136790],{"class":180,"line":181},[178,136789,55543],{"class":323},[178,136791,17330],{"class":319},[178,136793,136794,136796,136798,136800,136802],{"class":180,"line":263},[178,136795,72518],{"class":195},[178,136797,53167],{"class":319},[178,136799,56458],{"class":195},[178,136801,131780],{"class":319},[178,136803,136804],{"class":2008},"\u002F* 取消表单轮廓线 *\u002F\n",[178,136806,136807],{"class":180,"line":274},[178,136808,3371],{"class":319},[19,136810,136811],{},"此时就无法通过右下方实现拖动了",[387,136813,136815],{"id":136814},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,136817,136818],{},"实现一个盒子中的文字和图片对齐",[19,136820,136821,136822,136825],{},"用于设置一个元素的 ",[2093,136823,136824],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,136827,136828],{},"图片和文字默认是基线对齐",[3269,136830],{"style":127773,"src":136831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[154,136833,136834],{"className":127917,"code":136783,"language":127919,"meta":160,"style":160},[70,136835,136836,136842,136854],{"__ignoreMap":160},[178,136837,136838,136840],{"class":180,"line":181},[178,136839,55543],{"class":323},[178,136841,17330],{"class":319},[178,136843,136844,136846,136848,136850,136852],{"class":180,"line":263},[178,136845,72518],{"class":195},[178,136847,53167],{"class":319},[178,136849,56458],{"class":195},[178,136851,131780],{"class":319},[178,136853,136804],{"class":2008},[178,136855,136856],{"class":180,"line":274},[178,136857,3371],{"class":319},[3269,136859],{"style":127773,"src":136860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[23756,136862,136864],{"id":136863},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,136866,136867],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[3269,136869],{"style":127773,"src":136870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,136872,136873,136874,136877],{},"此时可以给图片、表单这些行内块元素的 ",[2093,136875,136876],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[23756,136879,136881],{"id":136880},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,136883,136884],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,136886,528],{},[154,136888,136890],{"className":127917,"code":136889,"language":127919,"meta":160,"style":160},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[70,136891,136892,136897,136903,136915],{"__ignoreMap":160},[178,136893,136894],{"class":180,"line":181},[178,136895,136896],{"class":2008},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[178,136898,136899,136901],{"class":180,"line":263},[178,136900,3269],{"class":323},[178,136902,17330],{"class":319},[178,136904,136905,136908,136910,136913],{"class":180,"line":274},[178,136906,136907],{"class":195},"  vertical-align",[178,136909,53167],{"class":319},[178,136911,136912],{"class":195},"middle",[178,136914,3100],{"class":319},[178,136916,136917],{"class":180,"line":354},[178,136918,3371],{"class":319},[3269,136920],{"style":127773,"src":136921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,136923,136924],{},"主要解决方法有两种：",[26,136926,136927],{},[29,136928,136929,136932,136933,136936],{},[2093,136930,136931],{},"给图片"," 添加 ",[2093,136934,136935],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,136938,136939,136940],{},"2.把图片转换为块级元素 ",[2093,136941,136942],{},"display: block",[19,136944,136945],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,136947,136948],{},"img {",[19,136950,136951],{},"vertical-align:middle;",[19,136953,2885],{},[387,136955,136957],{"id":136956},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,136959,136960],{},"效果：",[3269,136962],{"style":127773,"src":136963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,136965,136966],{},"单行文本溢出显示省略号--必须满足三个条件：",[154,136968,136970],{"className":127917,"code":136969,"language":127919,"meta":160,"style":160},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[70,136971,136972,136977,136983,136993,136998,137008],{"__ignoreMap":160},[178,136973,136974],{"class":180,"line":181},[178,136975,136976],{"class":2008},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[178,136978,136979,136981],{"class":180,"line":263},[178,136980,3269],{"class":323},[178,136982,17330],{"class":319},[178,136984,136985,136987,136989,136991],{"class":180,"line":274},[178,136986,136907],{"class":195},[178,136988,53167],{"class":319},[178,136990,136912],{"class":195},[178,136992,3100],{"class":319},[178,136994,136995],{"class":180,"line":354},[178,136996,136997],{"class":2008},"  \u002F* 或 *\u002F\n",[178,136999,137000,137002,137004,137006],{"class":180,"line":364},[178,137001,129533],{"class":195},[178,137003,53167],{"class":319},[178,137005,62590],{"class":195},[178,137007,3100],{"class":319},[178,137009,137010],{"class":180,"line":740},[178,137011,3371],{"class":319},[387,137013,137015],{"id":137014},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,137017,136960],{},[3269,137019],{"style":127773,"src":137020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,137022,137023,137024,137027],{},"多行文本溢出显示省略号， ",[2093,137025,137026],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[154,137029,137030],{"className":127917,"code":136969,"language":127919,"meta":160,"style":160},[70,137031,137032,137036,137042,137052,137056,137066],{"__ignoreMap":160},[178,137033,137034],{"class":180,"line":181},[178,137035,136976],{"class":2008},[178,137037,137038,137040],{"class":180,"line":263},[178,137039,3269],{"class":323},[178,137041,17330],{"class":319},[178,137043,137044,137046,137048,137050],{"class":180,"line":274},[178,137045,136907],{"class":195},[178,137047,53167],{"class":319},[178,137049,136912],{"class":195},[178,137051,3100],{"class":319},[178,137053,137054],{"class":180,"line":354},[178,137055,136997],{"class":2008},[178,137057,137058,137060,137062,137064],{"class":180,"line":364},[178,137059,129533],{"class":195},[178,137061,53167],{"class":319},[178,137063,62590],{"class":195},[178,137065,3100],{"class":319},[178,137067,137068],{"class":180,"line":740},[178,137069,3371],{"class":319},[19,137071,137072],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,137074,137076],{"id":137075},"_133-常见布局技巧","13.3 常见布局技巧",[19,137078,137079],{},[2093,137080,137081],{},"巧妙利用一个技术更快更好的布局：",[26,137083,137084,137087,137090,137093],{},[29,137085,137086],{},"margin负值的运用",[29,137088,137089],{},"文字围绕浮动元素",[29,137091,137092],{},"行内块的巧妙运用",[29,137094,137095],{},"CSS三角强化",[387,137097,137099],{"id":137098},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,137101,137102],{},"应用场景：",[3269,137104],{"style":127773,"src":137105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[3269,137107],{"style":127773,"src":137108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,137110,137111],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,137113,137114],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[154,137116,137117],{"className":127917,"code":131281,"language":127919,"meta":160,"style":160},[70,137118,137119,137123,137129,137145],{"__ignoreMap":160},[178,137120,137121],{"class":180,"line":181},[178,137122,131288],{"class":2008},[178,137124,137125,137127],{"class":180,"line":263},[178,137126,53341],{"class":323},[178,137128,17330],{"class":319},[178,137130,137131,137133,137135,137137,137139,137141,137143],{"class":180,"line":274},[178,137132,72616],{"class":195},[178,137134,53167],{"class":319},[178,137136,1665],{"class":195},[178,137138,53222],{"class":699},[178,137140,53251],{"class":195},[178,137142,131309],{"class":195},[178,137144,3100],{"class":319},[178,137146,137147],{"class":180,"line":354},[178,137148,3371],{"class":319},[3269,137150],{"style":127773,"src":137151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,137153,137154],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[154,137156,137158],{"className":127917,"code":137157,"language":127919,"meta":160,"style":160},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[70,137159,137160,137165,137171,137181,137193,137205],{"__ignoreMap":160},[178,137161,137162],{"class":180,"line":181},[178,137163,137164],{"class":2008},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[178,137166,137167,137169],{"class":180,"line":263},[178,137168,131765],{"class":184},[178,137170,17330],{"class":319},[178,137172,137173,137175,137177,137179],{"class":180,"line":274},[178,137174,133723],{"class":195},[178,137176,53167],{"class":319},[178,137178,56485],{"class":195},[178,137180,3100],{"class":319},[178,137182,137183,137185,137187,137189,137191],{"class":180,"line":354},[178,137184,133737],{"class":195},[178,137186,53167],{"class":319},[178,137188,2386],{"class":195},[178,137190,53222],{"class":699},[178,137192,3100],{"class":319},[178,137194,137195,137197,137199,137201,137203],{"class":180,"line":364},[178,137196,133754],{"class":195},[178,137198,53167],{"class":319},[178,137200,2640],{"class":195},[178,137202,53222],{"class":699},[178,137204,3100],{"class":319},[178,137206,137207],{"class":180,"line":740},[178,137208,3371],{"class":319},[19,137210,137211],{},"加上上述代码会发现：",[3269,137213],{"style":127773,"src":137214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,137216,137217],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,137219,137220],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[154,137222,137223],{"className":127917,"code":137157,"language":127919,"meta":160,"style":160},[70,137224,137225,137229,137235,137245,137257,137269],{"__ignoreMap":160},[178,137226,137227],{"class":180,"line":181},[178,137228,137164],{"class":2008},[178,137230,137231,137233],{"class":180,"line":263},[178,137232,131765],{"class":184},[178,137234,17330],{"class":319},[178,137236,137237,137239,137241,137243],{"class":180,"line":274},[178,137238,133723],{"class":195},[178,137240,53167],{"class":319},[178,137242,56485],{"class":195},[178,137244,3100],{"class":319},[178,137246,137247,137249,137251,137253,137255],{"class":180,"line":354},[178,137248,133737],{"class":195},[178,137250,53167],{"class":319},[178,137252,2386],{"class":195},[178,137254,53222],{"class":699},[178,137256,3100],{"class":319},[178,137258,137259,137261,137263,137265,137267],{"class":180,"line":364},[178,137260,133754],{"class":195},[178,137262,53167],{"class":319},[178,137264,2640],{"class":195},[178,137266,53222],{"class":699},[178,137268,3100],{"class":319},[178,137270,137271],{"class":180,"line":740},[178,137272,3371],{"class":319},[19,137274,137275],{},"解决方式2：",[19,137277,137278],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[154,137280,137282],{"className":127917,"code":137281,"language":127919,"meta":160,"style":160},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[70,137283,137284,137290,137300,137312,137324],{"__ignoreMap":160},[178,137285,137286,137288],{"class":180,"line":181},[178,137287,53341],{"class":323},[178,137289,17330],{"class":319},[178,137291,137292,137294,137296,137298],{"class":180,"line":263},[178,137293,133723],{"class":195},[178,137295,53167],{"class":319},[178,137297,56485],{"class":195},[178,137299,3100],{"class":319},[178,137301,137302,137304,137306,137308,137310],{"class":180,"line":274},[178,137303,133737],{"class":195},[178,137305,53167],{"class":319},[178,137307,2386],{"class":195},[178,137309,53222],{"class":699},[178,137311,3100],{"class":319},[178,137313,137314,137316,137318,137320,137322],{"class":180,"line":354},[178,137315,133754],{"class":195},[178,137317,53167],{"class":319},[178,137319,2640],{"class":195},[178,137321,53222],{"class":699},[178,137323,3100],{"class":319},[178,137325,137326],{"class":180,"line":364},[178,137327,3371],{"class":319},[387,137329,137331],{"id":137330},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,137333,137102],{},[3269,137335],{"style":127773,"src":137336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,137338,137339],{},"实现结构图：",[3269,137341],{"style":127773,"src":137342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,137344,137345],{},"巧妙运用浮动元素不会压住文字的特性",[19,137347,137348],{},"代码显示：",[154,137350,137352],{"className":127917,"code":137351,"language":127919,"meta":160,"style":160},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[70,137353,137354,137360,137370,137374,137379,137383,137389,137403],{"__ignoreMap":160},[178,137355,137356,137358],{"class":180,"line":181},[178,137357,131765],{"class":184},[178,137359,17330],{"class":319},[178,137361,137362,137364,137366,137368],{"class":180,"line":263},[178,137363,132397],{"class":195},[178,137365,53167],{"class":319},[178,137367,56],{"class":195},[178,137369,3100],{"class":319},[178,137371,137372],{"class":180,"line":274},[178,137373,3371],{"class":319},[178,137375,137376],{"class":180,"line":354},[178,137377,137378],{"class":319},"```Css\n",[178,137380,137381],{"class":180,"line":364},[178,137382,131760],{"class":2008},[178,137384,137385,137387],{"class":180,"line":740},[178,137386,131765],{"class":184},[178,137388,17330],{"class":319},[178,137390,137391,137393,137395,137397,137399,137401],{"class":180,"line":746},[178,137392,72190],{"class":195},[178,137394,53167],{"class":319},[178,137396,2133],{"class":195},[178,137398,53286],{"class":195},[178,137400,131780],{"class":319},[178,137402,131783],{"class":2008},[178,137404,137405],{"class":180,"line":752},[178,137406,3371],{"class":319},[19,137408,137409],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[154,137411,137414],{"className":137412,"code":137413,"language":159},[157],"\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",[70,137415,137413],{"__ignoreMap":160},[3269,137417],{"style":127773,"src":137418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,137420,137421],{},"最终展示结果：",[154,137423,137424],{"className":127917,"code":131753,"language":127919,"meta":160,"style":160},[70,137425,137426,137430,137436,137450],{"__ignoreMap":160},[178,137427,137428],{"class":180,"line":181},[178,137429,131760],{"class":2008},[178,137431,137432,137434],{"class":180,"line":263},[178,137433,131765],{"class":184},[178,137435,17330],{"class":319},[178,137437,137438,137440,137442,137444,137446,137448],{"class":180,"line":274},[178,137439,72190],{"class":195},[178,137441,53167],{"class":319},[178,137443,2133],{"class":195},[178,137445,53286],{"class":195},[178,137447,131780],{"class":319},[178,137449,131783],{"class":2008},[178,137451,137452],{"class":180,"line":354},[178,137453,3371],{"class":319},[3269,137455],{"style":127773,"src":137456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137458,137460],{"id":137459},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[387,137462,137464],{"id":137463},"_1341-原理","13.4.1 原理",[3269,137466],{"style":127773,"src":137467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[154,137469,137470],{"className":127917,"code":131753,"language":127919,"meta":160,"style":160},[70,137471,137472,137476,137482,137496],{"__ignoreMap":160},[178,137473,137474],{"class":180,"line":181},[178,137475,131760],{"class":2008},[178,137477,137478,137480],{"class":180,"line":263},[178,137479,131765],{"class":184},[178,137481,17330],{"class":319},[178,137483,137484,137486,137488,137490,137492,137494],{"class":180,"line":274},[178,137485,72190],{"class":195},[178,137487,53167],{"class":319},[178,137489,2133],{"class":195},[178,137491,53286],{"class":195},[178,137493,131780],{"class":319},[178,137495,131783],{"class":2008},[178,137497,137498],{"class":180,"line":354},[178,137499,3371],{"class":319},[387,137501,137503],{"id":137502},"_1342-实例","13.4.2 实例",[3269,137505],{"style":127773,"src":137506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[154,137508,137509],{"className":127917,"code":132383,"language":127919,"meta":160,"style":160},[70,137510,137511,137517,137527,137531,137537,137547],{"__ignoreMap":160},[178,137512,137513,137515],{"class":180,"line":181},[178,137514,132390],{"class":184},[178,137516,17330],{"class":319},[178,137518,137519,137521,137523,137525],{"class":180,"line":263},[178,137520,132397],{"class":195},[178,137522,53167],{"class":319},[178,137524,56],{"class":195},[178,137526,3100],{"class":319},[178,137528,137529],{"class":180,"line":274},[178,137530,3371],{"class":319},[178,137532,137533,137535],{"class":180,"line":354},[178,137534,132412],{"class":184},[178,137536,17330],{"class":319},[178,137538,137539,137541,137543,137545],{"class":180,"line":364},[178,137540,132397],{"class":195},[178,137542,53167],{"class":319},[178,137544,74242],{"class":195},[178,137546,3100],{"class":319},[178,137548,137549],{"class":180,"line":740},[178,137550,3371],{"class":319},[14,137552,137554],{"id":137553},"_135-css的初始化","13.5 css的初始化",[19,137556,137557],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,137559,137560],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,137562,137563],{},"每个网页都必须首先进行 CSS初始化。",[19,137565,137566],{},"这里我们以 京东CSS初始化代码为例。",[19,137568,137569],{},"在网页右键查看网页源代码",[19,137571,137572],{},"找到css的link引入语句",[19,137574,137575],{},"然后ctrl+f 输入body",[19,137577,78946],{},[3269,137579],{"style":127773,"src":137580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,137582,78969],{},[3269,137584],{"style":127773,"src":137585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,137587,137588],{},"③打开了网页上传压缩的代码",[3269,137590],{"style":127773,"src":137591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,137593,137594],{},"④从body前可以查看这个网页的初始化代码",[19,137596,137597],{},[2093,137598,137599],{},"Unicode编码字体：",[19,137601,137602],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,137604,84922],{},[19,137606,137607],{},"黑体 \\9ED1\\4F53",[19,137609,137610],{},"宋体 \\5B8B\\4F53",[19,137612,137613],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[1853,137615,137616],{},"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":160,"searchDepth":263,"depth":263,"links":137618},[137619,137620,137627,137631,137635],{"id":136416,"depth":263,"text":136417},{"id":136538,"depth":263,"text":136539,"children":137621},[137622,137623,137624,137625,137626],{"id":136542,"depth":274,"text":136543},{"id":136695,"depth":274,"text":136696},{"id":136814,"depth":274,"text":136815},{"id":136956,"depth":274,"text":136957},{"id":137014,"depth":274,"text":137015},{"id":137075,"depth":263,"text":137076,"children":137628},[137629,137630],{"id":137098,"depth":274,"text":137099},{"id":137330,"depth":274,"text":137331},{"id":137459,"depth":263,"text":137460,"children":137632},[137633,137634],{"id":137463,"depth":274,"text":137464},{"id":137502,"depth":274,"text":137503},{"id":137553,"depth":263,"text":137554},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136408,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137642,"title":137643,"body":137644,"description":25135,"extension":1880,"meta":139330,"navigation":721,"path":139331,"seo":139332,"stem":139333,"__hash__":139334},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137645,"toc":139319},[137646,137649,137653,137657,137660,137667,137670,137673,137711,137714,137716,137730,137734,137743,137747,137752,137755,137758,137761,137796,137801,137804,137834,137837,137842,137845,137848,137878,137881,137935,137938,137942,137947,137959,137962,137966,137996,137999,138004,138007,138037,138040,138044,138061,138065,138069,138072,138105,138108,138112,138115,138118,138121,138124,138127,138238,138241,138244,138247,138349,138352,138356,138360,138364,138367,138407,138410,138412,138428,138432,138435,138440,138521,138524,138527,138653,138658,138661,138669,138672,138677,138762,138765,138769,138772,138775,138779,138799,138804,138888,138891,138896,138899,138902,138980,138983,138986,138989,138992,138995,139000,139003,139006,139078,139081,139086,139089,139186,139189,139195,139198,139201,139204,139207,139210,139213,139216,139219,139223,139228,139231,139264,139269,139272,139313,139316],[10,137647,137643],{"id":137648},"_14-html5与css3新特性",[14,137650,137652],{"id":137651},"_141-html5的新特性","14.1 HTML5的新特性",[387,137654,137656],{"id":137655},"_1411-基本标签","14.1.1 基本标签",[19,137658,137659],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,137661,137662,137663,137666],{},"这些新特性都有兼容性问题，基本是 ",[2093,137664,137665],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,137668,137669],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,137671,137672],{},"现在使用的是新特性：",[2946,137674,137675,137681,137687,137693,137699,137705],{},[29,137676,137677,137680],{},[70,137678,137679],{},"\u003Cheader>"," 头部标签",[29,137682,137683,137686],{},[70,137684,137685],{},"\u003Cnav>"," 导航标签",[29,137688,137689,137692],{},[70,137690,137691],{},"\u003Carticle>"," 内容标签",[29,137694,137695,137698],{},[70,137696,137697],{},"\u003Csection>"," 定义文档某个区域",[29,137700,137701,137704],{},[70,137702,137703],{},"\u003Caside>"," 侧边栏标签",[29,137706,137707,137710],{},[70,137708,137709],{},"\u003Cfooter>"," 尾部标签",[3269,137712],{"style":127773,"src":137713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,137715,1981],{},[2946,137717,137718,137721,137724,137727],{},[29,137719,137720],{},"这种语义化标准主要是针对搜索引擎的",[29,137722,137723],{},"这些标签页面中可以经常使用",[29,137725,137726],{},"在IE9中，需要把这些元素转换为块级元素",[29,137728,137729],{},"移动端更喜欢使用这些标签",[387,137731,137733],{"id":137732},"_1412-多媒体标签","14.1.2 多媒体标签",[19,137735,137736,137737,137739,137740,137742],{},"音频 ",[2093,137738,29923],{}," 和视频 ",[2093,137741,29932],{}," 两个标签",[23756,137744,137746],{"id":137745},"_14121-视频标签-video","14.1.2.1 视频标签- video",[26,137748,137749],{},[29,137750,137751],{},"支持格式：",[3269,137753],{"style":127773,"src":137754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,137756,137757],{},"尽量使用MP4，兼容性好",[19,137759,137760],{},"用MP4就可以",[154,137762,137764],{"className":128664,"code":137763,"language":128666,"meta":160,"style":160},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[70,137765,137766],{"__ignoreMap":160},[178,137767,137768,137770,137772,137774,137776,137779,137781,137784,137787,137790,137792,137794],{"class":180,"line":181},[178,137769,320],{"class":319},[178,137771,29932],{"class":323},[178,137773,56960],{"class":184},[178,137775,330],{"class":319},[178,137777,137778],{"class":188},"\"movie.mp4\"",[178,137780,94138],{"class":184},[178,137782,137783],{"class":184}," autoplay",[178,137785,137786],{"class":184}," muted",[178,137788,137789],{"class":184}," loop",[178,137791,57035],{"class":319},[178,137793,29932],{"class":323},[178,137795,336],{"class":319},[26,137797,137798],{"start":263},[29,137799,137800],{},"兼容写法",[19,137802,137803],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[154,137805,137806],{"className":128664,"code":137763,"language":128666,"meta":160,"style":160},[70,137807,137808],{"__ignoreMap":160},[178,137809,137810,137812,137814,137816,137818,137820,137822,137824,137826,137828,137830,137832],{"class":180,"line":181},[178,137811,320],{"class":319},[178,137813,29932],{"class":323},[178,137815,56960],{"class":184},[178,137817,330],{"class":319},[178,137819,137778],{"class":188},[178,137821,94138],{"class":184},[178,137823,137783],{"class":184},[178,137825,137786],{"class":184},[178,137827,137789],{"class":184},[178,137829,57035],{"class":319},[178,137831,29932],{"class":323},[178,137833,336],{"class":319},[19,137835,137836],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,137838,137839],{"start":274},[29,137840,137841],{},"video常用属性",[3269,137843],{"style":127773,"src":137844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,137846,137847],{},"poster属性后面是跟的等待加载图片的地址",[154,137849,137850],{"className":128664,"code":135419,"language":128666,"meta":160,"style":160},[70,137851,137852],{"__ignoreMap":160},[178,137853,137854,137856,137858,137860,137862,137864,137866,137868,137870,137872,137874,137876],{"class":180,"line":181},[178,137855,320],{"class":319},[178,137857,3269],{"class":323},[178,137859,56960],{"class":184},[178,137861,330],{"class":319},[178,137863,135434],{"class":188},[178,137865,56968],{"class":184},[178,137867,330],{"class":319},[178,137869,135441],{"class":188},[178,137871,135444],{"class":184},[178,137873,330],{"class":319},[178,137875,135449],{"class":188},[178,137877,336],{"class":319},[19,137879,137880],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[154,137882,137884],{"className":127917,"code":137883,"language":127919,"meta":160,"style":160},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[70,137885,137886,137891,137897,137921,137926,137931],{"__ignoreMap":160},[178,137887,137888],{"class":180,"line":181},[178,137889,137890],{"class":2008},"\u002F* 2D 位移 *\u002F\n",[178,137892,137893,137895],{"class":180,"line":263},[178,137894,53341],{"class":323},[178,137896,17330],{"class":319},[178,137898,137899,137902,137904,137907,137909,137911,137913,137915,137917,137919],{"class":180,"line":274},[178,137900,137901],{"class":195},"  transform",[178,137903,53167],{"class":319},[178,137905,137906],{"class":195},"translate",[178,137908,944],{"class":319},[178,137910,2251],{"class":195},[178,137912,53222],{"class":699},[178,137914,14196],{"class":319},[178,137916,2596],{"class":195},[178,137918,53222],{"class":699},[178,137920,4495],{"class":319},[178,137922,137923],{"class":180,"line":354},[178,137924,137925],{"class":2008},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[178,137927,137928],{"class":180,"line":364},[178,137929,137930],{"class":2008},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[178,137932,137933],{"class":180,"line":740},[178,137934,3371],{"class":319},[19,137936,137937],{},"muted:自动静音属性",[23756,137939,137941],{"id":137940},"_14122-音频标签audio","14.1.2.2 音频标签audio",[26,137943,137944],{},[29,137945,137946],{},"基本使用",[19,137948,137949,137950,137955,137956],{},"当前 ",[2093,137951,137952],{},[70,137953,137954],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[2093,137957,137958],{},"mp3格式",[3269,137960],{"style":127773,"src":137961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[26,137963,137964],{"start":263},[29,137965,137800],{},[154,137967,137968],{"className":128664,"code":137763,"language":128666,"meta":160,"style":160},[70,137969,137970],{"__ignoreMap":160},[178,137971,137972,137974,137976,137978,137980,137982,137984,137986,137988,137990,137992,137994],{"class":180,"line":181},[178,137973,320],{"class":319},[178,137975,29932],{"class":323},[178,137977,56960],{"class":184},[178,137979,330],{"class":319},[178,137981,137778],{"class":188},[178,137983,94138],{"class":184},[178,137985,137783],{"class":184},[178,137987,137786],{"class":184},[178,137989,137789],{"class":184},[178,137991,57035],{"class":319},[178,137993,29932],{"class":323},[178,137995,336],{"class":319},[19,137997,137998],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[26,138000,138001],{"start":274},[29,138002,138003],{},"常用属性",[3269,138005],{"style":127773,"src":138006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[154,138008,138009],{"className":128664,"code":137763,"language":128666,"meta":160,"style":160},[70,138010,138011],{"__ignoreMap":160},[178,138012,138013,138015,138017,138019,138021,138023,138025,138027,138029,138031,138033,138035],{"class":180,"line":181},[178,138014,320],{"class":319},[178,138016,29932],{"class":323},[178,138018,56960],{"class":184},[178,138020,330],{"class":319},[178,138022,137778],{"class":188},[178,138024,94138],{"class":184},[178,138026,137783],{"class":184},[178,138028,137786],{"class":184},[178,138030,137789],{"class":184},[178,138032,57035],{"class":319},[178,138034,29932],{"class":323},[178,138036,336],{"class":319},[19,138038,138039],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[23756,138041,138043],{"id":138042},"_14123-总结","14.1.2.3 总结",[2946,138045,138046,138049,138052,138055,138058],{},[29,138047,138048],{},"音频标签和视频标签使用方式基本一致",[29,138050,138051],{},"浏览器支持情况不同",[29,138053,138054],{},"谷歌浏览器把音频和视频自动播放禁止了",[29,138056,138057],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[29,138059,138060],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[387,138062,138064],{"id":138063},"_1413-表单元素","14.1.3 表单元素",[23756,138066,138068],{"id":138067},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[3269,138070],{"style":127773,"src":138071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[154,138073,138075],{"className":128664,"code":138074,"language":128666,"meta":160,"style":160},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[70,138076,138077],{"__ignoreMap":160},[178,138078,138079,138081,138083,138085,138087,138089,138091,138093,138096,138098,138100,138103],{"class":180,"line":181},[178,138080,320],{"class":319},[178,138082,55543],{"class":323},[178,138084,467],{"class":184},[178,138086,330],{"class":319},[178,138088,64419],{"class":188},[178,138090,426],{"class":184},[178,138092,330],{"class":319},[178,138094,138095],{"class":188},"\"username\"",[178,138097,62741],{"class":184},[178,138099,330],{"class":319},[178,138101,138102],{"class":188},"\"请输入用户名\"",[178,138104,336],{"class":319},[3269,138106],{"style":127773,"src":138107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[23756,138109,138111],{"id":138110},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[3269,138113],{"style":127773,"src":138114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,138116,138117],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,138119,138120],{},"快捷操作：",[3269,138122],{"style":127773,"src":138123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,138125,138126],{},"例子1：",[154,138128,138130],{"className":128664,"code":138129,"language":128666,"meta":160,"style":160},"\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",[70,138131,138132,138155,138182,138211,138230],{"__ignoreMap":160},[178,138133,138134,138136,138138,138140,138142,138145,138148,138150,138153],{"class":180,"line":181},[178,138135,320],{"class":319},[178,138137,68345],{"class":323},[178,138139,68348],{"class":184},[178,138141,330],{"class":319},[178,138143,138144],{"class":188},"\"\u002Fsubmit\"",[178,138146,138147],{"class":184}," method",[178,138149,330],{"class":319},[178,138151,138152],{"class":188},"\"post\"",[178,138154,336],{"class":319},[178,138156,138157,138159,138161,138163,138165,138167,138169,138171,138173,138175,138177,138180],{"class":180,"line":263},[178,138158,341],{"class":319},[178,138160,55543],{"class":323},[178,138162,467],{"class":184},[178,138164,330],{"class":319},[178,138166,64419],{"class":188},[178,138168,426],{"class":184},[178,138170,330],{"class":319},[178,138172,138095],{"class":188},[178,138174,62741],{"class":184},[178,138176,330],{"class":319},[178,138178,138179],{"class":188},"\"用户名\"",[178,138181,336],{"class":319},[178,138183,138184,138186,138188,138190,138192,138195,138197,138199,138202,138204,138206,138209],{"class":180,"line":274},[178,138185,341],{"class":319},[178,138187,55543],{"class":323},[178,138189,467],{"class":184},[178,138191,330],{"class":319},[178,138193,138194],{"class":188},"\"password\"",[178,138196,426],{"class":184},[178,138198,330],{"class":319},[178,138200,138201],{"class":188},"\"pwd\"",[178,138203,62741],{"class":184},[178,138205,330],{"class":319},[178,138207,138208],{"class":188},"\"密码\"",[178,138210,336],{"class":319},[178,138212,138213,138215,138217,138219,138221,138223,138226,138228],{"class":180,"line":354},[178,138214,341],{"class":319},[178,138216,55608],{"class":323},[178,138218,467],{"class":184},[178,138220,330],{"class":319},[178,138222,68368],{"class":188},[178,138224,138225],{"class":319},">提交\u003C\u002F",[178,138227,55608],{"class":323},[178,138229,336],{"class":319},[178,138231,138232,138234,138236],{"class":180,"line":364},[178,138233,367],{"class":319},[178,138235,68345],{"class":323},[178,138237,336],{"class":319},[3269,138239],{"style":127773,"src":138240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,138242,138243],{},"value是表单域的内容",[19,138245,138246],{},"例子2：",[154,138248,138249],{"className":128664,"code":138129,"language":128666,"meta":160,"style":160},[70,138250,138251,138271,138297,138323,138341],{"__ignoreMap":160},[178,138252,138253,138255,138257,138259,138261,138263,138265,138267,138269],{"class":180,"line":181},[178,138254,320],{"class":319},[178,138256,68345],{"class":323},[178,138258,68348],{"class":184},[178,138260,330],{"class":319},[178,138262,138144],{"class":188},[178,138264,138147],{"class":184},[178,138266,330],{"class":319},[178,138268,138152],{"class":188},[178,138270,336],{"class":319},[178,138272,138273,138275,138277,138279,138281,138283,138285,138287,138289,138291,138293,138295],{"class":180,"line":263},[178,138274,341],{"class":319},[178,138276,55543],{"class":323},[178,138278,467],{"class":184},[178,138280,330],{"class":319},[178,138282,64419],{"class":188},[178,138284,426],{"class":184},[178,138286,330],{"class":319},[178,138288,138095],{"class":188},[178,138290,62741],{"class":184},[178,138292,330],{"class":319},[178,138294,138179],{"class":188},[178,138296,336],{"class":319},[178,138298,138299,138301,138303,138305,138307,138309,138311,138313,138315,138317,138319,138321],{"class":180,"line":274},[178,138300,341],{"class":319},[178,138302,55543],{"class":323},[178,138304,467],{"class":184},[178,138306,330],{"class":319},[178,138308,138194],{"class":188},[178,138310,426],{"class":184},[178,138312,330],{"class":319},[178,138314,138201],{"class":188},[178,138316,62741],{"class":184},[178,138318,330],{"class":319},[178,138320,138208],{"class":188},[178,138322,336],{"class":319},[178,138324,138325,138327,138329,138331,138333,138335,138337,138339],{"class":180,"line":354},[178,138326,341],{"class":319},[178,138328,55608],{"class":323},[178,138330,467],{"class":184},[178,138332,330],{"class":319},[178,138334,68368],{"class":188},[178,138336,138225],{"class":319},[178,138338,55608],{"class":323},[178,138340,336],{"class":319},[178,138342,138343,138345,138347],{"class":180,"line":364},[178,138344,367],{"class":319},[178,138346,68345],{"class":323},[178,138348,336],{"class":319},[3269,138350],{"style":127773,"src":138351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138353,138355],{"id":138354},"_142-css新特性","14.2 CSS新特性",[387,138357,138359],{"id":138358},"_1421-新增选择器","14.2.1 新增选择器",[23756,138361,138363],{"id":138362},"_14211-属性选择器","14.2.1.1 属性选择器",[3269,138365],{"style":127773,"src":138366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[154,138368,138370],{"className":127917,"code":138369,"language":127919,"meta":160,"style":160},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[70,138371,138372,138387,138403],{"__ignoreMap":160},[178,138373,138374,138376,138378,138380,138382,138384],{"class":180,"line":181},[178,138375,55543],{"class":323},[178,138377,2830],{"class":319},[178,138379,550],{"class":184},[178,138381,330],{"class":699},[178,138383,64419],{"class":188},[178,138385,138386],{"class":319},"] {\n",[178,138388,138389,138391,138393,138395,138397,138399,138401],{"class":180,"line":263},[178,138390,72616],{"class":195},[178,138392,53167],{"class":319},[178,138394,1665],{"class":195},[178,138396,53222],{"class":699},[178,138398,53251],{"class":195},[178,138400,131497],{"class":195},[178,138402,3100],{"class":319},[178,138404,138405],{"class":180,"line":274},[178,138406,3371],{"class":319},[3269,138408],{"style":127773,"src":138409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,138411,1981],{},[2946,138413,138414,138417,138420,138423],{},[29,138415,138416],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[29,138418,138419],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[29,138421,138422],{},"属性选择器也可以选择出来自定义的属性",[29,138424,138425,138427],{},[2093,138426,10786],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[23756,138429,138431],{"id":138430},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[3269,138433],{"style":127773,"src":138434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[26,138436,138437],{},[29,138438,138439],{},"fist-child",[154,138441,138443],{"className":127917,"code":138442,"language":127919,"meta":160,"style":160},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[70,138444,138445,138450,138465,138485,138503],{"__ignoreMap":160},[178,138446,138447],{"class":180,"line":181},[178,138448,138449],{"class":2008},"\u002F* 属性选择器 *\u002F\n",[178,138451,138452,138454,138456,138458,138460,138462],{"class":180,"line":263},[178,138453,55543],{"class":323},[178,138455,2830],{"class":319},[178,138457,550],{"class":184},[178,138459,330],{"class":699},[178,138461,64419],{"class":188},[178,138463,138464],{"class":319},"] { }\n",[178,138466,138467,138469,138471,138473,138476,138479,138482],{"class":180,"line":274},[178,138468,55543],{"class":323},[178,138470,2830],{"class":319},[178,138472,16453],{"class":184},[178,138474,138475],{"class":699},"^=",[178,138477,138478],{"class":188},"\"icon\"",[178,138480,138481],{"class":319},"] { }  ",[178,138483,138484],{"class":2008},"\u002F* 以 icon 开头 *\u002F\n",[178,138486,138487,138489,138491,138493,138496,138498,138500],{"class":180,"line":354},[178,138488,55543],{"class":323},[178,138490,2830],{"class":319},[178,138492,16453],{"class":184},[178,138494,138495],{"class":699},"$=",[178,138497,138478],{"class":188},[178,138499,138481],{"class":319},[178,138501,138502],{"class":2008},"\u002F* 以 icon 结尾 *\u002F\n",[178,138504,138505,138507,138509,138511,138514,138516,138518],{"class":180,"line":364},[178,138506,55543],{"class":323},[178,138508,2830],{"class":319},[178,138510,16453],{"class":184},[178,138512,138513],{"class":699},"*=",[178,138515,138478],{"class":188},[178,138517,138481],{"class":319},[178,138519,138520],{"class":2008},"\u002F* 包含 icon *\u002F\n",[19,138522,138523],{},"ul的第一个儿子文本为红色",[19,138525,138526],{},"一定要在冒号前加空格，不然就是选中所有的了",[154,138528,138530],{"className":127917,"code":138529,"language":127919,"meta":160,"style":160},".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",[70,138531,138532,138538,138548,138552,138556,138561,138574,138587,138603,138620,138637],{"__ignoreMap":160},[178,138533,138534,138536],{"class":180,"line":181},[178,138535,128208],{"class":184},[178,138537,17330],{"class":319},[178,138539,138540,138542,138544,138546],{"class":180,"line":263},[178,138541,72625],{"class":195},[178,138543,53167],{"class":319},[178,138545,59142],{"class":195},[178,138547,3100],{"class":319},[178,138549,138550],{"class":180,"line":274},[178,138551,3371],{"class":319},[178,138553,138554],{"class":180,"line":354},[178,138555,137378],{"class":319},[178,138557,138558],{"class":180,"line":364},[178,138559,138560],{"class":2008},"\u002F* 结构伪类选择器 *\u002F\n",[178,138562,138563,138565,138568,138571],{"class":180,"line":740},[178,138564,29],{"class":323},[178,138566,138567],{"class":184},":first-child",[178,138569,138570],{"class":319}," { }           ",[178,138572,138573],{"class":2008},"\u002F* 第一个 *\u002F\n",[178,138575,138576,138578,138581,138584],{"class":180,"line":746},[178,138577,29],{"class":323},[178,138579,138580],{"class":184},":last-child",[178,138582,138583],{"class":319}," { }            ",[178,138585,138586],{"class":2008},"\u002F* 最后一个 *\u002F\n",[178,138588,138589,138591,138593,138595,138597,138600],{"class":180,"line":752},[178,138590,29],{"class":323},[178,138592,130831],{"class":184},[178,138594,944],{"class":319},[178,138596,1669],{"class":195},[178,138598,138599],{"class":319},") { }          ",[178,138601,138602],{"class":2008},"\u002F* 第2个 *\u002F\n",[178,138604,138605,138607,138609,138611,138614,138617],{"class":180,"line":757},[178,138606,29],{"class":323},[178,138608,130831],{"class":184},[178,138610,944],{"class":319},[178,138612,138613],{"class":195},"2n",[178,138615,138616],{"class":319},") { }         ",[178,138618,138619],{"class":2008},"\u002F* 偶数 *\u002F\n",[178,138621,138622,138624,138626,138628,138631,138634],{"class":180,"line":763},[178,138623,29],{"class":323},[178,138625,130831],{"class":184},[178,138627,944],{"class":319},[178,138629,138630],{"class":195},"2n+1",[178,138632,138633],{"class":319},") { }       ",[178,138635,138636],{"class":2008},"\u002F* 奇数 *\u002F\n",[178,138638,138639,138641,138643,138645,138648,138650],{"class":180,"line":769},[178,138640,29],{"class":323},[178,138642,130831],{"class":184},[178,138644,944],{"class":319},[178,138646,138647],{"class":195},"-n+3",[178,138649,138633],{"class":319},[178,138651,138652],{"class":2008},"\u002F* 前3个 *\u002F\n",[53341,138654,138657],{"className":138655},[138656],"example","\n  示例内容\n",[19,138659,138660],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[2946,138662,138663],{},[29,138664,138665,138668],{},[70,138666,138667],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,138670,138671],{},"也就是说它选择的是熊大",[26,138673,138674],{"start":740},[29,138675,138676],{},"权重",[154,138678,138680],{"className":127917,"code":138679,"language":127919,"meta":160,"style":160},"\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",[70,138681,138682,138686,138696,138706,138720,138734,138748],{"__ignoreMap":160},[178,138683,138684],{"class":180,"line":181},[178,138685,138560],{"class":2008},[178,138687,138688,138690,138692,138694],{"class":180,"line":263},[178,138689,29],{"class":323},[178,138691,138567],{"class":184},[178,138693,138570],{"class":319},[178,138695,138573],{"class":2008},[178,138697,138698,138700,138702,138704],{"class":180,"line":274},[178,138699,29],{"class":323},[178,138701,138580],{"class":184},[178,138703,138583],{"class":319},[178,138705,138586],{"class":2008},[178,138707,138708,138710,138712,138714,138716,138718],{"class":180,"line":354},[178,138709,29],{"class":323},[178,138711,130831],{"class":184},[178,138713,944],{"class":319},[178,138715,1669],{"class":195},[178,138717,138599],{"class":319},[178,138719,138602],{"class":2008},[178,138721,138722,138724,138726,138728,138730,138732],{"class":180,"line":364},[178,138723,29],{"class":323},[178,138725,130831],{"class":184},[178,138727,944],{"class":319},[178,138729,138613],{"class":195},[178,138731,138616],{"class":319},[178,138733,138619],{"class":2008},[178,138735,138736,138738,138740,138742,138744,138746],{"class":180,"line":740},[178,138737,29],{"class":323},[178,138739,130831],{"class":184},[178,138741,944],{"class":319},[178,138743,138630],{"class":195},[178,138745,138633],{"class":319},[178,138747,138636],{"class":2008},[178,138749,138750,138752,138754,138756,138758,138760],{"class":180,"line":746},[178,138751,29],{"class":323},[178,138753,130831],{"class":184},[178,138755,944],{"class":319},[178,138757,138647],{"class":195},[178,138759,138633],{"class":319},[178,138761,138652],{"class":2008},[19,138763,138764],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[23756,138766,138768],{"id":138767},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,138770,138771],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[3269,138773],{"style":127773,"src":138774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[26,138776,138777],{},[29,138778,1981],{},[2946,138780,138781,138784,138787,138790,138793,138796],{},[29,138782,138783],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[29,138785,138786],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[29,138788,138789],{},"语法： element::before {}",[29,138791,138792],{},"before 和 after 必须有 content 属性",[29,138794,138795],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[29,138797,138798],{},"伪元素选择器和标签选择器一样，权重为 1",[26,138800,138801],{"start":263},[29,138802,138803],{},"实例",[154,138805,138806],{"className":127917,"code":138679,"language":127919,"meta":160,"style":160},[70,138807,138808,138812,138822,138832,138846,138860,138874],{"__ignoreMap":160},[178,138809,138810],{"class":180,"line":181},[178,138811,138560],{"class":2008},[178,138813,138814,138816,138818,138820],{"class":180,"line":263},[178,138815,29],{"class":323},[178,138817,138567],{"class":184},[178,138819,138570],{"class":319},[178,138821,138573],{"class":2008},[178,138823,138824,138826,138828,138830],{"class":180,"line":274},[178,138825,29],{"class":323},[178,138827,138580],{"class":184},[178,138829,138583],{"class":319},[178,138831,138586],{"class":2008},[178,138833,138834,138836,138838,138840,138842,138844],{"class":180,"line":354},[178,138835,29],{"class":323},[178,138837,130831],{"class":184},[178,138839,944],{"class":319},[178,138841,1669],{"class":195},[178,138843,138599],{"class":319},[178,138845,138602],{"class":2008},[178,138847,138848,138850,138852,138854,138856,138858],{"class":180,"line":364},[178,138849,29],{"class":323},[178,138851,130831],{"class":184},[178,138853,944],{"class":319},[178,138855,138613],{"class":195},[178,138857,138616],{"class":319},[178,138859,138619],{"class":2008},[178,138861,138862,138864,138866,138868,138870,138872],{"class":180,"line":740},[178,138863,29],{"class":323},[178,138865,130831],{"class":184},[178,138867,944],{"class":319},[178,138869,138630],{"class":195},[178,138871,138633],{"class":319},[178,138873,138636],{"class":2008},[178,138875,138876,138878,138880,138882,138884,138886],{"class":180,"line":746},[178,138877,29],{"class":323},[178,138879,130831],{"class":184},[178,138881,944],{"class":319},[178,138883,138647],{"class":195},[178,138885,138633],{"class":319},[178,138887,138652],{"class":2008},[3269,138889],{"style":127773,"src":138890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[26,138892,138893],{"start":274},[29,138894,138895],{},"使用场景1",[3269,138897],{"style":127773,"src":138898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,138900,138901],{},"不需要再加盒子来整红色那部分了",[154,138903,138905],{"className":127917,"code":138904,"language":127919,"meta":160,"style":160},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[70,138906,138907,138912,138921,138932,138942,138946,138955,138966,138976],{"__ignoreMap":160},[178,138908,138909],{"class":180,"line":181},[178,138910,138911],{"class":2008},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[178,138913,138914,138916,138919],{"class":180,"line":263},[178,138915,53341],{"class":323},[178,138917,138918],{"class":184},"::before",[178,138920,17330],{"class":319},[178,138922,138923,138926,138928,138930],{"class":180,"line":274},[178,138924,138925],{"class":195},"  content",[178,138927,53167],{"class":319},[178,138929,9421],{"class":188},[178,138931,3100],{"class":319},[178,138933,138934,138936,138938,138940],{"class":180,"line":354},[178,138935,129533],{"class":195},[178,138937,53167],{"class":319},[178,138939,62590],{"class":195},[178,138941,3100],{"class":319},[178,138943,138944],{"class":180,"line":364},[178,138945,3371],{"class":319},[178,138947,138948,138950,138953],{"class":180,"line":740},[178,138949,53341],{"class":323},[178,138951,138952],{"class":184},"::after",[178,138954,17330],{"class":319},[178,138956,138957,138959,138961,138964],{"class":180,"line":746},[178,138958,138925],{"class":195},[178,138960,53167],{"class":319},[178,138962,138963],{"class":188},"\"→\"",[178,138965,3100],{"class":319},[178,138967,138968,138970,138972,138974],{"class":180,"line":752},[178,138969,72625],{"class":195},[178,138971,53167],{"class":319},[178,138973,63791],{"class":195},[178,138975,3100],{"class":319},[178,138977,138978],{"class":180,"line":757},[178,138979,3371],{"class":319},[3269,138981],{"style":127773,"src":138982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,138984,138985],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[3269,138987],{"style":127773,"src":138988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,138990,138991],{},"但是在引用时需要先转义一下",[19,138993,138994],{},"content='\\e930'",[26,138996,138997],{"start":354},[29,138998,138999],{},"使用场景2",[19,139001,139002],{},"仿土豆效果",[19,139004,139005],{},"通过使用伪元素选择器可以减少body中盒子的数量",[154,139007,139008],{"className":127917,"code":138904,"language":127919,"meta":160,"style":160},[70,139009,139010,139014,139022,139032,139042,139046,139054,139064,139074],{"__ignoreMap":160},[178,139011,139012],{"class":180,"line":181},[178,139013,138911],{"class":2008},[178,139015,139016,139018,139020],{"class":180,"line":263},[178,139017,53341],{"class":323},[178,139019,138918],{"class":184},[178,139021,17330],{"class":319},[178,139023,139024,139026,139028,139030],{"class":180,"line":274},[178,139025,138925],{"class":195},[178,139027,53167],{"class":319},[178,139029,9421],{"class":188},[178,139031,3100],{"class":319},[178,139033,139034,139036,139038,139040],{"class":180,"line":354},[178,139035,129533],{"class":195},[178,139037,53167],{"class":319},[178,139039,62590],{"class":195},[178,139041,3100],{"class":319},[178,139043,139044],{"class":180,"line":364},[178,139045,3371],{"class":319},[178,139047,139048,139050,139052],{"class":180,"line":740},[178,139049,53341],{"class":323},[178,139051,138952],{"class":184},[178,139053,17330],{"class":319},[178,139055,139056,139058,139060,139062],{"class":180,"line":746},[178,139057,138925],{"class":195},[178,139059,53167],{"class":319},[178,139061,138963],{"class":188},[178,139063,3100],{"class":319},[178,139065,139066,139068,139070,139072],{"class":180,"line":752},[178,139067,72625],{"class":195},[178,139069,53167],{"class":319},[178,139071,63791],{"class":195},[178,139073,3100],{"class":319},[178,139075,139076],{"class":180,"line":757},[178,139077,3371],{"class":319},[3269,139079],{"style":127773,"src":139080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[26,139082,139083],{"start":364},[29,139084,139085],{},"使用场景3",[19,139087,139088],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[154,139090,139092],{"className":127917,"code":139091,"language":127919,"meta":160,"style":160},".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",[70,139093,139094,139100,139110,139114,139118,139122,139130,139140,139150,139154,139162,139172,139182],{"__ignoreMap":160},[178,139095,139096,139098],{"class":180,"line":181},[178,139097,131765],{"class":184},[178,139099,17330],{"class":319},[178,139101,139102,139104,139106,139108],{"class":180,"line":263},[178,139103,132397],{"class":195},[178,139105,53167],{"class":319},[178,139107,56],{"class":195},[178,139109,3100],{"class":319},[178,139111,139112],{"class":180,"line":274},[178,139113,3371],{"class":319},[178,139115,139116],{"class":180,"line":354},[178,139117,137378],{"class":319},[178,139119,139120],{"class":180,"line":364},[178,139121,138911],{"class":2008},[178,139123,139124,139126,139128],{"class":180,"line":740},[178,139125,53341],{"class":323},[178,139127,138918],{"class":184},[178,139129,17330],{"class":319},[178,139131,139132,139134,139136,139138],{"class":180,"line":746},[178,139133,138925],{"class":195},[178,139135,53167],{"class":319},[178,139137,9421],{"class":188},[178,139139,3100],{"class":319},[178,139141,139142,139144,139146,139148],{"class":180,"line":752},[178,139143,129533],{"class":195},[178,139145,53167],{"class":319},[178,139147,62590],{"class":195},[178,139149,3100],{"class":319},[178,139151,139152],{"class":180,"line":757},[178,139153,3371],{"class":319},[178,139155,139156,139158,139160],{"class":180,"line":763},[178,139157,53341],{"class":323},[178,139159,138952],{"class":184},[178,139161,17330],{"class":319},[178,139163,139164,139166,139168,139170],{"class":180,"line":769},[178,139165,138925],{"class":195},[178,139167,53167],{"class":319},[178,139169,138963],{"class":188},[178,139171,3100],{"class":319},[178,139173,139174,139176,139178,139180],{"class":180,"line":774},[178,139175,72625],{"class":195},[178,139177,53167],{"class":319},[178,139179,63791],{"class":195},[178,139181,3100],{"class":319},[178,139183,139184],{"class":180,"line":780},[178,139185,3371],{"class":319},[19,139187,139188],{},"div {\nmargin: 0 auto;\n}",[154,139190,139193],{"className":139191,"code":139192,"language":159},[157],"\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",[70,139194,139192],{"__ignoreMap":160},[19,139196,139197],{},"如果想让多个元素都发生变化",[19,139199,139200],{},"不能如下操作：",[19,139202,139203],{},"transition: width 2s ease 0.5s;",[19,139205,139206],{},"transition: height 2s ease 0.5s;不对！！！",[19,139208,139209],{},"上方会样式冲突，导致不显示任何过渡效果",[19,139211,139212],{},"使用如下：加逗号隔开",[19,139214,139215],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,139217,139218],{},"transition all 2s ease;",[387,139220,139222],{"id":139221},"_1426-过渡练习","14.2.6 过渡练习",[26,139224,139225],{},[29,139226,139227],{},"进度条",[3269,139229],{"style":127773,"src":139230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[154,139232,139234],{"className":127917,"code":139233,"language":127919,"meta":160,"style":160},"div {\n  transition: all 0.3s ease;\n}\n",[70,139235,139236,139242,139260],{"__ignoreMap":160},[178,139237,139238,139240],{"class":180,"line":181},[178,139239,53341],{"class":323},[178,139241,17330],{"class":319},[178,139243,139244,139247,139249,139251,139254,139256,139258],{"class":180,"line":263},[178,139245,139246],{"class":195},"  transition",[178,139248,53167],{"class":319},[178,139250,29870],{"class":195},[178,139252,139253],{"class":195}," 0.3",[178,139255,2635],{"class":699},[178,139257,80400],{"class":195},[178,139259,3100],{"class":319},[178,139261,139262],{"class":180,"line":274},[178,139263,3371],{"class":319},[26,139265,139266],{"start":263},[29,139267,139268],{},"小米logo",[19,139270,139271],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[154,139273,139275],{"className":127917,"code":139274,"language":127919,"meta":160,"style":160},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[70,139276,139277,139282,139288,139304,139309],{"__ignoreMap":160},[178,139278,139279],{"class":180,"line":181},[178,139280,139281],{"class":2008},"\u002F* CSS3 过渡 *\u002F\n",[178,139283,139284,139286],{"class":180,"line":263},[178,139285,53341],{"class":323},[178,139287,17330],{"class":319},[178,139289,139290,139292,139294,139296,139298,139300,139302],{"class":180,"line":274},[178,139291,139246],{"class":195},[178,139293,53167],{"class":319},[178,139295,29870],{"class":195},[178,139297,139253],{"class":195},[178,139299,2635],{"class":699},[178,139301,80400],{"class":195},[178,139303,3100],{"class":319},[178,139305,139306],{"class":180,"line":354},[178,139307,139308],{"class":2008},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[178,139310,139311],{"class":180,"line":364},[178,139312,3371],{"class":319},[19,139314,139315],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[1853,139317,139318],{},"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":160,"searchDepth":263,"depth":263,"links":139320},[139321,139326],{"id":137651,"depth":263,"text":137652,"children":139322},[139323,139324,139325],{"id":137655,"depth":274,"text":137656},{"id":137732,"depth":274,"text":137733},{"id":138063,"depth":274,"text":138064},{"id":138354,"depth":263,"text":138355,"children":139327},[139328,139329],{"id":138358,"depth":274,"text":138359},{"id":139221,"depth":274,"text":139222},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137643,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139336,"title":139337,"body":139338,"description":25135,"extension":1880,"meta":141082,"navigation":721,"path":141083,"seo":141084,"stem":141085,"__hash__":141086},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139339,"toc":141063},[139340,139343,139347,139350,139356,139362,139366,139368,139371,139374,139377,139380,139383,139386,139389,139393,139397,139400,139403,139406,139410,139413,139416,139421,139424,139427,139430,139434,139437,139446,139449,139452,139456,139459,139462,139467,139474,139488,139496,139503,139508,139511,139514,139517,139524,139528,139534,139540,139543,139546,139551,139557,139559,139567,139572,139575,139581,139583,139588,139593,139596,139598,139603,139606,139611,139616,139650,139654,139658,139661,139665,139668,139754,139757,139794,139797,139833,139837,139842,139855,139909,139911,139939,139941,139969,139975,139989,139991,140035,140037,140081,140084,140091,140102,140104,140131,140133,140159,140166,140182,140184,140278,140280,140374,140381,140384,140389,140395,140469,140472,140474,140510,140512,140548,140551,140558,140577,140580,140583,140585,140610,140612,140636,140639,140642,140672,140676,140679,140742,140744,140810,140812,140876,140879,140911,140913,140939,140941,140967,140970,141001,141003,141029,141031,141057,141060],[10,139341,139337],{"id":139342},"_15-品优购项目上篇-搭建与公共模块",[14,139344,139346],{"id":139345},"_151-项目规划","15.1 项目规划",[3269,139348],{"style":127773,"src":139349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,139351,139352,139355],{},[2093,139353,139354],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,139357,139358,139361],{},[2093,139359,139360],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139363,139365],{"id":139364},"_152-项目介绍","15.2 项目介绍",[19,139367,139354],{},[3269,139369],{"style":127773,"src":139370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,139372,139373],{},"主页：",[3269,139375],{"style":127773,"src":139376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,139378,139379],{},"列表页：",[3269,139381],{"style":127773,"src":139382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,139384,139385],{},"注册页：",[3269,139387],{"style":127773,"src":139388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139390,139392],{"id":139391},"_153-项目搭建工作","15.3 项目搭建工作",[387,139394,139396],{"id":139395},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[3269,139398],{"style":127773,"src":139399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,139401,139402],{},"经常更换的图片要放到upload文件夹中",[19,139404,139405],{},"不经常换的放到images文件夹中",[387,139407,139409],{"id":139408},"_1532-创建文件如下","15.3.2 创建文件如下",[3269,139411],{"style":127773,"src":139412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[3269,139414],{"style":127773,"src":139415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,139417,139418],{},[2093,139419,139420],{},"初始化样式：",[19,139422,139423],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,139425,139426],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,139428,139429],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[387,139431,139433],{"id":139432},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,139435,139436],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,139438,139439,139440,139445],{},"这里最典型的应用就是 ",[2093,139441,139442],{},[70,139443,139444],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[3269,139447],{"style":127773,"src":139448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,139450,139451],{},"通过link方法来引入",[387,139453,139455],{"id":139454},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[3269,139457],{"style":127773,"src":139458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,139460,139461],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[26,139463,139464],{},[29,139465,139466],{},"制作favicon图标",[19,139468,139469,139470,139473],{},"①把品优购图标切成 ",[70,139471,139472],{},"png"," 图片",[19,139475,139476,139477,139479,139480,139483,139484],{},"②把 ",[70,139478,139472],{}," 图片转换为 ",[70,139481,139482],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[2178,139485,139486],{"href":139486,"rel":139487},"http:\u002F\u002Fwww.bitbug.net\u002F",[25619],[26,139489,139490,139493],{"start":263},[29,139491,139492],{},"favicon图标放到网站根目录下",[29,139494,139495],{},"HTML页面引入favicon",[19,139497,139498,139499,139502],{},"在html 页面里面的 ",[70,139500,139501],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,139504,139505],{},[70,139506,139507],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,139509,139510],{},"复制这行代码或者在生成这个的网站进行复制",[3269,139512],{"style":127773,"src":139513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,139515,139516],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,139518,139519,139520],{},"例如:",[2178,139521,139522],{"href":139522,"rel":139523},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[25619],[387,139525,139527],{"id":139526},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,139529,139530,139533],{},[2093,139531,139532],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,139535,139536,139539],{},[2093,139537,139538],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,139541,139542],{},"页面必须有三个标签用来符合 SEO 优化",[3269,139544],{"style":127773,"src":139545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[26,139547,139548],{},[29,139549,139550],{},"title网站标题",[19,139552,139553,139556],{},[2093,139554,139555],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,139558,70510],{},[2946,139560,139561,139564],{},[29,139562,139563],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[29,139565,139566],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[26,139568,139569],{"start":263},[29,139570,139571],{},"description网站描述",[19,139573,139574],{},"简要说明我们网站主要是做什么的",[19,139576,139577,139580],{},[2093,139578,139579],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,139582,70510],{},[19,139584,139585],{},[70,139586,139587],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[26,139589,139590],{"start":274},[29,139591,139592],{},"keywords关键词",[19,139594,139595],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,139597,70510],{},[19,139599,139600],{},[70,139601,139602],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,139604,139605],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,139607,139608],{},[2093,139609,139610],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[26,139612,139613],{"start":354},[29,139614,139615],{},"代码总结",[154,139617,139618],{"className":128664,"code":132021,"language":128666,"meta":160,"style":160},[70,139619,139620,139624,139638,139642],{"__ignoreMap":160},[178,139621,139622],{"class":180,"line":181},[178,139623,132028],{"class":2008},[178,139625,139626,139628,139630,139632,139634,139636],{"class":180,"line":263},[178,139627,320],{"class":319},[178,139629,53341],{"class":323},[178,139631,55210],{"class":184},[178,139633,330],{"class":319},[178,139635,132041],{"class":188},[178,139637,336],{"class":319},[178,139639,139640],{"class":180,"line":274},[178,139641,132048],{"class":319},[178,139643,139644,139646,139648],{"class":180,"line":354},[178,139645,367],{"class":319},[178,139647,53341],{"class":323},[178,139649,336],{"class":319},[14,139651,139653],{"id":139652},"_154-项目公共部分制作","15.4 项目公共部分制作",[387,139655,139657],{"id":139656},"_1541-常用模块类命名","15.4.1 常用模块类命名",[3269,139659],{"style":127773,"src":139660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[387,139662,139664],{"id":139663},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,139666,139667],{},"布局思路：",[2946,139669,139670,139673,139676,139698,139731],{},[29,139671,139672],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[29,139674,139675],{},"里面包含版心的盒子",[29,139677,139678,139679],{},"版心盒子里面包含 1 号左侧盒子左浮动",[2946,139680,139681,139689,139695],{},[29,139682,139683,139684,23258,139686,139688],{},"1 号盒子 里面包含一个",[70,139685,2946],{},[70,139687,2946],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[29,139690,139691,139692,139694],{},"里面的内容是水平排列，所以需要给",[70,139693,29],{},"设置浮动",[29,139696,139697],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[29,139699,139700,139701],{},"版心盒子里面包含 2 号右侧盒子右浮动",[2946,139702,139703,139717,139722],{},[29,139704,139705,139706,23258,139708,139710,139711,139713,139714,139716],{},"2 号盒子 里面包含一个",[70,139707,2946],{},[70,139709,2946],{},"包裹",[70,139712,29],{},"，中间的",[70,139715,2860],{},"可以用样式去设置，也可以用字符 |",[29,139718,139719,139720,139694],{},"里面内容水平排列，给",[70,139721,29],{},[29,139723,139724,139725,139727,139728,139730],{},"找到里面所有偶数的 ",[70,139726,29],{}," 设置样式（偶数的 ",[70,139729,29],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[29,139732,139733,139734],{},"需要用到字体图标",[2946,139735,139736,139742,139745,139748,139751],{},[29,139737,139738,139739],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[70,139740,139741],{},"arrow-icon",[29,139743,139744],{},"先要引入字体图片的资源",[29,139746,139747],{},"在样式里面利用 font-face 来进行声明",[29,139749,139750],{},"在伪元素的 content属性设置 图标的编码",[29,139752,139753],{},"给伪元素设置font-family属性",[19,139755,139756],{},"结构实例代码：",[154,139758,139760],{"className":127917,"code":139759,"language":127919,"meta":160,"style":160},"div::before {\n  content: \"\";\n  display: block;\n}\n",[70,139761,139762,139770,139780,139790],{"__ignoreMap":160},[178,139763,139764,139766,139768],{"class":180,"line":181},[178,139765,53341],{"class":323},[178,139767,138918],{"class":184},[178,139769,17330],{"class":319},[178,139771,139772,139774,139776,139778],{"class":180,"line":263},[178,139773,138925],{"class":195},[178,139775,53167],{"class":319},[178,139777,9421],{"class":188},[178,139779,3100],{"class":319},[178,139781,139782,139784,139786,139788],{"class":180,"line":274},[178,139783,129533],{"class":195},[178,139785,53167],{"class":319},[178,139787,62590],{"class":195},[178,139789,3100],{"class":319},[178,139791,139792],{"class":180,"line":354},[178,139793,3371],{"class":319},[19,139795,139796],{},"样式实例代码：",[154,139798,139799],{"className":127917,"code":139759,"language":127919,"meta":160,"style":160},[70,139800,139801,139809,139819,139829],{"__ignoreMap":160},[178,139802,139803,139805,139807],{"class":180,"line":181},[178,139804,53341],{"class":323},[178,139806,138918],{"class":184},[178,139808,17330],{"class":319},[178,139810,139811,139813,139815,139817],{"class":180,"line":263},[178,139812,138925],{"class":195},[178,139814,53167],{"class":319},[178,139816,9421],{"class":188},[178,139818,3100],{"class":319},[178,139820,139821,139823,139825,139827],{"class":180,"line":274},[178,139822,129533],{"class":195},[178,139824,53167],{"class":319},[178,139826,62590],{"class":195},[178,139828,3100],{"class":319},[178,139830,139831],{"class":180,"line":354},[178,139832,3371],{"class":319},[387,139834,139836],{"id":139835},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[2946,139838,139839],{},[29,139840,139841],{},"header 盒子必须要有高度",[19,139843,139844,139845,139847,139848],{},"1 号盒子是 ",[70,139846,132929],{}," 标志定位，在正常开发过程中， ",[2093,139849,139850,139851,139854],{},"logo的布局其实是有讲究的，需要进行 ",[70,139852,139853],{},"logoSEO","的优化 （★★★）",[2946,139856,139857,139865,139873,139900],{},[29,139858,139859,139861,139862,139864],{},[70,139860,132929],{}," 里面首先放一个 ",[70,139863,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[29,139866,139867,139869,139870,139872],{},[70,139868,10],{}," 里面再放一个链接，可以返回首页的，把 ",[70,139871,132929],{}," 的背景图片给链接即可",[29,139874,139875,139876],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[2946,139877,139878,139893],{},[29,139879,139880,139881,139884,139885,139888,139889,139892],{},"方法1：",[70,139882,139883],{},"text-indent"," 移到盒子外面（",[70,139886,139887],{},"text-indent: -9999px",") ，然后 ",[70,139890,139891],{},"overflow:hidden"," ，淘宝的做法",[29,139894,139895,139896,139899],{},"方法2：直接给 ",[70,139897,139898],{},"font-size: 0;"," 就看不到文字了，京东的做法",[29,139901,139902,139903,139905,139906,139908],{},"最后给链接一个 ",[70,139904,53137],{}," 属性，这样鼠标放到 ",[70,139907,132929],{}," 上就可以看到提示文字了",[19,139910,139756],{},[154,139912,139913],{"className":128664,"code":133150,"language":128666,"meta":160,"style":160},[70,139914,139915],{"__ignoreMap":160},[178,139916,139917,139919,139921,139923,139925,139927,139929,139931,139933,139935,139937],{"class":180,"line":181},[178,139918,320],{"class":319},[178,139920,2178],{"class":323},[178,139922,62778],{"class":184},[178,139924,330],{"class":319},[178,139926,133165],{"class":188},[178,139928,133168],{"class":184},[178,139930,330],{"class":319},[178,139932,133173],{"class":188},[178,139934,133176],{"class":319},[178,139936,2178],{"class":323},[178,139938,336],{"class":319},[19,139940,139796],{},[154,139942,139943],{"className":128664,"code":133150,"language":128666,"meta":160,"style":160},[70,139944,139945],{"__ignoreMap":160},[178,139946,139947,139949,139951,139953,139955,139957,139959,139961,139963,139965,139967],{"class":180,"line":181},[178,139948,320],{"class":319},[178,139950,2178],{"class":323},[178,139952,62778],{"class":184},[178,139954,330],{"class":319},[178,139956,133165],{"class":188},[178,139958,133168],{"class":184},[178,139960,330],{"class":319},[178,139962,133173],{"class":188},[178,139964,133176],{"class":319},[178,139966,2178],{"class":323},[178,139968,336],{"class":319},[19,139970,139971,139972,139974],{},"2 号盒子是 ",[70,139973,132942],{}," 搜索模块定位",[2946,139976,139977,139980,139983,139986],{},[29,139978,139979],{},"search盒子利用定位的方式放在对应的位置",[29,139981,139982],{},"search盒子设置绝对定位，header盒子设置相对定位",[29,139984,139985],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[29,139987,139988],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,139990,139756],{},[154,139992,139993],{"className":127917,"code":133237,"language":127919,"meta":160,"style":160},[70,139994,139995,140017,140021,140031],{"__ignoreMap":160},[178,139996,139997,139999,140001,140003,140005,140007,140009,140011,140013,140015],{"class":180,"line":181},[178,139998,53341],{"class":323},[178,140000,14196],{"class":319},[178,140002,19],{"class":323},[178,140004,14196],{"class":319},[178,140006,10],{"class":323},[178,140008,14196],{"class":319},[178,140010,2946],{"class":323},[178,140012,14196],{"class":319},[178,140014,29],{"class":323},[178,140016,17330],{"class":319},[178,140018,140019],{"class":180,"line":263},[178,140020,133266],{"class":2008},[178,140022,140023,140025,140027,140029],{"class":180,"line":274},[178,140024,129533],{"class":195},[178,140026,53167],{"class":319},[178,140028,62590],{"class":195},[178,140030,3100],{"class":319},[178,140032,140033],{"class":180,"line":354},[178,140034,3371],{"class":319},[19,140036,139796],{},[154,140038,140039],{"className":127917,"code":133237,"language":127919,"meta":160,"style":160},[70,140040,140041,140063,140067,140077],{"__ignoreMap":160},[178,140042,140043,140045,140047,140049,140051,140053,140055,140057,140059,140061],{"class":180,"line":181},[178,140044,53341],{"class":323},[178,140046,14196],{"class":319},[178,140048,19],{"class":323},[178,140050,14196],{"class":319},[178,140052,10],{"class":323},[178,140054,14196],{"class":319},[178,140056,2946],{"class":323},[178,140058,14196],{"class":319},[178,140060,29],{"class":323},[178,140062,17330],{"class":319},[178,140064,140065],{"class":180,"line":263},[178,140066,133266],{"class":2008},[178,140068,140069,140071,140073,140075],{"class":180,"line":274},[178,140070,129533],{"class":195},[178,140072,53167],{"class":319},[178,140074,62590],{"class":195},[178,140076,3100],{"class":319},[178,140078,140079],{"class":180,"line":354},[178,140080,3371],{"class":319},[19,140082,140083],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,140085,140086,140087,140090],{},"3 号盒子是 ",[70,140088,140089],{},"hotwords"," 热词模块定位",[2946,140092,140093,140096,140099],{},[29,140094,140095],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[29,140097,140098],{},"给里面所有的a标签设置 左右10px的外边距",[29,140100,140101],{},"给第一个a标签设置文字变红色（#c81623）",[19,140103,139756],{},[154,140105,140107],{"className":127917,"code":140106,"language":127919,"meta":160,"style":160},"div {\n  margin: 0 auto;\n}\n",[70,140108,140109,140115,140127],{"__ignoreMap":160},[178,140110,140111,140113],{"class":180,"line":181},[178,140112,53341],{"class":323},[178,140114,17330],{"class":319},[178,140116,140117,140119,140121,140123,140125],{"class":180,"line":263},[178,140118,72190],{"class":195},[178,140120,53167],{"class":319},[178,140122,2133],{"class":195},[178,140124,53286],{"class":195},[178,140126,3100],{"class":319},[178,140128,140129],{"class":180,"line":274},[178,140130,3371],{"class":319},[19,140132,139796],{},[154,140134,140135],{"className":127917,"code":140106,"language":127919,"meta":160,"style":160},[70,140136,140137,140143,140155],{"__ignoreMap":160},[178,140138,140139,140141],{"class":180,"line":181},[178,140140,53341],{"class":323},[178,140142,17330],{"class":319},[178,140144,140145,140147,140149,140151,140153],{"class":180,"line":263},[178,140146,72190],{"class":195},[178,140148,53167],{"class":319},[178,140150,2133],{"class":195},[178,140152,53286],{"class":195},[178,140154,3100],{"class":319},[178,140156,140157],{"class":180,"line":274},[178,140158,3371],{"class":319},[19,140160,140161,140162,140165],{},"4 号盒子是 ",[70,140163,140164],{},"shopcar"," 购物车模块",[2946,140167,140168,140173,140176,140179],{},[29,140169,124700,140170,140172],{},[70,140171,140164],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[29,140174,140175],{},"count 统计部分用绝对定位做",[29,140177,140178],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[29,140180,140181],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,140183,139756],{},[154,140185,140186],{"className":127917,"code":133349,"language":127919,"meta":160,"style":160},[70,140187,140188,140192,140206,140210,140224,140228,140242,140246,140260,140264],{"__ignoreMap":160},[178,140189,140190],{"class":180,"line":181},[178,140191,133356],{"class":2008},[178,140193,140194,140196,140198,140200,140202,140204],{"class":180,"line":263},[178,140195,133361],{"class":184},[178,140197,81526],{"class":319},[178,140199,130277],{"class":195},[178,140201,53167],{"class":319},[178,140203,133370],{"class":195},[178,140205,130847],{"class":319},[178,140207,140208],{"class":180,"line":274},[178,140209,133377],{"class":2008},[178,140211,140212,140214,140216,140218,140220,140222],{"class":180,"line":354},[178,140213,133382],{"class":184},[178,140215,81526],{"class":319},[178,140217,130277],{"class":195},[178,140219,53167],{"class":319},[178,140221,56485],{"class":195},[178,140223,130847],{"class":319},[178,140225,140226],{"class":180,"line":364},[178,140227,133397],{"class":2008},[178,140229,140230,140232,140234,140236,140238,140240],{"class":180,"line":740},[178,140231,133402],{"class":184},[178,140233,81526],{"class":319},[178,140235,130277],{"class":195},[178,140237,53167],{"class":319},[178,140239,56552],{"class":195},[178,140241,130847],{"class":319},[178,140243,140244],{"class":180,"line":746},[178,140245,133417],{"class":2008},[178,140247,140248,140250,140252,140254,140256,140258],{"class":180,"line":752},[178,140249,133422],{"class":184},[178,140251,81526],{"class":319},[178,140253,130277],{"class":195},[178,140255,53167],{"class":319},[178,140257,87948],{"class":195},[178,140259,130847],{"class":319},[178,140261,140262],{"class":180,"line":757},[178,140263,133437],{"class":2008},[178,140265,140266,140268,140270,140272,140274,140276],{"class":180,"line":763},[178,140267,133442],{"class":184},[178,140269,81526],{"class":319},[178,140271,130277],{"class":195},[178,140273,53167],{"class":319},[178,140275,133451],{"class":195},[178,140277,130847],{"class":319},[19,140279,139796],{},[154,140281,140282],{"className":127917,"code":133349,"language":127919,"meta":160,"style":160},[70,140283,140284,140288,140302,140306,140320,140324,140338,140342,140356,140360],{"__ignoreMap":160},[178,140285,140286],{"class":180,"line":181},[178,140287,133356],{"class":2008},[178,140289,140290,140292,140294,140296,140298,140300],{"class":180,"line":263},[178,140291,133361],{"class":184},[178,140293,81526],{"class":319},[178,140295,130277],{"class":195},[178,140297,53167],{"class":319},[178,140299,133370],{"class":195},[178,140301,130847],{"class":319},[178,140303,140304],{"class":180,"line":274},[178,140305,133377],{"class":2008},[178,140307,140308,140310,140312,140314,140316,140318],{"class":180,"line":354},[178,140309,133382],{"class":184},[178,140311,81526],{"class":319},[178,140313,130277],{"class":195},[178,140315,53167],{"class":319},[178,140317,56485],{"class":195},[178,140319,130847],{"class":319},[178,140321,140322],{"class":180,"line":364},[178,140323,133397],{"class":2008},[178,140325,140326,140328,140330,140332,140334,140336],{"class":180,"line":740},[178,140327,133402],{"class":184},[178,140329,81526],{"class":319},[178,140331,130277],{"class":195},[178,140333,53167],{"class":319},[178,140335,56552],{"class":195},[178,140337,130847],{"class":319},[178,140339,140340],{"class":180,"line":746},[178,140341,133417],{"class":2008},[178,140343,140344,140346,140348,140350,140352,140354],{"class":180,"line":752},[178,140345,133422],{"class":184},[178,140347,81526],{"class":319},[178,140349,130277],{"class":195},[178,140351,53167],{"class":319},[178,140353,87948],{"class":195},[178,140355,130847],{"class":319},[178,140357,140358],{"class":180,"line":757},[178,140359,133437],{"class":2008},[178,140361,140362,140364,140366,140368,140370,140372],{"class":180,"line":763},[178,140363,133442],{"class":184},[178,140365,81526],{"class":319},[178,140367,130277],{"class":195},[178,140369,53167],{"class":319},[178,140371,133451],{"class":195},[178,140373,130847],{"class":319},[387,140375,140377,140378,140380],{"id":140376},"_1544-nav导航模块制作","15.4.4 ",[70,140379,55436],{},"导航模块制作",[3269,140382],{"style":127773,"src":140383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,140385,140386,140388],{},[70,140387,55436],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,140390,140391,140392],{},"1 号盒子左侧浮动，",[70,140393,140394],{},"dropdown",[2946,140396,140397,140407,140415,140421,140429,140439,140447,140458],{},[29,140398,140399,140400,404,140403,140406],{},"1号盒子有讲究，根据相关性 里面包含 ",[70,140401,140402],{},".dt",[70,140404,140405],{},".dd"," 两个盒子",[29,140408,140409,140411,140412,140414],{},[70,140410,140402],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[70,140413,140405],{}," 挤到下面去了",[29,140416,140417,140418,140420],{},"给 ",[70,140419,140405],{}," 盒子设置宽度 和 高度，以及背景颜色",[29,140422,140417,140423,140425,140426,121602],{},[70,140424,140405],{}," 盒子里面定义 无序列表 （",[70,140427,140428],{},"ul > li > a",[29,140430,140431,140432,140434,140435,140438],{},"每个 ",[70,140433,29],{}," 都有一个高度（",[70,140436,140437],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[29,140440,140417,140441,140443,140444,121602],{},[70,140442,29],{}," 里面的a设置文字大小（",[70,140445,140446],{},"14px",[29,140448,140417,140449,140451,140452,140454,140455,140457],{},[70,140450,29],{}," 设置 ",[70,140453,129078],{},"，当鼠标移入的时候，让",[70,140456,29],{},"的背景变成白色，让里面的文字变成红色",[29,140459,140460,140462,140463,140465,140466,140468],{},[70,140461,29],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[70,140464,29],{},"的右侧，那么给",[70,140467,29],{},"设置相对定位",[19,140470,140471],{},"一定要注意相关性",[19,140473,139756],{},[154,140475,140476],{"className":127917,"code":139759,"language":127919,"meta":160,"style":160},[70,140477,140478,140486,140496,140506],{"__ignoreMap":160},[178,140479,140480,140482,140484],{"class":180,"line":181},[178,140481,53341],{"class":323},[178,140483,138918],{"class":184},[178,140485,17330],{"class":319},[178,140487,140488,140490,140492,140494],{"class":180,"line":263},[178,140489,138925],{"class":195},[178,140491,53167],{"class":319},[178,140493,9421],{"class":188},[178,140495,3100],{"class":319},[178,140497,140498,140500,140502,140504],{"class":180,"line":274},[178,140499,129533],{"class":195},[178,140501,53167],{"class":319},[178,140503,62590],{"class":195},[178,140505,3100],{"class":319},[178,140507,140508],{"class":180,"line":354},[178,140509,3371],{"class":319},[19,140511,139796],{},[154,140513,140514],{"className":127917,"code":139759,"language":127919,"meta":160,"style":160},[70,140515,140516,140524,140534,140544],{"__ignoreMap":160},[178,140517,140518,140520,140522],{"class":180,"line":181},[178,140519,53341],{"class":323},[178,140521,138918],{"class":184},[178,140523,17330],{"class":319},[178,140525,140526,140528,140530,140532],{"class":180,"line":263},[178,140527,138925],{"class":195},[178,140529,53167],{"class":319},[178,140531,9421],{"class":188},[178,140533,3100],{"class":319},[178,140535,140536,140538,140540,140542],{"class":180,"line":274},[178,140537,129533],{"class":195},[178,140539,53167],{"class":319},[178,140541,62590],{"class":195},[178,140543,3100],{"class":319},[178,140545,140546],{"class":180,"line":354},[178,140547,3371],{"class":319},[19,140549,140550],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,140552,140553,140554,140557],{},"2 号盒子左侧浮动，",[70,140555,140556],{},"navitems"," 导航栏组",[2946,140559,140560,140565,140574],{},[29,140561,140562,140563],{},"里面结构是 ",[70,140564,140428],{},[29,140566,140567,140568,140570,140571,140573],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[70,140569,2178],{},"左右的",[70,140572,32624],{},"把两侧撑开",[29,140575,140576],{},"让文字垂直居中（行高等于高度）",[3269,140578],{"style":127773,"src":140579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,140581,140582],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,140584,139756],{},[154,140586,140588],{"className":127917,"code":140587,"language":127919,"meta":160,"style":160},".box {\n  float: left;\n}\n",[70,140589,140590,140596,140606],{"__ignoreMap":160},[178,140591,140592,140594],{"class":180,"line":181},[178,140593,131765],{"class":184},[178,140595,17330],{"class":319},[178,140597,140598,140600,140602,140604],{"class":180,"line":263},[178,140599,132397],{"class":195},[178,140601,53167],{"class":319},[178,140603,56],{"class":195},[178,140605,3100],{"class":319},[178,140607,140608],{"class":180,"line":274},[178,140609,3371],{"class":319},[19,140611,139796],{},[154,140613,140614],{"className":127917,"code":140587,"language":127919,"meta":160,"style":160},[70,140615,140616,140622,140632],{"__ignoreMap":160},[178,140617,140618,140620],{"class":180,"line":181},[178,140619,131765],{"class":184},[178,140621,17330],{"class":319},[178,140623,140624,140626,140628,140630],{"class":180,"line":263},[178,140625,132397],{"class":195},[178,140627,53167],{"class":319},[178,140629,56],{"class":195},[178,140631,3100],{"class":319},[178,140633,140634],{"class":180,"line":274},[178,140635,3371],{"class":319},[19,140637,140638],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[3269,140640],{"style":127773,"src":140641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[154,140643,140644],{"className":127917,"code":132074,"language":127919,"meta":160,"style":160},[70,140645,140646,140652,140668],{"__ignoreMap":160},[178,140647,140648,140650],{"class":180,"line":181},[178,140649,53341],{"class":323},[178,140651,17330],{"class":319},[178,140653,140654,140656,140658,140660,140662,140664,140666],{"class":180,"line":263},[178,140655,72616],{"class":195},[178,140657,53167],{"class":319},[178,140659,1665],{"class":195},[178,140661,53222],{"class":699},[178,140663,53251],{"class":195},[178,140665,131309],{"class":195},[178,140667,3100],{"class":319},[178,140669,140670],{"class":180,"line":274},[178,140671,3371],{"class":319},[387,140673,140675],{"id":140674},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[3269,140677],{"style":127773,"src":140678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[2946,140680,140681,140686,140691],{},[29,140682,140683,140685],{},[70,140684,133120],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[29,140687,140688,140690],{},[70,140689,133120],{}," 里面有一个大的版心",[29,140692,140693,140694,140697,140698],{},"版心里面包含 1 号盒子，",[70,140695,140696],{},"mod_service"," 是服务模块，mod 是模块的意思",[2946,140699,140700,140705,140718,140734,140739],{},[29,140701,140417,140702,140704],{},[70,140703,140696],{}," 设置高度（80px）和下边框",[29,140706,140707,140708,140711,140712,140714,140715,140717],{},"在里面定义 ",[70,140709,140710],{},"ul > li"," ,每个",[70,140713,29],{}," 宽度是300px 高度是 50px，给每个",[70,140716,29],{},"设置35px的左内边距",[29,140719,140720,140721,140723,140724,140726,140727,140729,140730,20168,140732,121602],{},"在每个",[70,140722,29],{},"里面，放一个 ",[70,140725,24668],{},"（里面放图标），一个",[70,140728,53341],{},"（里面放",[70,140731,53341],{},[70,140733,19],{},[29,140735,140417,140736,140738],{},[70,140737,24668],{},"设置浮动，让h5与这个div左右排列",[29,140740,140741],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,140743,139756],{},[154,140745,140747],{"className":127917,"code":140746,"language":127919,"meta":160,"style":160},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[70,140748,140749,140755,140767,140779,140806],{"__ignoreMap":160},[178,140750,140751,140753],{"class":180,"line":181},[178,140752,135674],{"class":184},[178,140754,17330],{"class":319},[178,140756,140757,140759,140761,140763,140765],{"class":180,"line":263},[178,140758,72288],{"class":195},[178,140760,53167],{"class":319},[178,140762,2640],{"class":195},[178,140764,53222],{"class":699},[178,140766,3100],{"class":319},[178,140768,140769,140771,140773,140775,140777],{"class":180,"line":274},[178,140770,72508],{"class":195},[178,140772,53167],{"class":319},[178,140774,2640],{"class":195},[178,140776,53222],{"class":699},[178,140778,3100],{"class":319},[178,140780,140781,140783,140785,140787,140789,140791,140793,140795,140798,140800,140802,140804],{"class":180,"line":354},[178,140782,72331],{"class":195},[178,140784,53167],{"class":319},[178,140786,63447],{"class":195},[178,140788,944],{"class":319},[178,140790,135713],{"class":6985},[178,140792,15474],{"class":319},[178,140794,63457],{"class":195},[178,140796,140797],{"class":195}," -10",[178,140799,53222],{"class":699},[178,140801,135732],{"class":195},[178,140803,53222],{"class":699},[178,140805,3100],{"class":319},[178,140807,140808],{"class":180,"line":364},[178,140809,3371],{"class":319},[19,140811,139796],{},[154,140813,140814],{"className":127917,"code":140746,"language":127919,"meta":160,"style":160},[70,140815,140816,140822,140834,140846,140872],{"__ignoreMap":160},[178,140817,140818,140820],{"class":180,"line":181},[178,140819,135674],{"class":184},[178,140821,17330],{"class":319},[178,140823,140824,140826,140828,140830,140832],{"class":180,"line":263},[178,140825,72288],{"class":195},[178,140827,53167],{"class":319},[178,140829,2640],{"class":195},[178,140831,53222],{"class":699},[178,140833,3100],{"class":319},[178,140835,140836,140838,140840,140842,140844],{"class":180,"line":274},[178,140837,72508],{"class":195},[178,140839,53167],{"class":319},[178,140841,2640],{"class":195},[178,140843,53222],{"class":699},[178,140845,3100],{"class":319},[178,140847,140848,140850,140852,140854,140856,140858,140860,140862,140864,140866,140868,140870],{"class":180,"line":354},[178,140849,72331],{"class":195},[178,140851,53167],{"class":319},[178,140853,63447],{"class":195},[178,140855,944],{"class":319},[178,140857,135713],{"class":6985},[178,140859,15474],{"class":319},[178,140861,63457],{"class":195},[178,140863,140797],{"class":195},[178,140865,53222],{"class":699},[178,140867,135732],{"class":195},[178,140869,53222],{"class":699},[178,140871,3100],{"class":319},[178,140873,140874],{"class":180,"line":364},[178,140875,3371],{"class":319},[19,140877,140878],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[2946,140880,140881,140884,140890,140896,140908],{},[29,140882,140883],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[29,140885,140886,140887,121602],{},"里面的布局利用 自定义列表来实现（",[70,140888,140889],{},"dl > dt + dd",[29,140891,140417,140892,140895],{},[70,140893,140894],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[29,140897,140417,140898,140901,140902,20168,140904,140907],{},[70,140899,140900],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[70,140903,140900],{},[70,140905,140906],{},"dd","之间有些距离",[29,140909,140910],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,140912,139756],{},[154,140914,140915],{"className":127917,"code":140106,"language":127919,"meta":160,"style":160},[70,140916,140917,140923,140935],{"__ignoreMap":160},[178,140918,140919,140921],{"class":180,"line":181},[178,140920,53341],{"class":323},[178,140922,17330],{"class":319},[178,140924,140925,140927,140929,140931,140933],{"class":180,"line":263},[178,140926,72190],{"class":195},[178,140928,53167],{"class":319},[178,140930,2133],{"class":195},[178,140932,53286],{"class":195},[178,140934,3100],{"class":319},[178,140936,140937],{"class":180,"line":274},[178,140938,3371],{"class":319},[19,140940,139796],{},[154,140942,140943],{"className":127917,"code":140106,"language":127919,"meta":160,"style":160},[70,140944,140945,140951,140963],{"__ignoreMap":160},[178,140946,140947,140949],{"class":180,"line":181},[178,140948,53341],{"class":323},[178,140950,17330],{"class":319},[178,140952,140953,140955,140957,140959,140961],{"class":180,"line":263},[178,140954,72190],{"class":195},[178,140956,53167],{"class":319},[178,140958,2133],{"class":195},[178,140960,53286],{"class":195},[178,140962,3100],{"class":319},[178,140964,140965],{"class":180,"line":274},[178,140966,3371],{"class":319},[19,140968,140969],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[2946,140971,140972,140981,140984,140995],{},[29,140973,140974,140975,140977,140978,140980],{},"分为上下两块，上面是 ",[70,140976,133137],{}," 友情链接，下面是 ",[70,140979,133130],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[29,140982,140983],{},"把内容分别复制到相应模块中",[29,140985,140417,140986,140988,140989,140991,140992,140994],{},[70,140987,133137],{}," 设置 15px 的下外边距，给",[70,140990,133137],{}," 里面 的 ",[70,140993,2178],{}," 标签设置 左右 3px 的外边距",[29,140996,140997,140998,141000],{},"给",[70,140999,133130],{}," 设置 20px 的行高",[19,141002,139756],{},[154,141004,141005],{"className":127917,"code":140106,"language":127919,"meta":160,"style":160},[70,141006,141007,141013,141025],{"__ignoreMap":160},[178,141008,141009,141011],{"class":180,"line":181},[178,141010,53341],{"class":323},[178,141012,17330],{"class":319},[178,141014,141015,141017,141019,141021,141023],{"class":180,"line":263},[178,141016,72190],{"class":195},[178,141018,53167],{"class":319},[178,141020,2133],{"class":195},[178,141022,53286],{"class":195},[178,141024,3100],{"class":319},[178,141026,141027],{"class":180,"line":274},[178,141028,3371],{"class":319},[19,141030,139796],{},[154,141032,141033],{"className":127917,"code":140106,"language":127919,"meta":160,"style":160},[70,141034,141035,141041,141053],{"__ignoreMap":160},[178,141036,141037,141039],{"class":180,"line":181},[178,141038,53341],{"class":323},[178,141040,17330],{"class":319},[178,141042,141043,141045,141047,141049,141051],{"class":180,"line":263},[178,141044,72190],{"class":195},[178,141046,53167],{"class":319},[178,141048,2133],{"class":195},[178,141050,53286],{"class":195},[178,141052,3100],{"class":319},[178,141054,141055],{"class":180,"line":274},[178,141056,3371],{"class":319},[19,141058,141059],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[1853,141061,141062],{},"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":160,"searchDepth":263,"depth":263,"links":141064},[141065,141066,141067,141074],{"id":139345,"depth":263,"text":139346},{"id":139364,"depth":263,"text":139365},{"id":139391,"depth":263,"text":139392,"children":141068},[141069,141070,141071,141072,141073],{"id":139395,"depth":274,"text":139396},{"id":139408,"depth":274,"text":139409},{"id":139432,"depth":274,"text":139433},{"id":139454,"depth":274,"text":139455},{"id":139526,"depth":274,"text":139527},{"id":139652,"depth":263,"text":139653,"children":141075},[141076,141077,141078,141079,141081],{"id":139656,"depth":274,"text":139657},{"id":139663,"depth":274,"text":139664},{"id":139835,"depth":274,"text":139836},{"id":140376,"depth":274,"text":141080},"15.4.4 nav导航模块制作",{"id":140674,"depth":274,"text":140675},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139337,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":141088,"title":141089,"body":141090,"description":25135,"extension":1880,"meta":143492,"navigation":721,"path":143493,"seo":143494,"stem":143495,"__hash__":143496},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":141091,"toc":143469},[141092,141095,141099,141103,141115,141118,141121,141124,141135,141137,141161,141163,141187,141192,141195,141197,141233,141235,141271,141274,141279,141282,141285,141288,141318,141325,141328,141338,141340,141374,141377,141411,141417,141434,141436,141472,141474,141510,141515,141540,141542,141568,141570,141594,141601,141604,141668,141670,141712,141714,141754,141761,141766,141768,141798,141800,141830,141834,141837,141844,141856,141858,141884,141886,141910,141913,141915,141939,141945,141955,141957,141987,141989,142019,142026,142067,142069,142105,142107,142143,142147,142150,142153,142156,142162,142167,142170,142193,142196,142220,142223,142247,142252,142255,142258,142261,142264,142267,142341,142343,142373,142375,142405,142408,142411,142443,142447,142451,142465,142474,142477,142482,142484,142578,142580,142674,142697,142699,142723,142725,142749,142756,142759,142769,142771,142795,142800,142808,142810,142840,142845,142885,142887,142913,142915,142941,142945,142948,142953,142956,142960,142968,142975,142983,142985,143015,143017,143047,143055,143058,143061,143063,143093,143095,143125,143128,143133,143135,143159,143161,143185,143188,143273,143275,143299,143301,143325,143329,143331,143355,143357,143391,143395,143409,143412,143417,143420,143425,143428,143458,143466],[10,141093,141089],{"id":141094},"_16-品优购项目下篇-主体与页面开发",[14,141096,141098],{"id":141097},"_161-项目主体模块制作","16.1 项目主体模块制作",[387,141100,141102],{"id":141101},"_1611-首页制作","16.1.1 首页制作",[19,141104,141105,141107,141108,141110,141111,141114],{},[2093,141106,103708],{}," 主体模块是 ",[2093,141109,75778],{}," 里面专有的，注意需要新的样式文件 ",[2093,141112,141113],{},"index.css，"," 就不要写在common.css中了",[3269,141116],{"style":127773,"src":141117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[3269,141119],{"style":127773,"src":141120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,141122,141123],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[2946,141125,141126,141129,141132],{},[29,141127,141128],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[29,141130,141131],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[29,141133,141134],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,141136,139756],{},[154,141138,141139],{"className":127917,"code":140587,"language":127919,"meta":160,"style":160},[70,141140,141141,141147,141157],{"__ignoreMap":160},[178,141142,141143,141145],{"class":180,"line":181},[178,141144,131765],{"class":184},[178,141146,17330],{"class":319},[178,141148,141149,141151,141153,141155],{"class":180,"line":263},[178,141150,132397],{"class":195},[178,141152,53167],{"class":319},[178,141154,56],{"class":195},[178,141156,3100],{"class":319},[178,141158,141159],{"class":180,"line":274},[178,141160,3371],{"class":319},[19,141162,139796],{},[154,141164,141165],{"className":127917,"code":140587,"language":127919,"meta":160,"style":160},[70,141166,141167,141173,141183],{"__ignoreMap":160},[178,141168,141169,141171],{"class":180,"line":181},[178,141170,131765],{"class":184},[178,141172,17330],{"class":319},[178,141174,141175,141177,141179,141181],{"class":180,"line":263},[178,141176,132397],{"class":195},[178,141178,53167],{"class":319},[178,141180,56],{"class":195},[178,141182,3100],{"class":319},[178,141184,141185],{"class":180,"line":274},[178,141186,3371],{"class":319},[26,141188,141189],{},[29,141190,141191],{},"左侧focus模块制作",[3269,141193],{"style":127773,"src":141194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,141196,139756],{},[154,141198,141199],{"className":127917,"code":129240,"language":127919,"meta":160,"style":160},[70,141200,141201,141209,141219,141229],{"__ignoreMap":160},[178,141202,141203,141205,141207],{"class":180,"line":181},[178,141204,55543],{"class":323},[178,141206,63621],{"class":184},[178,141208,17330],{"class":319},[178,141210,141211,141213,141215,141217],{"class":180,"line":263},[178,141212,129255],{"class":195},[178,141214,53167],{"class":319},[178,141216,56610],{"class":195},[178,141218,3100],{"class":319},[178,141220,141221,141223,141225,141227],{"class":180,"line":274},[178,141222,72518],{"class":195},[178,141224,53167],{"class":319},[178,141226,56458],{"class":195},[178,141228,3100],{"class":319},[178,141230,141231],{"class":180,"line":354},[178,141232,3371],{"class":319},[19,141234,139796],{},[154,141236,141237],{"className":127917,"code":129240,"language":127919,"meta":160,"style":160},[70,141238,141239,141247,141257,141267],{"__ignoreMap":160},[178,141240,141241,141243,141245],{"class":180,"line":181},[178,141242,55543],{"class":323},[178,141244,63621],{"class":184},[178,141246,17330],{"class":319},[178,141248,141249,141251,141253,141255],{"class":180,"line":263},[178,141250,129255],{"class":195},[178,141252,53167],{"class":319},[178,141254,56610],{"class":195},[178,141256,3100],{"class":319},[178,141258,141259,141261,141263,141265],{"class":180,"line":274},[178,141260,72518],{"class":195},[178,141262,53167],{"class":319},[178,141264,56458],{"class":195},[178,141266,3100],{"class":319},[178,141268,141269],{"class":180,"line":354},[178,141270,3371],{"class":319},[19,141272,141273],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[26,141275,141276],{"start":263},[29,141277,141278],{},"右侧newsflash模块制作",[3269,141280],{"style":127773,"src":141281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,141283,141284],{},"右侧的模块 分为上中下三个盒子",[19,141286,141287],{},"结构代码：",[154,141289,141290],{"className":128664,"code":135419,"language":128666,"meta":160,"style":160},[70,141291,141292],{"__ignoreMap":160},[178,141293,141294,141296,141298,141300,141302,141304,141306,141308,141310,141312,141314,141316],{"class":180,"line":181},[178,141295,320],{"class":319},[178,141297,3269],{"class":323},[178,141299,56960],{"class":184},[178,141301,330],{"class":319},[178,141303,135434],{"class":188},[178,141305,56968],{"class":184},[178,141307,330],{"class":319},[178,141309,135441],{"class":188},[178,141311,135444],{"class":184},[178,141313,330],{"class":319},[178,141315,135449],{"class":188},[178,141317,336],{"class":319},[19,141319,141320,141321,141324],{},"1 号盒子为 ",[70,141322,141323],{},"news"," 新闻模块 高度为 165px",[3269,141326],{"style":127773,"src":141327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,141329,141330,141331,141334,141335],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[70,141332,141333],{},"news-hd","，下面是 ",[70,141336,141337],{},"news-bd",[19,141339,141287],{},[154,141341,141342],{"className":128664,"code":132021,"language":128666,"meta":160,"style":160},[70,141343,141344,141348,141362,141366],{"__ignoreMap":160},[178,141345,141346],{"class":180,"line":181},[178,141347,132028],{"class":2008},[178,141349,141350,141352,141354,141356,141358,141360],{"class":180,"line":263},[178,141351,320],{"class":319},[178,141353,53341],{"class":323},[178,141355,55210],{"class":184},[178,141357,330],{"class":319},[178,141359,132041],{"class":188},[178,141361,336],{"class":319},[178,141363,141364],{"class":180,"line":274},[178,141365,132048],{"class":319},[178,141367,141368,141370,141372],{"class":180,"line":354},[178,141369,367],{"class":319},[178,141371,53341],{"class":323},[178,141373,336],{"class":319},[19,141375,141376],{},"样式代码：",[154,141378,141379],{"className":128664,"code":132021,"language":128666,"meta":160,"style":160},[70,141380,141381,141385,141399,141403],{"__ignoreMap":160},[178,141382,141383],{"class":180,"line":181},[178,141384,132028],{"class":2008},[178,141386,141387,141389,141391,141393,141395,141397],{"class":180,"line":263},[178,141388,320],{"class":319},[178,141390,53341],{"class":323},[178,141392,55210],{"class":184},[178,141394,330],{"class":319},[178,141396,132041],{"class":188},[178,141398,336],{"class":319},[178,141400,141401],{"class":180,"line":274},[178,141402,132048],{"class":319},[178,141404,141405,141407,141409],{"class":180,"line":354},[178,141406,367],{"class":319},[178,141408,53341],{"class":323},[178,141410,336],{"class":319},[19,141412,141413,141414,141416],{},"上面是",[70,141415,141333],{},"，设置高度是 33px，设置下边框",[2946,141418,141419,141425],{},[29,141420,141421,141422,141424],{},"里面放一个",[70,141423,24668],{}," 标题",[29,141426,141427,141428,141430,141431,141433],{},"放一个a",[70,141429,57],{},"，内容是 更多，然后让 ",[70,141432,2178],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,141435,141287],{},[154,141437,141438],{"className":127917,"code":139759,"language":127919,"meta":160,"style":160},[70,141439,141440,141448,141458,141468],{"__ignoreMap":160},[178,141441,141442,141444,141446],{"class":180,"line":181},[178,141443,53341],{"class":323},[178,141445,138918],{"class":184},[178,141447,17330],{"class":319},[178,141449,141450,141452,141454,141456],{"class":180,"line":263},[178,141451,138925],{"class":195},[178,141453,53167],{"class":319},[178,141455,9421],{"class":188},[178,141457,3100],{"class":319},[178,141459,141460,141462,141464,141466],{"class":180,"line":274},[178,141461,129533],{"class":195},[178,141463,53167],{"class":319},[178,141465,62590],{"class":195},[178,141467,3100],{"class":319},[178,141469,141470],{"class":180,"line":354},[178,141471,3371],{"class":319},[19,141473,141376],{},[154,141475,141476],{"className":127917,"code":139759,"language":127919,"meta":160,"style":160},[70,141477,141478,141486,141496,141506],{"__ignoreMap":160},[178,141479,141480,141482,141484],{"class":180,"line":181},[178,141481,53341],{"class":323},[178,141483,138918],{"class":184},[178,141485,17330],{"class":319},[178,141487,141488,141490,141492,141494],{"class":180,"line":263},[178,141489,138925],{"class":195},[178,141491,53167],{"class":319},[178,141493,9421],{"class":188},[178,141495,3100],{"class":319},[178,141497,141498,141500,141502,141504],{"class":180,"line":274},[178,141499,129533],{"class":195},[178,141501,53167],{"class":319},[178,141503,62590],{"class":195},[178,141505,3100],{"class":319},[178,141507,141508],{"class":180,"line":354},[178,141509,3371],{"class":319},[19,141511,141512,141513],{},"下面是",[70,141514,141337],{},[2946,141516,141517,141525],{},[29,141518,141519,141520,404,141522,141524],{},"里面包含 ",[70,141521,2946],{},[70,141523,29],{}," 还有链接",[29,141526,140997,141527,141529,141530,141532,141533,141536,141537],{},[70,141528,29],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[70,141531,132583],{}," 2.设置 ",[70,141534,141535],{},"white-space: nowrap;"," 3. 设置 ",[70,141538,141539],{},"text-overflow: ellipsis;",[19,141541,141287],{},[154,141543,141545],{"className":127917,"code":141544,"language":127919,"meta":160,"style":160},"div {\n  overflow: hidden;\n}\n",[70,141546,141547,141553,141564],{"__ignoreMap":160},[178,141548,141549,141551],{"class":180,"line":181},[178,141550,53341],{"class":323},[178,141552,17330],{"class":319},[178,141554,141555,141558,141560,141562],{"class":180,"line":263},[178,141556,141557],{"class":195},"  overflow",[178,141559,53167],{"class":319},[178,141561,63435],{"class":195},[178,141563,3100],{"class":319},[178,141565,141566],{"class":180,"line":274},[178,141567,3371],{"class":319},[19,141569,141376],{},[154,141571,141572],{"className":127917,"code":141544,"language":127919,"meta":160,"style":160},[70,141573,141574,141580,141590],{"__ignoreMap":160},[178,141575,141576,141578],{"class":180,"line":181},[178,141577,53341],{"class":323},[178,141579,17330],{"class":319},[178,141581,141582,141584,141586,141588],{"class":180,"line":263},[178,141583,141557],{"class":195},[178,141585,53167],{"class":319},[178,141587,63435],{"class":195},[178,141589,3100],{"class":319},[178,141591,141592],{"class":180,"line":274},[178,141593,3371],{"class":319},[19,141595,141596,141597,141600],{},"2 号盒子为 ",[70,141598,141599],{},"lifeservice"," 生活服务模块 高度为 209px",[3269,141602],{"style":127773,"src":141603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[2946,141605,141606,141609,141619,141643,141654],{},[29,141607,141608],{},"设置边框（左右下边框）",[29,141610,141611,141612,141615,141616,141618],{},"里面的内容 是 ",[70,141613,141614],{},"ul > 12*li","，给",[70,141617,29],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[29,141620,141621,141622],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[2946,141623,141624,141629,141638],{},[29,141625,141626,141628],{},[70,141627,141599],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[29,141630,141631,141632,141634,141635,141637],{},"可以让 ",[70,141633,141599],{}," 里面的 ",[70,141636,2946],{}," 宽度为 252，就可以装的下 4 个 小 li",[29,141639,141640,141642],{},[70,141641,141599],{}," 盒子 overflow 隐藏多余的部分就可以了",[29,141644,117832,141645,141647,141648,141650,141651,141653],{},[70,141646,29],{}," 里面放一个 ",[70,141649,2381],{},"（里面放图标），下面的文本用 ",[70,141652,19],{}," 标签包裹",[29,141655,140417,141656,141658,141659,141661,141662,140451,141664,141667],{},[70,141657,2381],{}," 设置 24px宽和28px的高（注意 ",[70,141660,2381],{}," 是行内元素， 转成行内块），给 ",[70,141663,29],{},[70,141665,141666],{},"text-align:center"," 让里面内容居中显示",[19,141669,141287],{},[154,141671,141673],{"className":127917,"code":141672,"language":127919,"meta":160,"style":160},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[70,141674,141675,141693,141698,141708],{"__ignoreMap":160},[178,141676,141677,141679,141681,141683,141685,141687,141689,141691],{"class":180,"line":181},[178,141678,178],{"class":323},[178,141680,14196],{"class":319},[178,141682,2178],{"class":323},[178,141684,14196],{"class":319},[178,141686,25312],{"class":323},[178,141688,14196],{"class":319},[178,141690,2093],{"class":323},[178,141692,17330],{"class":319},[178,141694,141695],{"class":180,"line":263},[178,141696,141697],{"class":2008},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[178,141699,141700,141702,141704,141706],{"class":180,"line":274},[178,141701,129533],{"class":195},[178,141703,53167],{"class":319},[178,141705,129595],{"class":195},[178,141707,3100],{"class":319},[178,141709,141710],{"class":180,"line":354},[178,141711,3371],{"class":319},[19,141713,141376],{},[154,141715,141716],{"className":127917,"code":141672,"language":127919,"meta":160,"style":160},[70,141717,141718,141736,141740,141750],{"__ignoreMap":160},[178,141719,141720,141722,141724,141726,141728,141730,141732,141734],{"class":180,"line":181},[178,141721,178],{"class":323},[178,141723,14196],{"class":319},[178,141725,2178],{"class":323},[178,141727,14196],{"class":319},[178,141729,25312],{"class":323},[178,141731,14196],{"class":319},[178,141733,2093],{"class":323},[178,141735,17330],{"class":319},[178,141737,141738],{"class":180,"line":263},[178,141739,141697],{"class":2008},[178,141741,141742,141744,141746,141748],{"class":180,"line":274},[178,141743,129533],{"class":195},[178,141745,53167],{"class":319},[178,141747,129595],{"class":195},[178,141749,3100],{"class":319},[178,141751,141752],{"class":180,"line":354},[178,141753,3371],{"class":319},[19,141755,141756,141757,141760],{},"3 号盒子为 ",[70,141758,141759],{},"bargain"," 特价商品",[2946,141762,141763],{},[29,141764,141765],{},"这个比较简单，直接插入一张图片即可",[19,141767,141287],{},[154,141769,141770],{"className":128664,"code":135419,"language":128666,"meta":160,"style":160},[70,141771,141772],{"__ignoreMap":160},[178,141773,141774,141776,141778,141780,141782,141784,141786,141788,141790,141792,141794,141796],{"class":180,"line":181},[178,141775,320],{"class":319},[178,141777,3269],{"class":323},[178,141779,56960],{"class":184},[178,141781,330],{"class":319},[178,141783,135434],{"class":188},[178,141785,56968],{"class":184},[178,141787,330],{"class":319},[178,141789,135441],{"class":188},[178,141791,135444],{"class":184},[178,141793,330],{"class":319},[178,141795,135449],{"class":188},[178,141797,336],{"class":319},[19,141799,141376],{},[154,141801,141802],{"className":128664,"code":135419,"language":128666,"meta":160,"style":160},[70,141803,141804],{"__ignoreMap":160},[178,141805,141806,141808,141810,141812,141814,141816,141818,141820,141822,141824,141826,141828],{"class":180,"line":181},[178,141807,320],{"class":319},[178,141809,3269],{"class":323},[178,141811,56960],{"class":184},[178,141813,330],{"class":319},[178,141815,135434],{"class":188},[178,141817,56968],{"class":184},[178,141819,330],{"class":319},[178,141821,135441],{"class":188},[178,141823,135444],{"class":184},[178,141825,330],{"class":319},[178,141827,135449],{"class":188},[178,141829,336],{"class":319},[387,141831,141833],{"id":141832},"_1612-推荐模块制作","16.1.2 推荐模块制作",[3269,141835],{"style":127773,"src":141836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,141838,141839,141840,141843],{},"大盒子 ",[70,141841,141842],{},"recom"," 推荐模块 recommend",[2946,141845,141846],{},[29,141847,141848,141849,141851,141852,141855],{},"给这个 ",[70,141850,141842],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[70,141853,141854],{},"#ebebeb","），设置距离上边 12px",[19,141857,141287],{},[154,141859,141861],{"className":127917,"code":141860,"language":127919,"meta":160,"style":160},"div {\n  background-color: #f0f0f0;\n}\n",[70,141862,141863,141869,141880],{"__ignoreMap":160},[178,141864,141865,141867],{"class":180,"line":181},[178,141866,53341],{"class":323},[178,141868,17330],{"class":319},[178,141870,141871,141873,141875,141878],{"class":180,"line":263},[178,141872,72598],{"class":195},[178,141874,53167],{"class":319},[178,141876,141877],{"class":195},"#f0f0f0",[178,141879,3100],{"class":319},[178,141881,141882],{"class":180,"line":274},[178,141883,3371],{"class":319},[19,141885,141376],{},[154,141887,141888],{"className":127917,"code":141860,"language":127919,"meta":160,"style":160},[70,141889,141890,141896,141906],{"__ignoreMap":160},[178,141891,141892,141894],{"class":180,"line":181},[178,141893,53341],{"class":323},[178,141895,17330],{"class":319},[178,141897,141898,141900,141902,141904],{"class":180,"line":263},[178,141899,72598],{"class":195},[178,141901,53167],{"class":319},[178,141903,141877],{"class":195},[178,141905,3100],{"class":319},[178,141907,141908],{"class":180,"line":274},[178,141909,3371],{"class":319},[19,141911,141912],{},"里面包含 2 个盒子， 浮动即可",[19,141914,141287],{},[154,141916,141917],{"className":127917,"code":140587,"language":127919,"meta":160,"style":160},[70,141918,141919,141925,141935],{"__ignoreMap":160},[178,141920,141921,141923],{"class":180,"line":181},[178,141922,131765],{"class":184},[178,141924,17330],{"class":319},[178,141926,141927,141929,141931,141933],{"class":180,"line":263},[178,141928,132397],{"class":195},[178,141930,53167],{"class":319},[178,141932,56],{"class":195},[178,141934,3100],{"class":319},[178,141936,141937],{"class":180,"line":274},[178,141938,3371],{"class":319},[19,141940,141941,141942],{},"1 号盒子 ",[70,141943,141944],{},"recom_hd",[2946,141946,141947,141950],{},[29,141948,141949],{},"设置宽度205px，高度163px",[29,141951,141421,141952,141954],{},[70,141953,3269],{},"标签，插入图片即可",[19,141956,141287],{},[154,141958,141959],{"className":128664,"code":135419,"language":128666,"meta":160,"style":160},[70,141960,141961],{"__ignoreMap":160},[178,141962,141963,141965,141967,141969,141971,141973,141975,141977,141979,141981,141983,141985],{"class":180,"line":181},[178,141964,320],{"class":319},[178,141966,3269],{"class":323},[178,141968,56960],{"class":184},[178,141970,330],{"class":319},[178,141972,135434],{"class":188},[178,141974,56968],{"class":184},[178,141976,330],{"class":319},[178,141978,135441],{"class":188},[178,141980,135444],{"class":184},[178,141982,330],{"class":319},[178,141984,135449],{"class":188},[178,141986,336],{"class":319},[19,141988,141376],{},[154,141990,141991],{"className":128664,"code":135419,"language":128666,"meta":160,"style":160},[70,141992,141993],{"__ignoreMap":160},[178,141994,141995,141997,141999,142001,142003,142005,142007,142009,142011,142013,142015,142017],{"class":180,"line":181},[178,141996,320],{"class":319},[178,141998,3269],{"class":323},[178,142000,56960],{"class":184},[178,142002,330],{"class":319},[178,142004,135434],{"class":188},[178,142006,56968],{"class":184},[178,142008,330],{"class":319},[178,142010,135441],{"class":188},[178,142012,135444],{"class":184},[178,142014,330],{"class":319},[178,142016,135449],{"class":188},[178,142018,336],{"class":319},[19,142020,142021,142022,142025],{},"2 号盒子 ",[70,142023,142024],{},"recom_bd"," ，注意里面的小竖线",[2946,142027,142028,142039,142042,142047,142052],{},[29,142029,142030,142031,142033,142034,142036,142037],{},"右侧结构里面放 ",[70,142032,2946],{}," 包含 4个 ",[70,142035,29],{},"，每个li里面包含一个",[70,142038,3269],{},[29,142040,142041],{},"直接利用切片工具把里面的内容当成一张图片",[29,142043,140417,142044,142046],{},[70,142045,29],{}," 设置浮动",[29,142048,140417,142049,142051],{},[70,142050,3269],{}," 设置宽高，宽度 248px，高度 163px",[29,142053,142054,142055,141615,142058,142060,142061,142063,142064],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[70,142056,142057],{},"top 10px",[70,142059,29],{},"设置相对定位（注意，最后一个",[70,142062,29],{},"不用设置伪元素），可以利用 ",[70,142065,142066],{},"nth-child(-n+3){...}",[19,142068,141287],{},[154,142070,142071],{"className":127917,"code":139759,"language":127919,"meta":160,"style":160},[70,142072,142073,142081,142091,142101],{"__ignoreMap":160},[178,142074,142075,142077,142079],{"class":180,"line":181},[178,142076,53341],{"class":323},[178,142078,138918],{"class":184},[178,142080,17330],{"class":319},[178,142082,142083,142085,142087,142089],{"class":180,"line":263},[178,142084,138925],{"class":195},[178,142086,53167],{"class":319},[178,142088,9421],{"class":188},[178,142090,3100],{"class":319},[178,142092,142093,142095,142097,142099],{"class":180,"line":274},[178,142094,129533],{"class":195},[178,142096,53167],{"class":319},[178,142098,62590],{"class":195},[178,142100,3100],{"class":319},[178,142102,142103],{"class":180,"line":354},[178,142104,3371],{"class":319},[19,142106,141376],{},[154,142108,142109],{"className":127917,"code":139759,"language":127919,"meta":160,"style":160},[70,142110,142111,142119,142129,142139],{"__ignoreMap":160},[178,142112,142113,142115,142117],{"class":180,"line":181},[178,142114,53341],{"class":323},[178,142116,138918],{"class":184},[178,142118,17330],{"class":319},[178,142120,142121,142123,142125,142127],{"class":180,"line":263},[178,142122,138925],{"class":195},[178,142124,53167],{"class":319},[178,142126,9421],{"class":188},[178,142128,3100],{"class":319},[178,142130,142131,142133,142135,142137],{"class":180,"line":274},[178,142132,129533],{"class":195},[178,142134,53167],{"class":319},[178,142136,62590],{"class":195},[178,142138,3100],{"class":319},[178,142140,142141],{"class":180,"line":354},[178,142142,3371],{"class":319},[387,142144,142146],{"id":142145},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[3269,142148],{"style":127773,"src":142149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,142151,142152],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,142154,142155],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,142157,142158,142161],{},[70,142159,142160],{},"box_hd"," 制作",[19,142163,141941,142164,142166],{},[70,142165,142160],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[3269,142168],{"style":127773,"src":142169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[2946,142171,142172,142177,142182,142185],{},[29,142173,142174,142176],{},[70,142175,142160],{}," 给 30px 的高度，2个像素的下边框",[29,142178,142179,142180],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[70,142181,140428],{},[29,142183,142184],{},"左侧盒左浮动，右侧盒子右浮动",[29,142186,142187,142189,142190,142192],{},[70,142188,2178],{},"标签之间的距离用左右的",[70,142191,32624],{},"撑开即可",[19,142194,142195],{},"结构代码",[154,142197,142198],{"className":127917,"code":140587,"language":127919,"meta":160,"style":160},[70,142199,142200,142206,142216],{"__ignoreMap":160},[178,142201,142202,142204],{"class":180,"line":181},[178,142203,131765],{"class":184},[178,142205,17330],{"class":319},[178,142207,142208,142210,142212,142214],{"class":180,"line":263},[178,142209,132397],{"class":195},[178,142211,53167],{"class":319},[178,142213,56],{"class":195},[178,142215,3100],{"class":319},[178,142217,142218],{"class":180,"line":274},[178,142219,3371],{"class":319},[19,142221,142222],{},"样式代码",[154,142224,142225],{"className":127917,"code":140587,"language":127919,"meta":160,"style":160},[70,142226,142227,142233,142243],{"__ignoreMap":160},[178,142228,142229,142231],{"class":180,"line":181},[178,142230,131765],{"class":184},[178,142232,17330],{"class":319},[178,142234,142235,142237,142239,142241],{"class":180,"line":263},[178,142236,132397],{"class":195},[178,142238,53167],{"class":319},[178,142240,56],{"class":195},[178,142242,3100],{"class":319},[178,142244,142245],{"class":180,"line":274},[178,142246,3371],{"class":319},[19,142248,142249,142161],{},[70,142250,142251],{},"box_bd",[19,142253,142254],{},"2 号盒子 box_bd，不要给高度",[3269,142256],{"style":127773,"src":142257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,142259,142260],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,142262,142263],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,142265,142266],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[2946,142268,142269,142281,142297],{},[29,142270,142271,142273,142274,142277,142278,142280],{},[70,142272,142251],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[70,142275,142276],{},"tab_content","，在",[70,142279,142276],{}," 里面包裹tab选项卡对应的内容",[29,142282,142283,142284,142287,142288,142290,142291,142293,142294,142296],{},"内容被一个大盒子包裹（",[70,142285,142286],{},"tab_list_item","），里面是 ",[70,142289,2946],{}," 包裹 5个 ",[70,142292,29],{},"，每个",[70,142295,29],{},"设置对应的宽度，然后设置浮动",[29,142298,142299,142300,142302,142303,142305,142306],{},"而这5个",[70,142301,29],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[70,142304,29],{},"设置",[2946,142307,142308,142326,142329],{},[29,142309,142310,142311,142313,142314,142316,142317,142319,142320,142322,142323,142325],{},"第一个小 ",[70,142312,29],{}," 分为上下结构，上面是 ",[70,142315,2946],{}," 包裹 ",[70,142318,29],{}," ，",[70,142321,29],{},"里面包裹 ",[70,142324,2178],{},"，下面插入一张图片",[29,142327,142328],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[29,142330,142331,142332,142334,142335,142337,142338,142340],{},"后面的小 ",[70,142333,29],{}," 里面先放一个",[70,142336,2178],{},"标签，然后在",[70,142339,2178],{},"标签里面插入图片即可",[19,142342,142195],{},[154,142344,142345],{"className":128664,"code":135419,"language":128666,"meta":160,"style":160},[70,142346,142347],{"__ignoreMap":160},[178,142348,142349,142351,142353,142355,142357,142359,142361,142363,142365,142367,142369,142371],{"class":180,"line":181},[178,142350,320],{"class":319},[178,142352,3269],{"class":323},[178,142354,56960],{"class":184},[178,142356,330],{"class":319},[178,142358,135434],{"class":188},[178,142360,56968],{"class":184},[178,142362,330],{"class":319},[178,142364,135441],{"class":188},[178,142366,135444],{"class":184},[178,142368,330],{"class":319},[178,142370,135449],{"class":188},[178,142372,336],{"class":319},[19,142374,142222],{},[154,142376,142377],{"className":128664,"code":135419,"language":128666,"meta":160,"style":160},[70,142378,142379],{"__ignoreMap":160},[178,142380,142381,142383,142385,142387,142389,142391,142393,142395,142397,142399,142401,142403],{"class":180,"line":181},[178,142382,320],{"class":319},[178,142384,3269],{"class":323},[178,142386,56960],{"class":184},[178,142388,330],{"class":319},[178,142390,135434],{"class":188},[178,142392,56968],{"class":184},[178,142394,330],{"class":319},[178,142396,135441],{"class":188},[178,142398,135444],{"class":184},[178,142400,330],{"class":319},[178,142402,135449],{"class":188},[178,142404,336],{"class":319},[19,142406,142407],{},"tab栏切换需求！！！！！！介绍：",[3269,142409],{"style":127773,"src":142410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[2946,142412,142413,142421,142427,142430],{},[29,142414,142415,142418,142419],{},[70,142416,142417],{},"tab","栏的布局是 ",[70,142420,140428],{},[29,142422,142423,142424,142426],{},"有多少个",[70,142425,142417],{},"选项卡，那么对应就有多少个内容",[29,142428,142429],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[29,142431,142432,142433,142436,142437,142439,142440,142442],{},"等后面我们学习了",[70,142434,142435],{},"js","之后，我们就会配合",[70,142438,142435],{},"来实现，",[70,142441,142417],{},"栏的切换",[14,142444,142446],{"id":142445},"_162-列表制作","16.2 列表制作",[387,142448,142450],{"id":142449},"_1621-准备工作","16.2.1 准备工作",[2946,142452,142453,142456,142459,142462],{},[29,142454,142455],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[29,142457,142458],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[29,142460,142461],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[29,142463,142464],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[387,142466,142468,142469,404,142471,142473],{"id":142467},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[70,142470,132922],{},[70,142472,55436],{}," 修改",[3269,142475],{"style":127773,"src":142476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[2946,142478,142479],{},[29,142480,142481],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,142483,141287],{},[154,142485,142486],{"className":127917,"code":133349,"language":127919,"meta":160,"style":160},[70,142487,142488,142492,142506,142510,142524,142528,142542,142546,142560,142564],{"__ignoreMap":160},[178,142489,142490],{"class":180,"line":181},[178,142491,133356],{"class":2008},[178,142493,142494,142496,142498,142500,142502,142504],{"class":180,"line":263},[178,142495,133361],{"class":184},[178,142497,81526],{"class":319},[178,142499,130277],{"class":195},[178,142501,53167],{"class":319},[178,142503,133370],{"class":195},[178,142505,130847],{"class":319},[178,142507,142508],{"class":180,"line":274},[178,142509,133377],{"class":2008},[178,142511,142512,142514,142516,142518,142520,142522],{"class":180,"line":354},[178,142513,133382],{"class":184},[178,142515,81526],{"class":319},[178,142517,130277],{"class":195},[178,142519,53167],{"class":319},[178,142521,56485],{"class":195},[178,142523,130847],{"class":319},[178,142525,142526],{"class":180,"line":364},[178,142527,133397],{"class":2008},[178,142529,142530,142532,142534,142536,142538,142540],{"class":180,"line":740},[178,142531,133402],{"class":184},[178,142533,81526],{"class":319},[178,142535,130277],{"class":195},[178,142537,53167],{"class":319},[178,142539,56552],{"class":195},[178,142541,130847],{"class":319},[178,142543,142544],{"class":180,"line":746},[178,142545,133417],{"class":2008},[178,142547,142548,142550,142552,142554,142556,142558],{"class":180,"line":752},[178,142549,133422],{"class":184},[178,142551,81526],{"class":319},[178,142553,130277],{"class":195},[178,142555,53167],{"class":319},[178,142557,87948],{"class":195},[178,142559,130847],{"class":319},[178,142561,142562],{"class":180,"line":757},[178,142563,133437],{"class":2008},[178,142565,142566,142568,142570,142572,142574,142576],{"class":180,"line":763},[178,142567,133442],{"class":184},[178,142569,81526],{"class":319},[178,142571,130277],{"class":195},[178,142573,53167],{"class":319},[178,142575,133451],{"class":195},[178,142577,130847],{"class":319},[19,142579,141376],{},[154,142581,142582],{"className":127917,"code":133349,"language":127919,"meta":160,"style":160},[70,142583,142584,142588,142602,142606,142620,142624,142638,142642,142656,142660],{"__ignoreMap":160},[178,142585,142586],{"class":180,"line":181},[178,142587,133356],{"class":2008},[178,142589,142590,142592,142594,142596,142598,142600],{"class":180,"line":263},[178,142591,133361],{"class":184},[178,142593,81526],{"class":319},[178,142595,130277],{"class":195},[178,142597,53167],{"class":319},[178,142599,133370],{"class":195},[178,142601,130847],{"class":319},[178,142603,142604],{"class":180,"line":274},[178,142605,133377],{"class":2008},[178,142607,142608,142610,142612,142614,142616,142618],{"class":180,"line":354},[178,142609,133382],{"class":184},[178,142611,81526],{"class":319},[178,142613,130277],{"class":195},[178,142615,53167],{"class":319},[178,142617,56485],{"class":195},[178,142619,130847],{"class":319},[178,142621,142622],{"class":180,"line":364},[178,142623,133397],{"class":2008},[178,142625,142626,142628,142630,142632,142634,142636],{"class":180,"line":740},[178,142627,133402],{"class":184},[178,142629,81526],{"class":319},[178,142631,130277],{"class":195},[178,142633,53167],{"class":319},[178,142635,56552],{"class":195},[178,142637,130847],{"class":319},[178,142639,142640],{"class":180,"line":746},[178,142641,133417],{"class":2008},[178,142643,142644,142646,142648,142650,142652,142654],{"class":180,"line":752},[178,142645,133422],{"class":184},[178,142647,81526],{"class":319},[178,142649,130277],{"class":195},[178,142651,53167],{"class":319},[178,142653,87948],{"class":195},[178,142655,130847],{"class":319},[178,142657,142658],{"class":180,"line":757},[178,142659,133437],{"class":2008},[178,142661,142662,142664,142666,142668,142670,142672],{"class":180,"line":763},[178,142663,133442],{"class":184},[178,142665,81526],{"class":319},[178,142667,130277],{"class":195},[178,142669,53167],{"class":319},[178,142671,133451],{"class":195},[178,142673,130847],{"class":319},[2946,142675,142676,142687],{},[29,142677,142678,142679,142682,142683,404,142685],{},"1 号盒子左侧浮动 ",[70,142680,142681],{},"sk_list"," 里面包含 ",[70,142684,2946],{},[70,142686,29],{},[29,142688,142689,142690,142682,142693,404,142695],{},"2 号盒子左侧浮动 ",[70,142691,142692],{},"sk_con",[70,142694,2946],{},[70,142696,29],{},[19,142698,141287],{},[154,142700,142701],{"className":127917,"code":140587,"language":127919,"meta":160,"style":160},[70,142702,142703,142709,142719],{"__ignoreMap":160},[178,142704,142705,142707],{"class":180,"line":181},[178,142706,131765],{"class":184},[178,142708,17330],{"class":319},[178,142710,142711,142713,142715,142717],{"class":180,"line":263},[178,142712,132397],{"class":195},[178,142714,53167],{"class":319},[178,142716,56],{"class":195},[178,142718,3100],{"class":319},[178,142720,142721],{"class":180,"line":274},[178,142722,3371],{"class":319},[19,142724,141376],{},[154,142726,142727],{"className":127917,"code":140587,"language":127919,"meta":160,"style":160},[70,142728,142729,142735,142745],{"__ignoreMap":160},[178,142730,142731,142733],{"class":180,"line":181},[178,142732,131765],{"class":184},[178,142734,17330],{"class":319},[178,142736,142737,142739,142741,142743],{"class":180,"line":263},[178,142738,132397],{"class":195},[178,142740,53167],{"class":319},[178,142742,56],{"class":195},[178,142744,3100],{"class":319},[178,142746,142747],{"class":180,"line":274},[178,142748,3371],{"class":319},[387,142750,142752,142753],{"id":142751},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[70,142754,142755],{},"sk_container",[3269,142757],{"style":127773,"src":142758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[2946,142760,142761,142766],{},[29,142762,141941,142763,142765],{},[70,142764,142755],{}," 给宽度 1200，不要给高度",[29,142767,142768],{},"一定不要忘记清除浮动",[19,142770,141287],{},[154,142772,142773],{"className":127917,"code":140587,"language":127919,"meta":160,"style":160},[70,142774,142775,142781,142791],{"__ignoreMap":160},[178,142776,142777,142779],{"class":180,"line":181},[178,142778,131765],{"class":184},[178,142780,17330],{"class":319},[178,142782,142783,142785,142787,142789],{"class":180,"line":263},[178,142784,132397],{"class":195},[178,142786,53167],{"class":319},[178,142788,56],{"class":195},[178,142790,3100],{"class":319},[178,142792,142793],{"class":180,"line":274},[178,142794,3371],{"class":319},[26,142796,142797],{},[29,142798,142799],{},"sk_hd制作",[2946,142801,142802],{},[29,142803,142021,142804,142807],{},[70,142805,142806],{},"sk_hd"," ，插入图片即可",[19,142809,141287],{},[154,142811,142812],{"className":128664,"code":135419,"language":128666,"meta":160,"style":160},[70,142813,142814],{"__ignoreMap":160},[178,142815,142816,142818,142820,142822,142824,142826,142828,142830,142832,142834,142836,142838],{"class":180,"line":181},[178,142817,320],{"class":319},[178,142819,3269],{"class":323},[178,142821,56960],{"class":184},[178,142823,330],{"class":319},[178,142825,135434],{"class":188},[178,142827,56968],{"class":184},[178,142829,330],{"class":319},[178,142831,135441],{"class":188},[178,142833,135444],{"class":184},[178,142835,330],{"class":319},[178,142837,135449],{"class":188},[178,142839,336],{"class":319},[26,142841,142842],{"start":263},[29,142843,142844],{},"sk_bd制作",[2946,142846,142847],{},[29,142848,142849,142850,142853,142854,404,142856,142858],{},"3 号盒子 ",[70,142851,142852],{},"sk_bd"," ，里面包含很多的 ",[70,142855,2946],{},[70,142857,29],{},[2946,142859,142860,142869],{},[29,142861,142862,142863,142865,142866,142868],{},"当鼠标移入到 ",[70,142864,29],{}," 上面的时候显示红色的边框，在这里先给 ",[70,142867,29],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[29,142870,142871,142872,142874,142875,142877,142878,142881,142882,142884],{},"由于给每个 ",[70,142873,29],{}," 都设置了外边距，导致一行的最后一个 ",[70,142876,29],{}," 掉了下来，在这里我们利用 ",[70,142879,142880],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[70,142883,29],{},"，去掉外边距就好了",[19,142886,141287],{},[154,142888,142889],{"className":127917,"code":140106,"language":127919,"meta":160,"style":160},[70,142890,142891,142897,142909],{"__ignoreMap":160},[178,142892,142893,142895],{"class":180,"line":181},[178,142894,53341],{"class":323},[178,142896,17330],{"class":319},[178,142898,142899,142901,142903,142905,142907],{"class":180,"line":263},[178,142900,72190],{"class":195},[178,142902,53167],{"class":319},[178,142904,2133],{"class":195},[178,142906,53286],{"class":195},[178,142908,3100],{"class":319},[178,142910,142911],{"class":180,"line":274},[178,142912,3371],{"class":319},[19,142914,141376],{},[154,142916,142917],{"className":127917,"code":140106,"language":127919,"meta":160,"style":160},[70,142918,142919,142925,142937],{"__ignoreMap":160},[178,142920,142921,142923],{"class":180,"line":181},[178,142922,53341],{"class":323},[178,142924,17330],{"class":319},[178,142926,142927,142929,142931,142933,142935],{"class":180,"line":263},[178,142928,72190],{"class":195},[178,142930,53167],{"class":319},[178,142932,2133],{"class":195},[178,142934,53286],{"class":195},[178,142936,3100],{"class":319},[178,142938,142939],{"class":180,"line":274},[178,142940,3371],{"class":319},[14,142942,142944],{"id":142943},"_163-注册页面制作","16.3 注册页面制作",[3269,142946],{"style":127773,"src":142947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,142949,142950,142952],{},[2093,142951,10786],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[3269,142954],{"style":127773,"src":142955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[387,142957,142959],{"id":142958},"_1631-准备工作","16.3.1 准备工作",[2946,142961,142962,142965],{},[29,142963,142964],{},"创建register.html，引入 base.css，引入favicon图标",[29,142966,142967],{},"创建register.css ，在html页面进行引入",[387,142969,142971,142972,142974],{"id":142970},"_1632-header-头部实现","16.3.2 ",[70,142973,132922],{}," 头部实现",[2946,142976,142977,142980],{},[29,142978,142979],{},"整个内容用 版心 进行包裹",[29,142981,142982],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,142984,141287],{},[154,142986,142987],{"className":128664,"code":135419,"language":128666,"meta":160,"style":160},[70,142988,142989],{"__ignoreMap":160},[178,142990,142991,142993,142995,142997,142999,143001,143003,143005,143007,143009,143011,143013],{"class":180,"line":181},[178,142992,320],{"class":319},[178,142994,3269],{"class":323},[178,142996,56960],{"class":184},[178,142998,330],{"class":319},[178,143000,135434],{"class":188},[178,143002,56968],{"class":184},[178,143004,330],{"class":319},[178,143006,135441],{"class":188},[178,143008,135444],{"class":184},[178,143010,330],{"class":319},[178,143012,135449],{"class":188},[178,143014,336],{"class":319},[19,143016,141376],{},[154,143018,143019],{"className":128664,"code":135419,"language":128666,"meta":160,"style":160},[70,143020,143021],{"__ignoreMap":160},[178,143022,143023,143025,143027,143029,143031,143033,143035,143037,143039,143041,143043,143045],{"class":180,"line":181},[178,143024,320],{"class":319},[178,143026,3269],{"class":323},[178,143028,56960],{"class":184},[178,143030,330],{"class":319},[178,143032,135434],{"class":188},[178,143034,56968],{"class":184},[178,143036,330],{"class":319},[178,143038,135441],{"class":188},[178,143040,135444],{"class":184},[178,143042,330],{"class":319},[178,143044,135449],{"class":188},[178,143046,336],{"class":319},[387,143048,143050,143051,143054],{"id":143049},"_1633-registerarea-主体模块实现","16.3.3 ",[70,143052,143053],{},"registerarea"," 主体模块实现",[3269,143056],{"style":127773,"src":143057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,143059,143060],{},"整个大盒子 高度为 522px，设置4个边框",[19,143062,141287],{},[154,143064,143065],{"className":127917,"code":132074,"language":127919,"meta":160,"style":160},[70,143066,143067,143073,143089],{"__ignoreMap":160},[178,143068,143069,143071],{"class":180,"line":181},[178,143070,53341],{"class":323},[178,143072,17330],{"class":319},[178,143074,143075,143077,143079,143081,143083,143085,143087],{"class":180,"line":263},[178,143076,72616],{"class":195},[178,143078,53167],{"class":319},[178,143080,1665],{"class":195},[178,143082,53222],{"class":699},[178,143084,53251],{"class":195},[178,143086,131309],{"class":195},[178,143088,3100],{"class":319},[178,143090,143091],{"class":180,"line":274},[178,143092,3371],{"class":319},[19,143094,141376],{},[154,143096,143097],{"className":127917,"code":132074,"language":127919,"meta":160,"style":160},[70,143098,143099,143105,143121],{"__ignoreMap":160},[178,143100,143101,143103],{"class":180,"line":181},[178,143102,53341],{"class":323},[178,143104,17330],{"class":319},[178,143106,143107,143109,143111,143113,143115,143117,143119],{"class":180,"line":263},[178,143108,72616],{"class":195},[178,143110,53167],{"class":319},[178,143112,1665],{"class":195},[178,143114,53222],{"class":699},[178,143116,53251],{"class":195},[178,143118,131309],{"class":195},[178,143120,3100],{"class":319},[178,143122,143123],{"class":180,"line":274},[178,143124,3371],{"class":319},[19,143126,143127],{},"1号盒子 是一个 h3 标签，放标题",[2946,143129,143130],{},[29,143131,143132],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,143134,141287],{},[154,143136,143137],{"className":127917,"code":140587,"language":127919,"meta":160,"style":160},[70,143138,143139,143145,143155],{"__ignoreMap":160},[178,143140,143141,143143],{"class":180,"line":181},[178,143142,131765],{"class":184},[178,143144,17330],{"class":319},[178,143146,143147,143149,143151,143153],{"class":180,"line":263},[178,143148,132397],{"class":195},[178,143150,53167],{"class":319},[178,143152,56],{"class":195},[178,143154,3100],{"class":319},[178,143156,143157],{"class":180,"line":274},[178,143158,3371],{"class":319},[19,143160,141376],{},[154,143162,143163],{"className":127917,"code":140587,"language":127919,"meta":160,"style":160},[70,143164,143165,143171,143181],{"__ignoreMap":160},[178,143166,143167,143169],{"class":180,"line":181},[178,143168,131765],{"class":184},[178,143170,17330],{"class":319},[178,143172,143173,143175,143177,143179],{"class":180,"line":263},[178,143174,132397],{"class":195},[178,143176,53167],{"class":319},[178,143178,56],{"class":195},[178,143180,3100],{"class":319},[178,143182,143183],{"class":180,"line":274},[178,143184,3371],{"class":319},[19,143186,143187],{},"2号盒子 里面放注册的内容",[2946,143189,143190,143193,143202,143216,143229,143232,143235,143253,143267],{},[29,143191,143192],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[29,143194,143195,143196,143198,143199,143201],{},"里面的内容利用 ",[70,143197,2946],{}," 包含 ",[70,143200,29],{}," 来实现的（不需要用表格）",[29,143203,140431,143204,143206,143207,143209,143210,143212,143213,143215],{},[70,143205,29],{}," 里面，左侧放 ",[70,143208,35340],{}," 标签， 中间放",[70,143211,55543],{}," 标签， 右侧放 ",[70,143214,178],{}," 提示信息",[29,143217,143218,143219,143221,143222,143224,143225,143228],{},"左侧 ",[70,143220,35340],{},"里面的文字都是右对齐，我们可以给",[70,143223,35340],{},"设置一个宽度（88px），然后利用",[70,143226,143227],{},"text-align"," 来设置右对齐",[29,143230,143231],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[29,143233,143234],{},"右侧 span修饰一下文字颜色",[29,143236,143237,143238],{},"提示信息的样式优化",[2946,143239,143240,143243,143246],{},[29,143241,143242],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[29,143244,143245],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[29,143247,143248,143249,143252],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[70,143250,143251],{},"vertical-algin"," 来设置 图片与文字对齐方式",[29,143254,143255,143256],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[2946,143257,143258,143264],{},[29,143259,143260,143261,143263],{},"设置 ",[70,143262,25312],{}," 的 左右 12px 的内边距，设置一下文字颜色",[29,143265,143266],{},"分别设置 背景颜色",[29,143268,143269,143270,143272],{},"同意协议 和 完成注册 都是用 ",[70,143271,29],{}," 进行包裹",[19,143274,141287],{},[154,143276,143277],{"className":127917,"code":141860,"language":127919,"meta":160,"style":160},[70,143278,143279,143285,143295],{"__ignoreMap":160},[178,143280,143281,143283],{"class":180,"line":181},[178,143282,53341],{"class":323},[178,143284,17330],{"class":319},[178,143286,143287,143289,143291,143293],{"class":180,"line":263},[178,143288,72598],{"class":195},[178,143290,53167],{"class":319},[178,143292,141877],{"class":195},[178,143294,3100],{"class":319},[178,143296,143297],{"class":180,"line":274},[178,143298,3371],{"class":319},[19,143300,141376],{},[154,143302,143303],{"className":127917,"code":141860,"language":127919,"meta":160,"style":160},[70,143304,143305,143311,143321],{"__ignoreMap":160},[178,143306,143307,143309],{"class":180,"line":181},[178,143308,53341],{"class":323},[178,143310,17330],{"class":319},[178,143312,143313,143315,143317,143319],{"class":180,"line":263},[178,143314,72598],{"class":195},[178,143316,53167],{"class":319},[178,143318,141877],{"class":195},[178,143320,3100],{"class":319},[178,143322,143323],{"class":180,"line":274},[178,143324,3371],{"class":319},[387,143326,143328],{"id":143327},"_1634-底部实现","16.3.4 底部实现",[19,143330,141287],{},[154,143332,143333],{"className":127917,"code":141860,"language":127919,"meta":160,"style":160},[70,143334,143335,143341,143351],{"__ignoreMap":160},[178,143336,143337,143339],{"class":180,"line":181},[178,143338,53341],{"class":323},[178,143340,17330],{"class":319},[178,143342,143343,143345,143347,143349],{"class":180,"line":263},[178,143344,72598],{"class":195},[178,143346,53167],{"class":319},[178,143348,141877],{"class":195},[178,143350,3100],{"class":319},[178,143352,143353],{"class":180,"line":274},[178,143354,3371],{"class":319},[19,143356,141376],{},[154,143358,143359],{"className":128664,"code":132021,"language":128666,"meta":160,"style":160},[70,143360,143361,143365,143379,143383],{"__ignoreMap":160},[178,143362,143363],{"class":180,"line":181},[178,143364,132028],{"class":2008},[178,143366,143367,143369,143371,143373,143375,143377],{"class":180,"line":263},[178,143368,320],{"class":319},[178,143370,53341],{"class":323},[178,143372,55210],{"class":184},[178,143374,330],{"class":319},[178,143376,132041],{"class":188},[178,143378,336],{"class":319},[178,143380,143381],{"class":180,"line":274},[178,143382,132048],{"class":319},[178,143384,143385,143387,143389],{"class":180,"line":354},[178,143386,367],{"class":319},[178,143388,53341],{"class":323},[178,143390,336],{"class":319},[14,143392,143394],{"id":143393},"_164-项目总结","16.4 项目总结",[26,143396,143397,143400,143403,143406],{},[29,143398,143399],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[29,143401,143402],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[29,143404,143405],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[29,143407,143408],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[3269,143410],{"style":127773,"src":143411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[26,143413,143414],{"start":364},[29,143415,143416],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[3269,143418],{"style":127773,"src":143419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[26,143421,143422],{"start":740},[29,143423,143424],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[3269,143426],{"style":127773,"src":143427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[154,143429,143430],{"className":128664,"code":138074,"language":128666,"meta":160,"style":160},[70,143431,143432],{"__ignoreMap":160},[178,143433,143434,143436,143438,143440,143442,143444,143446,143448,143450,143452,143454,143456],{"class":180,"line":181},[178,143435,320],{"class":319},[178,143437,55543],{"class":323},[178,143439,467],{"class":184},[178,143441,330],{"class":319},[178,143443,64419],{"class":188},[178,143445,426],{"class":184},[178,143447,330],{"class":319},[178,143449,138095],{"class":188},[178,143451,62741],{"class":184},[178,143453,330],{"class":319},[178,143455,138102],{"class":188},[178,143457,336],{"class":319},[26,143459,143460,143463],{"start":746},[29,143461,143462],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[29,143464,143465],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[1853,143467,143468],{},"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":160,"searchDepth":263,"depth":263,"links":143470},[143471,143476,143483,143491],{"id":141097,"depth":263,"text":141098,"children":143472},[143473,143474,143475],{"id":141101,"depth":274,"text":141102},{"id":141832,"depth":274,"text":141833},{"id":142145,"depth":274,"text":142146},{"id":142445,"depth":263,"text":142446,"children":143477},[143478,143479,143481],{"id":142449,"depth":274,"text":142450},{"id":142467,"depth":274,"text":143480},"16.2.2 列表页 header 和 nav 修改",{"id":142751,"depth":274,"text":143482},"16.2.3 列表页主体 sk_container",{"id":142943,"depth":263,"text":142944,"children":143484},[143485,143486,143488,143490],{"id":142958,"depth":274,"text":142959},{"id":142970,"depth":274,"text":143487},"16.3.2 header 头部实现",{"id":143049,"depth":274,"text":143489},"16.3.3 registerarea 主体模块实现",{"id":143327,"depth":274,"text":143328},{"id":143393,"depth":263,"text":143394},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":141089,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143498,"title":143499,"body":143500,"description":25135,"extension":1880,"meta":143608,"navigation":721,"path":143609,"seo":143610,"stem":143611,"__hash__":143612},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143501,"toc":143603},[143502,143505,143509,143512,143515,143524,143533,143537,143542,143549,143567,143570,143573,143576,143579,143582,143585,143588,143591,143594,143597,143600],[10,143503,143499],{"id":143504},"_17-web服务器与网站发布",[14,143506,143508],{"id":143507},"_171-web服务器","17.1 Web服务器",[19,143510,143511],{},"把自己网站上传到服务器上，可以让其他人访问",[3269,143513],{"style":127773,"src":143514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,143516,143517,143520,143521],{},[2093,143518,143519],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[2093,143522,143523],{},"Web 服务器等",[19,143525,143526,143527,404,143530,27492],{},"根据服务器在网络中所在的位置不同，又可分为 ",[2093,143528,143529],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[2093,143531,143532],{},"远程服务器",[387,143534,143536],{"id":143535},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,143538,143539],{},[2093,143540,143541],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,143543,143544,143545],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[2178,143546,143547],{"href":143547,"rel":143548},"http:\u002F\u002Ffree.3v.do\u002F",[25619],[2946,143550,143551,143554,143557,143564],{},[29,143552,143553],{},"去免费空间网站注册账号。",[29,143555,143556],{},"记录下主机名、用户名、密码、域名。",[29,143558,143559,143560,143563],{},"利用 ",[70,143561,143562],{},"utftp"," 软件 上传网站到远程服务器",[29,143565,143566],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,143568,143569],{},"使用软件上传，对上传软件文件进行解压",[3269,143571],{"style":127773,"src":143572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[3269,143574],{"style":127773,"src":143575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,143577,143578],{},"输入刚刚申请的服务器账号信息：",[3269,143580],{"style":127773,"src":143581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[3269,143583],{"style":127773,"src":143584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[3269,143586],{"style":127773,"src":143587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[3269,143589],{"style":127773,"src":143590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,143592,143593],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[3269,143595],{"style":127773,"src":143596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,143598,143599],{},"浏览器输入域名即可访问",[19,143601,143602],{},"首页一定必须是index",{"title":160,"searchDepth":263,"depth":263,"links":143604},[143605],{"id":143507,"depth":263,"text":143508,"children":143606},[143607],{"id":143535,"depth":274,"text":143536},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143499,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143614,"title":143615,"body":143616,"description":25135,"extension":1880,"meta":144543,"navigation":721,"path":144544,"seo":144545,"stem":144546,"__hash__":144547},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143617,"toc":144526},[143618,143621,143625,143628,143631,143642,143645,143649,143653,143658,143661,143664,143667,143670,143674,143700,143704,143708,143711,143714,143718,143751,143755,143758,143761,143825,143829,143833,143836,143839,143842,143846,143891,143895,143898,143928,143932,143936,143939,143942,143946,143949,144018,144021,144129,144131,144137,144141,144144,144147,144243,144246,144250,144274,144278,144281,144285,144288,144292,144295,144298,144301,144304,144308,144311,144314,144318,144322,144325,144328,144331,144334,144338,144341,144345,144348,144351,144396,144400,144404,144407,144410,144413,144445,144449,144452,144486,144490,144493,144523],[10,143619,143615],{"id":143620},"_18-2d动画与3d转换",[14,143622,143624],{"id":143623},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,143626,143627],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,143629,143630],{},"转换（transform）你可以简单理解为变形",[2946,143632,143633,143636,143639],{},[29,143634,143635],{},"移动：translate",[29,143637,143638],{},"旋转：rotate",[29,143640,143641],{},"缩放：scale",[3269,143643],{"style":127773,"src":143644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[387,143646,143648],{"id":143647},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[23756,143650,143652],{"id":143651},"_18111-translate介绍","18.1.1.1 translate介绍",[19,143654,143655,143656],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[2093,143657,134576],{},[3269,143659],{"style":127773,"src":143660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,143662,143663],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,143665,143666],{},"对于行内元素无效",[19,143668,143669],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[23756,143671,143673],{"id":143672},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[154,143675,143676],{"className":127917,"code":140106,"language":127919,"meta":160,"style":160},[70,143677,143678,143684,143696],{"__ignoreMap":160},[178,143679,143680,143682],{"class":180,"line":181},[178,143681,53341],{"class":323},[178,143683,17330],{"class":319},[178,143685,143686,143688,143690,143692,143694],{"class":180,"line":263},[178,143687,72190],{"class":195},[178,143689,53167],{"class":319},[178,143691,2133],{"class":195},[178,143693,53286],{"class":195},[178,143695,3100],{"class":319},[178,143697,143698],{"class":180,"line":274},[178,143699,3371],{"class":319},[387,143701,143703],{"id":143702},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[23756,143705,143707],{"id":143706},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,143709,143710],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[3269,143712],{"style":127773,"src":143713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[23756,143715,143717],{"id":143716},"_18122-旋转效果","18.1.2.2 旋转效果",[154,143719,143721],{"className":127917,"code":143720,"language":127919,"meta":160,"style":160},"div {\n  transform: rotate(45deg);\n}\n",[70,143722,143723,143729,143747],{"__ignoreMap":160},[178,143724,143725,143727],{"class":180,"line":181},[178,143726,53341],{"class":323},[178,143728,17330],{"class":319},[178,143730,143731,143733,143735,143738,143740,143742,143745],{"class":180,"line":263},[178,143732,137901],{"class":195},[178,143734,53167],{"class":319},[178,143736,143737],{"class":195},"rotate",[178,143739,944],{"class":319},[178,143741,2469],{"class":195},[178,143743,143744],{"class":699},"deg",[178,143746,4495],{"class":319},[178,143748,143749],{"class":180,"line":274},[178,143750,3371],{"class":319},[23756,143752,143754],{"id":143753},"_18123-三角做法","18.1.2.3 三角做法",[19,143756,143757],{},"该下标当经过最外层大盒子时会实现向上反转",[3269,143759],{"style":127773,"src":143760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[154,143762,143763],{"className":127917,"code":136437,"language":127919,"meta":160,"style":160},[70,143764,143765,143769,143775,143785,143795,143811,143821],{"__ignoreMap":160},[178,143766,143767],{"class":180,"line":181},[178,143768,136444],{"class":2008},[178,143770,143771,143773],{"class":180,"line":263},[178,143772,136449],{"class":184},[178,143774,17330],{"class":319},[178,143776,143777,143779,143781,143783],{"class":180,"line":274},[178,143778,72288],{"class":195},[178,143780,53167],{"class":319},[178,143782,2133],{"class":195},[178,143784,3100],{"class":319},[178,143786,143787,143789,143791,143793],{"class":180,"line":354},[178,143788,72508],{"class":195},[178,143790,53167],{"class":319},[178,143792,2133],{"class":195},[178,143794,3100],{"class":319},[178,143796,143797,143799,143801,143803,143805,143807,143809],{"class":180,"line":364},[178,143798,72616],{"class":195},[178,143800,53167],{"class":319},[178,143802,2386],{"class":195},[178,143804,53222],{"class":699},[178,143806,53251],{"class":195},[178,143808,65711],{"class":195},[178,143810,3100],{"class":319},[178,143812,143813,143815,143817,143819],{"class":180,"line":740},[178,143814,136492],{"class":195},[178,143816,53167],{"class":319},[178,143818,64090],{"class":195},[178,143820,3100],{"class":319},[178,143822,143823],{"class":180,"line":746},[178,143824,3371],{"class":319},[387,143826,143828],{"id":143827},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[23756,143830,143832],{"id":143831},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,143834,143835],{},"设置中心点",[3269,143837],{"style":127773,"src":143838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,143840,143841],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[23756,143843,143845],{"id":143844},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[154,143847,143849],{"className":127917,"code":143848,"language":127919,"meta":160,"style":160},"\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",[70,143850,143851,143856,143862,143877,143882,143887],{"__ignoreMap":160},[178,143852,143853],{"class":180,"line":181},[178,143854,143855],{"class":2008},"\u002F* 转换中心点 *\u002F\n",[178,143857,143858,143860],{"class":180,"line":263},[178,143859,53341],{"class":323},[178,143861,17330],{"class":319},[178,143863,143864,143867,143869,143871,143873,143875],{"class":180,"line":274},[178,143865,143866],{"class":195},"  transform-origin",[178,143868,53167],{"class":319},[178,143870,53322],{"class":195},[178,143872,18902],{"class":195},[178,143874,131780],{"class":319},[178,143876,136590],{"class":2008},[178,143878,143879],{"class":180,"line":354},[178,143880,143881],{"class":2008},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[178,143883,143884],{"class":180,"line":364},[178,143885,143886],{"class":2008},"  \u002F* transform-origin: left top; *\u002F\n",[178,143888,143889],{"class":180,"line":740},[178,143890,3371],{"class":319},[23756,143892,143894],{"id":143893},"_18133-旋转案例","18.1.3.3 旋转案例",[3269,143896],{"style":127773,"src":143897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[154,143899,143900],{"className":127917,"code":143720,"language":127919,"meta":160,"style":160},[70,143901,143902,143908,143924],{"__ignoreMap":160},[178,143903,143904,143906],{"class":180,"line":181},[178,143905,53341],{"class":323},[178,143907,17330],{"class":319},[178,143909,143910,143912,143914,143916,143918,143920,143922],{"class":180,"line":263},[178,143911,137901],{"class":195},[178,143913,53167],{"class":319},[178,143915,143737],{"class":195},[178,143917,944],{"class":319},[178,143919,2469],{"class":195},[178,143921,143744],{"class":699},[178,143923,4495],{"class":319},[178,143925,143926],{"class":180,"line":274},[178,143927,3371],{"class":319},[387,143929,143931],{"id":143930},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[23756,143933,143935],{"id":143934},"_18141-scale介绍","18.1.4.1 scale介绍",[19,143937,143938],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[3269,143940],{"style":127773,"src":143941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[23756,143943,143945],{"id":143944},"_18142-分页按钮","18.1.4.2 分页按钮",[3269,143947],{"style":127773,"src":143948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[154,143950,143952],{"className":127917,"code":143951,"language":127919,"meta":160,"style":160},"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",[70,143953,143954,143960,143976,143980,143984,143989,143995,144009,144014],{"__ignoreMap":160},[178,143955,143956,143958],{"class":180,"line":181},[178,143957,53341],{"class":323},[178,143959,17330],{"class":319},[178,143961,143962,143964,143966,143969,143971,143974],{"class":180,"line":263},[178,143963,137901],{"class":195},[178,143965,53167],{"class":319},[178,143967,143968],{"class":195},"scale",[178,143970,944],{"class":319},[178,143972,143973],{"class":195},"1.2",[178,143975,4495],{"class":319},[178,143977,143978],{"class":180,"line":274},[178,143979,3371],{"class":319},[178,143981,143982],{"class":180,"line":354},[178,143983,137378],{"class":319},[178,143985,143986],{"class":180,"line":364},[178,143987,143988],{"class":2008},"\u002F* 2D 缩放 *\u002F\n",[178,143990,143991,143993],{"class":180,"line":740},[178,143992,53341],{"class":323},[178,143994,17330],{"class":319},[178,143996,143997,143999,144001,144003,144005,144007],{"class":180,"line":746},[178,143998,137901],{"class":195},[178,144000,53167],{"class":319},[178,144002,143968],{"class":195},[178,144004,944],{"class":319},[178,144006,143973],{"class":195},[178,144008,4495],{"class":319},[178,144010,144011],{"class":180,"line":752},[178,144012,144013],{"class":2008},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[178,144015,144016],{"class":180,"line":757},[178,144017,3371],{"class":319},[19,144019,144020],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[154,144022,144024],{"className":127917,"code":144023,"language":127919,"meta":160,"style":160},"\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",[70,144025,144026,144031,144041,144062,144083,144087,144092,144098,144125],{"__ignoreMap":160},[178,144027,144028],{"class":180,"line":181},[178,144029,144030],{"class":2008},"\u002F* 定义动画 *\u002F\n",[178,144032,144033,144036,144039],{"class":180,"line":263},[178,144034,144035],{"class":699},"@keyframes",[178,144037,144038],{"class":6985}," move",[178,144040,17330],{"class":319},[178,144042,144043,144046,144048,144050,144052,144055,144057,144059],{"class":180,"line":274},[178,144044,144045],{"class":184},"  0%",[178,144047,81526],{"class":319},[178,144049,49866],{"class":195},[178,144051,53167],{"class":319},[178,144053,144054],{"class":195},"translateX",[178,144056,944],{"class":319},[178,144058,2133],{"class":195},[178,144060,144061],{"class":319},"); }\n",[178,144063,144064,144067,144069,144071,144073,144075,144077,144079,144081],{"class":180,"line":354},[178,144065,144066],{"class":184},"  100%",[178,144068,81526],{"class":319},[178,144070,49866],{"class":195},[178,144072,53167],{"class":319},[178,144074,144054],{"class":195},[178,144076,944],{"class":319},[178,144078,2251],{"class":195},[178,144080,53222],{"class":699},[178,144082,144061],{"class":319},[178,144084,144085],{"class":180,"line":364},[178,144086,3371],{"class":319},[178,144088,144089],{"class":180,"line":740},[178,144090,144091],{"class":2008},"\u002F* 调用动画 *\u002F\n",[178,144093,144094,144096],{"class":180,"line":746},[178,144095,53341],{"class":323},[178,144097,17330],{"class":319},[178,144099,144100,144103,144105,144107,144109,144111,144113,144115,144117,144120,144123],{"class":180,"line":752},[178,144101,144102],{"class":195},"  animation",[178,144104,53167],{"class":319},[178,144106,136603],{"class":195},[178,144108,26870],{"class":195},[178,144110,2635],{"class":699},[178,144112,80400],{"class":195},[178,144114,930],{"class":195},[178,144116,2635],{"class":699},[178,144118,144119],{"class":195}," infinite",[178,144121,144122],{"class":195}," alternate",[178,144124,3100],{"class":319},[178,144126,144127],{"class":180,"line":757},[178,144128,3371],{"class":319},[19,144130,144020],{},[154,144132,144135],{"className":144133,"code":144134,"language":159},[157],"\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",[70,144136,144134],{"__ignoreMap":160},[23756,144138,144140],{"id":144139},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,144142,144143],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[3269,144145],{"style":127773,"src":144146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[154,144148,144149],{"className":127917,"code":144023,"language":127919,"meta":160,"style":160},[70,144150,144151,144155,144163,144181,144201,144205,144209,144215,144239],{"__ignoreMap":160},[178,144152,144153],{"class":180,"line":181},[178,144154,144030],{"class":2008},[178,144156,144157,144159,144161],{"class":180,"line":263},[178,144158,144035],{"class":699},[178,144160,144038],{"class":6985},[178,144162,17330],{"class":319},[178,144164,144165,144167,144169,144171,144173,144175,144177,144179],{"class":180,"line":274},[178,144166,144045],{"class":184},[178,144168,81526],{"class":319},[178,144170,49866],{"class":195},[178,144172,53167],{"class":319},[178,144174,144054],{"class":195},[178,144176,944],{"class":319},[178,144178,2133],{"class":195},[178,144180,144061],{"class":319},[178,144182,144183,144185,144187,144189,144191,144193,144195,144197,144199],{"class":180,"line":354},[178,144184,144066],{"class":184},[178,144186,81526],{"class":319},[178,144188,49866],{"class":195},[178,144190,53167],{"class":319},[178,144192,144054],{"class":195},[178,144194,944],{"class":319},[178,144196,2251],{"class":195},[178,144198,53222],{"class":699},[178,144200,144061],{"class":319},[178,144202,144203],{"class":180,"line":364},[178,144204,3371],{"class":319},[178,144206,144207],{"class":180,"line":740},[178,144208,144091],{"class":2008},[178,144210,144211,144213],{"class":180,"line":746},[178,144212,53341],{"class":323},[178,144214,17330],{"class":319},[178,144216,144217,144219,144221,144223,144225,144227,144229,144231,144233,144235,144237],{"class":180,"line":752},[178,144218,144102],{"class":195},[178,144220,53167],{"class":319},[178,144222,136603],{"class":195},[178,144224,26870],{"class":195},[178,144226,2635],{"class":699},[178,144228,80400],{"class":195},[178,144230,930],{"class":195},[178,144232,2635],{"class":699},[178,144234,144119],{"class":195},[178,144236,144122],{"class":195},[178,144238,3100],{"class":319},[178,144240,144241],{"class":180,"line":757},[178,144242,3371],{"class":319},[19,144244,144245],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[387,144247,144249],{"id":144248},"_1823-知识点回顾","18.2.3 知识点回顾",[154,144251,144252],{"className":127917,"code":130086,"language":127919,"meta":160,"style":160},[70,144253,144254,144260,144270],{"__ignoreMap":160},[178,144255,144256,144258],{"class":180,"line":181},[178,144257,53341],{"class":323},[178,144259,17330],{"class":319},[178,144261,144262,144264,144266,144268],{"class":180,"line":263},[178,144263,130099],{"class":195},[178,144265,53167],{"class":319},[178,144267,63457],{"class":195},[178,144269,3100],{"class":319},[178,144271,144272],{"class":180,"line":274},[178,144273,3371],{"class":319},[14,144275,144277],{"id":144276},"_183-3d-转换","18.3 3D 转换",[19,144279,144280],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[387,144282,144284],{"id":144283},"_1831-坐标轴认识","18.3.1 坐标轴认识",[3269,144286],{"style":127773,"src":144287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[387,144289,144291],{"id":144290},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[3269,144293],{"style":127773,"src":144294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,144296,144297],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,144299,144300],{},"translate3d的效果需要搭配透视perspective来使用",[3269,144302],{"style":127773,"src":144303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[387,144305,144307],{"id":144306},"_1833-透视-perspective","18.3.3 透视 perspective",[3269,144309],{"style":127773,"src":144310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,144312,144313],{},"透视写在父盒子上，单位为像素",[387,144315,144317],{"id":144316},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[23756,144319,144321],{"id":144320},"_18341-分开解释","18.3.4.1 分开解释",[3269,144323],{"style":127773,"src":144324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[3269,144326],{"style":127773,"src":144327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[3269,144329],{"style":127773,"src":144330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,144332,144333],{},"总结来说就是左手原则",[23756,144335,144337],{"id":144336},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[3269,144339],{"style":127773,"src":144340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[387,144342,144344],{"id":144343},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[3269,144346],{"style":127773,"src":144347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[3269,144349],{"style":127773,"src":144350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[154,144352,144354],{"className":127917,"code":144353,"language":127919,"meta":160,"style":160},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[70,144355,144356,144362,144375,144392],{"__ignoreMap":160},[178,144357,144358,144360],{"class":180,"line":181},[178,144359,53341],{"class":323},[178,144361,17330],{"class":319},[178,144363,144364,144367,144369,144371,144373],{"class":180,"line":263},[178,144365,144366],{"class":195},"  perspective",[178,144368,53167],{"class":319},[178,144370,66794],{"class":195},[178,144372,53222],{"class":699},[178,144374,3100],{"class":319},[178,144376,144377,144379,144381,144384,144386,144388,144390],{"class":180,"line":274},[178,144378,137901],{"class":195},[178,144380,53167],{"class":319},[178,144382,144383],{"class":195},"rotateX",[178,144385,944],{"class":319},[178,144387,2469],{"class":195},[178,144389,143744],{"class":699},[178,144391,4495],{"class":319},[178,144393,144394],{"class":180,"line":354},[178,144395,3371],{"class":319},[387,144397,144399],{"id":144398},"_1836-案例","18.3.6 案例",[23756,144401,144403],{"id":144402},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[3269,144405],{"style":127773,"src":144406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[3269,144408],{"style":127773,"src":144409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[3269,144411],{"style":127773,"src":144412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[154,144414,144416],{"className":127917,"code":144415,"language":127919,"meta":160,"style":160},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[70,144417,144418,144423,144429,144441],{"__ignoreMap":160},[178,144419,144420],{"class":180,"line":181},[178,144421,144422],{"class":2008},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[178,144424,144425,144427],{"class":180,"line":263},[178,144426,134914],{"class":184},[178,144428,17330],{"class":319},[178,144430,144431,144433,144435,144437,144439],{"class":180,"line":274},[178,144432,144366],{"class":195},[178,144434,53167],{"class":319},[178,144436,66794],{"class":195},[178,144438,53222],{"class":699},[178,144440,3100],{"class":319},[178,144442,144443],{"class":180,"line":354},[178,144444,3371],{"class":319},[23756,144446,144448],{"id":144447},"_18362-3d导航栏","18.3.6.2 3D导航栏",[3269,144450],{"style":127773,"src":144451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[154,144453,144454],{"className":128664,"code":132021,"language":128666,"meta":160,"style":160},[70,144455,144456,144460,144474,144478],{"__ignoreMap":160},[178,144457,144458],{"class":180,"line":181},[178,144459,132028],{"class":2008},[178,144461,144462,144464,144466,144468,144470,144472],{"class":180,"line":263},[178,144463,320],{"class":319},[178,144465,53341],{"class":323},[178,144467,55210],{"class":184},[178,144469,330],{"class":319},[178,144471,132041],{"class":188},[178,144473,336],{"class":319},[178,144475,144476],{"class":180,"line":274},[178,144477,132048],{"class":319},[178,144479,144480,144482,144484],{"class":180,"line":354},[178,144481,367],{"class":319},[178,144483,53341],{"class":323},[178,144485,336],{"class":319},[23756,144487,144489],{"id":144488},"_18363-旋转木马","18.3.6.3 旋转木马",[3269,144491],{"style":127773,"src":144492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[154,144494,144495],{"className":127917,"code":143720,"language":127919,"meta":160,"style":160},[70,144496,144497,144503,144519],{"__ignoreMap":160},[178,144498,144499,144501],{"class":180,"line":181},[178,144500,53341],{"class":323},[178,144502,17330],{"class":319},[178,144504,144505,144507,144509,144511,144513,144515,144517],{"class":180,"line":263},[178,144506,137901],{"class":195},[178,144508,53167],{"class":319},[178,144510,143737],{"class":195},[178,144512,944],{"class":319},[178,144514,2469],{"class":195},[178,144516,143744],{"class":699},[178,144518,4495],{"class":319},[178,144520,144521],{"class":180,"line":274},[178,144522,3371],{"class":319},[1853,144524,144525],{},"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":160,"searchDepth":263,"depth":263,"links":144527},[144528,144535],{"id":143623,"depth":263,"text":143624,"children":144529},[144530,144531,144532,144533,144534],{"id":143647,"depth":274,"text":143648},{"id":143702,"depth":274,"text":143703},{"id":143827,"depth":274,"text":143828},{"id":143930,"depth":274,"text":143931},{"id":144248,"depth":274,"text":144249},{"id":144276,"depth":263,"text":144277,"children":144536},[144537,144538,144539,144540,144541,144542],{"id":144283,"depth":274,"text":144284},{"id":144290,"depth":274,"text":144291},{"id":144306,"depth":274,"text":144307},{"id":144316,"depth":274,"text":144317},{"id":144343,"depth":274,"text":144344},{"id":144398,"depth":274,"text":144399},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143615,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144549,"title":144550,"body":144551,"description":25135,"extension":1880,"meta":144754,"navigation":721,"path":144755,"seo":144756,"stem":144757,"__hash__":144758},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144552,"toc":144743},[144553,144556,144560,144563,144566,144570,144573,144576,144579,144583,144586,144590,144593,144597,144600,144604,144618,144622,144647,144650,144653,144670,144674,144678,144681,144684,144688,144691,144694,144712,144716,144719,144733,144737,144740],[10,144554,144550],{"id":144555},"_19-移动端基础-前缀现状与视口",[14,144557,144559],{"id":144558},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[3269,144561],{"style":127773,"src":144562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,144564,144565],{},"意思就是加个前缀，增加兼容性",[14,144567,144569],{"id":144568},"_192-移动端现状认识","19.2 移动端现状认识",[3269,144571],{"style":127773,"src":144572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,144574,144575],{},"调试方法：",[3269,144577],{"style":127773,"src":144578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144580,144582],{"id":144581},"_193-视口","19.3 视口",[19,144584,144585],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[387,144587,144589],{"id":144588},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[3269,144591],{"style":127773,"src":144592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[387,144594,144596],{"id":144595},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[3269,144598],{"style":127773,"src":144599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[387,144601,144603],{"id":144602},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[2946,144605,144606,144609,144612,144615],{},[29,144607,144608],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[29,144610,144611],{},"理想视口，对设备来讲，是最理想的视口尺寸",[29,144613,144614],{},"需要手动添写meta视口标签通知浏览器操作",[29,144616,144617],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[387,144619,144621],{"id":144620},"_1934-meta视口标签","19.3.4 meta视口标签",[154,144623,144625],{"className":128664,"code":144624,"language":128666,"meta":160,"style":160},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[70,144626,144627],{"__ignoreMap":160},[178,144628,144629,144631,144633,144635,144637,144639,144641,144643,144645],{"class":180,"line":181},[178,144630,320],{"class":319},[178,144632,53074],{"class":323},[178,144634,426],{"class":184},[178,144636,330],{"class":319},[178,144638,53121],{"class":188},[178,144640,53101],{"class":184},[178,144642,330],{"class":319},[178,144644,53128],{"class":188},[178,144646,336],{"class":319},[3269,144648],{"style":127773,"src":144649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,144651,144652],{},"标准视口设置：",[26,144654,144655,144658,144661,144664,144667],{},[29,144656,144657],{},"视口宽度和设备保持一致",[29,144659,144660],{},"视口的默认缩放比例1.0",[29,144662,144663],{},"不允许用户自行缩放",[29,144665,144666],{},"最大允许的缩放比例1.0",[29,144668,144669],{},"最小允许的缩放比例1.0",[387,144671,144673],{"id":144672},"_1935-二倍图","19.3.5 二倍图",[23756,144675,144677],{"id":144676},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[3269,144679],{"style":127773,"src":144680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[3269,144682],{"style":127773,"src":144683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[23756,144685,144687],{"id":144686},"_19352-多倍图","19.3.5.2 多倍图",[3269,144689],{"style":127773,"src":144690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,144692,144693],{},"二倍图法，代码如下：",[154,144695,144697],{"className":127917,"code":144696,"language":127919,"meta":160,"style":160},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[70,144698,144699,144704],{"__ignoreMap":160},[178,144700,144701],{"class":180,"line":181},[178,144702,144703],{"class":2008},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[178,144705,144706,144709],{"class":180,"line":263},[178,144707,144708],{"class":323},"background-size",[178,144710,144711],{"class":319},": 50% 50%;\n",[23756,144713,144715],{"id":144714},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[3269,144717],{"style":127773,"src":144718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[26,144720,144721,144724,144727,144730],{},[29,144722,144723],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[29,144725,144726],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[29,144728,144729],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[29,144731,144732],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[23756,144734,144736],{"id":144735},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[3269,144738],{"style":127773,"src":144739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[1853,144741,144742],{},"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":160,"searchDepth":263,"depth":263,"links":144744},[144745,144746,144747],{"id":144558,"depth":263,"text":144559},{"id":144568,"depth":263,"text":144569},{"id":144581,"depth":263,"text":144582,"children":144748},[144749,144750,144751,144752,144753],{"id":144588,"depth":274,"text":144589},{"id":144595,"depth":274,"text":144596},{"id":144602,"depth":274,"text":144603},{"id":144620,"depth":274,"text":144621},{"id":144672,"depth":274,"text":144673},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144550,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":144760,"title":144761,"body":144762,"description":25135,"extension":1880,"meta":145639,"navigation":721,"path":145640,"seo":145641,"stem":145642,"__hash__":145643},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":144763,"toc":145623},[144764,144767,144771,144778,144781,144788,144791,144796,144799,144803,144807,144814,144817,144820,144824,144827,144830,144833,144836,144839,144843,144846,144850,144852,144855,144858,144861,144864,144866,144869,144871,144901,144903,144933,144937,144940,144944,144947,144964,144967,144970,145046,145048,145051,145054,145057,145060,145062,145065,145068,145072,145094,145097,145100,145104,145107,145113,145116,145120,145123,145126,145130,145133,145136,145139,145143,145146,145149,145152,145155,145159,145162,145166,145173,145176,145179,145182,145185,145195,145198,145201,145208,145211,145215,145218,145221,145225,145228,145231,145234,145279,145282,145285,145288,145290,145419,145421,145459,145462,145465,145467,145585,145587,145621],[10,144765,144761],{"id":144766},"_20-移动端布局实战上篇",[14,144768,144770],{"id":144769},"_201-移动端主流方案","20.1 移动端主流方案",[26,144772,144773],{},[29,144774,144775],{},[2093,144776,144777],{},"单独移动端页面（主流）",[3269,144779],{"style":127773,"src":144780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[26,144782,144783],{"start":263},[29,144784,144785],{},[2093,144786,144787],{},"响应式兼容PC移动端",[3269,144789],{"style":127773,"src":144790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[26,144792,144793],{"start":274},[29,144794,144795],{},"两种页面选型布局方式",[3269,144797],{"style":127773,"src":144798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,144800,144802],{"id":144801},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[387,144804,144806],{"id":144805},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,144808,144809,144810],{},"官网地址： ",[2178,144811,144812],{"href":144812,"rel":144813},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[25619],[3269,144815],{"style":127773,"src":144816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[3269,144818],{"style":127773,"src":144819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[387,144821,144823],{"id":144822},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[3269,144825],{"style":127773,"src":144826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[3269,144828],{"style":127773,"src":144829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,144831,144832],{},"去除高亮：",[19,144834,144835],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,144837,144838],{},"-webkit- tap-highlight-color: transparent;",[14,144840,144842],{"id":144841},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[3269,144844],{"style":127773,"src":144845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,144847,144849],{"id":144848},"_204-流式布局案例","20.4 流式布局案例",[19,144851,1981],{},[19,144853,144854],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,144856,144857],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,144859,144860],{},"图片格式：",[3269,144862],{"style":127773,"src":144863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,144865,136960],{},[3269,144867],{"style":127773,"src":144868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,144870,141287],{},[154,144872,144873],{"className":128664,"code":135419,"language":128666,"meta":160,"style":160},[70,144874,144875],{"__ignoreMap":160},[178,144876,144877,144879,144881,144883,144885,144887,144889,144891,144893,144895,144897,144899],{"class":180,"line":181},[178,144878,320],{"class":319},[178,144880,3269],{"class":323},[178,144882,56960],{"class":184},[178,144884,330],{"class":319},[178,144886,135434],{"class":188},[178,144888,56968],{"class":184},[178,144890,330],{"class":319},[178,144892,135441],{"class":188},[178,144894,135444],{"class":184},[178,144896,330],{"class":319},[178,144898,135449],{"class":188},[178,144900,336],{"class":319},[19,144902,141376],{},[154,144904,144905],{"className":128664,"code":135419,"language":128666,"meta":160,"style":160},[70,144906,144907],{"__ignoreMap":160},[178,144908,144909,144911,144913,144915,144917,144919,144921,144923,144925,144927,144929,144931],{"class":180,"line":181},[178,144910,320],{"class":319},[178,144912,3269],{"class":323},[178,144914,56960],{"class":184},[178,144916,330],{"class":319},[178,144918,135434],{"class":188},[178,144920,56968],{"class":184},[178,144922,330],{"class":319},[178,144924,135441],{"class":188},[178,144926,135444],{"class":184},[178,144928,330],{"class":319},[178,144930,135449],{"class":188},[178,144932,336],{"class":319},[14,144934,144936],{"id":144935},"_205-flex布局","20.5 flex布局",[3269,144938],{"style":127773,"src":144939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[387,144941,144943],{"id":144942},"_2051-布局原理","20.5.1 布局原理",[19,144945,144946],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[2946,144948,144949,144952,144955,144958,144961],{},[29,144950,144951],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[29,144953,144954],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[29,144956,144957],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[29,144959,144960],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[29,144962,144963],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,144965,144966],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,144968,144969],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[154,144971,144973],{"className":127917,"code":144972,"language":127919,"meta":160,"style":160},"\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",[70,144974,144975,144980,144987,144997,145009,145020,145031,145042],{"__ignoreMap":160},[178,144976,144977],{"class":180,"line":181},[178,144978,144979],{"class":2008},"\u002F* Flex 弹性布局 *\u002F\n",[178,144981,144982,144985],{"class":180,"line":263},[178,144983,144984],{"class":184},".container",[178,144986,17330],{"class":319},[178,144988,144989,144991,144993,144995],{"class":180,"line":274},[178,144990,129533],{"class":195},[178,144992,53167],{"class":319},[178,144994,53207],{"class":195},[178,144996,3100],{"class":319},[178,144998,144999,145002,145004,145007],{"class":180,"line":354},[178,145000,145001],{"class":195},"  flex-direction",[178,145003,53167],{"class":319},[178,145005,145006],{"class":195},"row",[178,145008,3100],{"class":319},[178,145010,145011,145014,145016,145018],{"class":180,"line":364},[178,145012,145013],{"class":195},"  justify-content",[178,145015,53167],{"class":319},[178,145017,53398],{"class":195},[178,145019,3100],{"class":319},[178,145021,145022,145025,145027,145029],{"class":180,"line":740},[178,145023,145024],{"class":195},"  align-items",[178,145026,53167],{"class":319},[178,145028,53322],{"class":195},[178,145030,3100],{"class":319},[178,145032,145033,145036,145038,145040],{"class":180,"line":746},[178,145034,145035],{"class":195},"  flex-wrap",[178,145037,53167],{"class":319},[178,145039,80330],{"class":195},[178,145041,3100],{"class":319},[178,145043,145044],{"class":180,"line":752},[178,145045,3371],{"class":319},[19,145047,72173],{},[19,145049,145050],{},".form-item .male-label {",[19,145052,145053],{},"   margin-right: 20px;",[19,145055,145056],{},"   display: inline-flex;",[19,145058,145059],{},"   align-items: center;",[19,145061,2885],{},[3269,145063],{"style":127773,"src":145064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[3269,145066],{"style":127773,"src":145067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[387,145069,145071],{"id":145070},"_2052-常见父项属性","20.5.2 常见父项属性",[26,145073,145074,145077,145080,145083,145086,145089,145092],{},[29,145075,145076],{},"flex-direction：设置主轴的方向",[29,145078,145079],{},"justify-content：设置主轴上的子元素排列方式",[29,145081,145082],{},"flex-wrap：设置子元素是否换行",[29,145084,145085],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[29,145087,145088],{},"align-items：设置侧轴上的子元素排列方式（单行）",[29,145090,145091],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[29,145093,145076],{},[3269,145095],{"style":127773,"src":145096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[3269,145098],{"style":127773,"src":145099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[26,145101,145102],{"start":263},[29,145103,145079],{},[3269,145105],{"style":127773,"src":145106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,145108,145109,145112],{},[70,145110,145111],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,145114,145115],{},"跟着主轴走",[26,145117,145118],{"start":274},[29,145119,145082],{},[3269,145121],{"style":127773,"src":145122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,145124,145125],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[26,145127,145128],{"start":354},[29,145129,145085],{},[3269,145131],{"style":127773,"src":145132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,145134,145135],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,145137,145138],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[26,145140,145141],{"start":364},[29,145142,145088],{},[3269,145144],{"style":127773,"src":145145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,145147,145148],{},"align-items与align-content之间的区别：",[19,145150,145151],{},"单找items，多找content",[3269,145153],{"style":127773,"src":145154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[26,145156,145157],{"start":740},[29,145158,145091],{},[3269,145160],{"style":127773,"src":145161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[387,145163,145165],{"id":145164},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[26,145167,145168],{},[29,145169,145170],{},[2093,145171,145172],{},"flex 属性",[19,145174,145175],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[3269,145177],{"style":127773,"src":145178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,145180,145181],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,145183,145184],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[26,145186,145187],{"start":263},[29,145188,145189,15555,145192],{},[2093,145190,145191],{},"align-self",[2093,145193,145194],{},"控制子项自己在侧轴上的排列方式",[3269,145196],{"style":127773,"src":145197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,145199,145200],{},"单个子盒子在父盒子侧轴上的排列方式",[26,145202,145203],{"start":274},[29,145204,145205,145207],{},[2093,145206,97012],{}," 属性定义项目的排列顺序",[3269,145209],{"style":127773,"src":145210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[387,145212,145214],{"id":145213},"_2054-背景线性渐变","20.5.4 背景线性渐变",[3269,145216],{"style":127773,"src":145217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,145219,145220],{},"必须要添加浏览器的私有前缀",[387,145222,145224],{"id":145223},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,145226,145227],{},"学到最重要的知识：",[19,145229,145230],{},"flex处理这样的布局思路",[3269,145232],{"style":127773,"src":145233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[154,145235,145237],{"className":127917,"code":145236,"language":127919,"meta":160,"style":160},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[70,145238,145239,145245,145255,145265,145275],{"__ignoreMap":160},[178,145240,145241,145243],{"class":180,"line":181},[178,145242,144984],{"class":184},[178,145244,17330],{"class":319},[178,145246,145247,145249,145251,145253],{"class":180,"line":263},[178,145248,129533],{"class":195},[178,145250,53167],{"class":319},[178,145252,53207],{"class":195},[178,145254,3100],{"class":319},[178,145256,145257,145259,145261,145263],{"class":180,"line":274},[178,145258,145013],{"class":195},[178,145260,53167],{"class":319},[178,145262,53322],{"class":195},[178,145264,3100],{"class":319},[178,145266,145267,145269,145271,145273],{"class":180,"line":354},[178,145268,145024],{"class":195},[178,145270,53167],{"class":319},[178,145272,53322],{"class":195},[178,145274,3100],{"class":319},[178,145276,145277],{"class":180,"line":364},[178,145278,3371],{"class":319},[19,145280,145281],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,145283,145284],{},"使用属性选择器",[3269,145286],{"style":127773,"src":145287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,145289,70609],{},[154,145291,145293],{"className":128664,"code":145292,"language":128666,"meta":160,"style":160},"\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",[70,145294,145295,145300,145314,145319,145339,145344,145363,145368,145387,145392,145411],{"__ignoreMap":160},[178,145296,145297],{"class":180,"line":181},[178,145298,145299],{"class":2008},"\u003C!-- 携程网移动端案例结构 -->\n",[178,145301,145302,145304,145306,145308,145310,145312],{"class":180,"line":263},[178,145303,320],{"class":319},[178,145305,53341],{"class":323},[178,145307,55210],{"class":184},[178,145309,330],{"class":319},[178,145311,94038],{"class":188},[178,145313,336],{"class":319},[178,145315,145316],{"class":180,"line":274},[178,145317,145318],{"class":2008},"  \u003C!-- 搜索栏 -->\n",[178,145320,145321,145323,145325,145327,145329,145332,145335,145337],{"class":180,"line":354},[178,145322,341],{"class":319},[178,145324,53341],{"class":323},[178,145326,55210],{"class":184},[178,145328,330],{"class":319},[178,145330,145331],{"class":188},"\"search-index\"",[178,145333,145334],{"class":319},">...\u003C\u002F",[178,145336,53341],{"class":323},[178,145338,336],{"class":319},[178,145340,145341],{"class":180,"line":364},[178,145342,145343],{"class":2008},"  \u003C!-- 焦点图 -->\n",[178,145345,145346,145348,145350,145352,145354,145357,145359,145361],{"class":180,"line":740},[178,145347,341],{"class":319},[178,145349,53341],{"class":323},[178,145351,55210],{"class":184},[178,145353,330],{"class":319},[178,145355,145356],{"class":188},"\"focus\"",[178,145358,145334],{"class":319},[178,145360,53341],{"class":323},[178,145362,336],{"class":319},[178,145364,145365],{"class":180,"line":746},[178,145366,145367],{"class":2008},"  \u003C!-- 主导航 -->\n",[178,145369,145370,145372,145374,145376,145378,145381,145383,145385],{"class":180,"line":752},[178,145371,341],{"class":319},[178,145373,53341],{"class":323},[178,145375,55210],{"class":184},[178,145377,330],{"class":319},[178,145379,145380],{"class":188},"\"local-nav\"",[178,145382,145334],{"class":319},[178,145384,53341],{"class":323},[178,145386,336],{"class":319},[178,145388,145389],{"class":180,"line":757},[178,145390,145391],{"class":2008},"  \u003C!-- 子导航 -->\n",[178,145393,145394,145396,145398,145400,145402,145405,145407,145409],{"class":180,"line":763},[178,145395,341],{"class":319},[178,145397,53341],{"class":323},[178,145399,55210],{"class":184},[178,145401,330],{"class":319},[178,145403,145404],{"class":188},"\"nav-common\"",[178,145406,145334],{"class":319},[178,145408,53341],{"class":323},[178,145410,336],{"class":319},[178,145412,145413,145415,145417],{"class":180,"line":769},[178,145414,367],{"class":319},[178,145416,53341],{"class":323},[178,145418,336],{"class":319},[19,145420,72173],{},[154,145422,145423],{"className":127917,"code":138369,"language":127919,"meta":160,"style":160},[70,145424,145425,145439,145455],{"__ignoreMap":160},[178,145426,145427,145429,145431,145433,145435,145437],{"class":180,"line":181},[178,145428,55543],{"class":323},[178,145430,2830],{"class":319},[178,145432,550],{"class":184},[178,145434,330],{"class":699},[178,145436,64419],{"class":188},[178,145438,138386],{"class":319},[178,145440,145441,145443,145445,145447,145449,145451,145453],{"class":180,"line":263},[178,145442,72616],{"class":195},[178,145444,53167],{"class":319},[178,145446,1665],{"class":195},[178,145448,53222],{"class":699},[178,145450,53251],{"class":195},[178,145452,131497],{"class":195},[178,145454,3100],{"class":319},[178,145456,145457],{"class":180,"line":274},[178,145458,3371],{"class":319},[19,145460,145461],{},"总代码和效果展示：",[3269,145463],{"style":127773,"src":145464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,145466,70609],{},[154,145468,145469],{"className":128664,"code":145292,"language":128666,"meta":160,"style":160},[70,145470,145471,145475,145489,145493,145511,145515,145533,145537,145555,145559,145577],{"__ignoreMap":160},[178,145472,145473],{"class":180,"line":181},[178,145474,145299],{"class":2008},[178,145476,145477,145479,145481,145483,145485,145487],{"class":180,"line":263},[178,145478,320],{"class":319},[178,145480,53341],{"class":323},[178,145482,55210],{"class":184},[178,145484,330],{"class":319},[178,145486,94038],{"class":188},[178,145488,336],{"class":319},[178,145490,145491],{"class":180,"line":274},[178,145492,145318],{"class":2008},[178,145494,145495,145497,145499,145501,145503,145505,145507,145509],{"class":180,"line":354},[178,145496,341],{"class":319},[178,145498,53341],{"class":323},[178,145500,55210],{"class":184},[178,145502,330],{"class":319},[178,145504,145331],{"class":188},[178,145506,145334],{"class":319},[178,145508,53341],{"class":323},[178,145510,336],{"class":319},[178,145512,145513],{"class":180,"line":364},[178,145514,145343],{"class":2008},[178,145516,145517,145519,145521,145523,145525,145527,145529,145531],{"class":180,"line":740},[178,145518,341],{"class":319},[178,145520,53341],{"class":323},[178,145522,55210],{"class":184},[178,145524,330],{"class":319},[178,145526,145356],{"class":188},[178,145528,145334],{"class":319},[178,145530,53341],{"class":323},[178,145532,336],{"class":319},[178,145534,145535],{"class":180,"line":746},[178,145536,145367],{"class":2008},[178,145538,145539,145541,145543,145545,145547,145549,145551,145553],{"class":180,"line":752},[178,145540,341],{"class":319},[178,145542,53341],{"class":323},[178,145544,55210],{"class":184},[178,145546,330],{"class":319},[178,145548,145380],{"class":188},[178,145550,145334],{"class":319},[178,145552,53341],{"class":323},[178,145554,336],{"class":319},[178,145556,145557],{"class":180,"line":757},[178,145558,145391],{"class":2008},[178,145560,145561,145563,145565,145567,145569,145571,145573,145575],{"class":180,"line":763},[178,145562,341],{"class":319},[178,145564,53341],{"class":323},[178,145566,55210],{"class":184},[178,145568,330],{"class":319},[178,145570,145404],{"class":188},[178,145572,145334],{"class":319},[178,145574,53341],{"class":323},[178,145576,336],{"class":319},[178,145578,145579,145581,145583],{"class":180,"line":769},[178,145580,367],{"class":319},[178,145582,53341],{"class":323},[178,145584,336],{"class":319},[19,145586,72173],{},[154,145588,145589],{"className":128664,"code":132021,"language":128666,"meta":160,"style":160},[70,145590,145591,145595,145609,145613],{"__ignoreMap":160},[178,145592,145593],{"class":180,"line":181},[178,145594,132028],{"class":2008},[178,145596,145597,145599,145601,145603,145605,145607],{"class":180,"line":263},[178,145598,320],{"class":319},[178,145600,53341],{"class":323},[178,145602,55210],{"class":184},[178,145604,330],{"class":319},[178,145606,132041],{"class":188},[178,145608,336],{"class":319},[178,145610,145611],{"class":180,"line":274},[178,145612,132048],{"class":319},[178,145614,145615,145617,145619],{"class":180,"line":354},[178,145616,367],{"class":319},[178,145618,53341],{"class":323},[178,145620,336],{"class":319},[1853,145622,139318],{},{"title":160,"searchDepth":263,"depth":263,"links":145624},[145625,145626,145630,145631,145632],{"id":144769,"depth":263,"text":144770},{"id":144801,"depth":263,"text":144802,"children":145627},[145628,145629],{"id":144805,"depth":274,"text":144806},{"id":144822,"depth":274,"text":144823},{"id":144841,"depth":263,"text":144842},{"id":144848,"depth":263,"text":144849},{"id":144935,"depth":263,"text":144936,"children":145633},[145634,145635,145636,145637,145638],{"id":144942,"depth":274,"text":144943},{"id":145070,"depth":274,"text":145071},{"id":145164,"depth":274,"text":145165},{"id":145213,"depth":274,"text":145214},{"id":145223,"depth":274,"text":145224},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":144761,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145645,"title":145646,"body":145647,"description":25135,"extension":1880,"meta":146874,"navigation":721,"path":146875,"seo":146876,"stem":146877,"__hash__":146878},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145648,"toc":146852},[145649,145652,145656,145660,145663,145666,145670,145675,145678,145681,145684,145687,145690,145747,145750,145755,145758,145761,145765,145776,145780,145783,145786,145793,145798,145802,145805,145811,145814,145818,145821,145828,145831,145834,145841,145844,145851,145854,145857,145864,145867,145870,145872,145889,145893,145896,145899,145902,145906,145909,145912,145915,145918,145921,145924,145926,145929,145932,145994,145997,146107,146114,146120,146123,146126,146130,146133,146137,146142,146145,146152,146155,146161,146166,146169,146172,146175,146178,146181,146184,146187,146190,146246,146248,146274,146278,146281,146284,146287,146295,146298,146301,146305,146361,146364,146368,146374,146385,146388,146393,146396,146399,146405,146408,146411,146414,146417,146420,146423,146426,146429,146454,146460,146463,146466,146469,146472,146475,146478,146483,146486,146489,146492,146500,146503,146510,146513,146516,146518,146542,146544,146547,146550,146553,146556,146559,146562,146565,146599,146602,146605,146639,146646,146649,146652,146655,146658,146661,146664,146671,146674,146677,146680,146683,146690,146693,146696,146703,146706,146709,146713,146716,146719,146722,146725,146728,146731,146734,146737,146739,146763,146765,146789,146793,146804,146807,146810,146813,146816,146819,146822,146825,146828,146831,146834,146837,146840,146843,146846,146849],[10,145650,145646],{"id":145651},"_21-移动端布局实战下篇",[14,145653,145655],{"id":145654},"_211-rem适配布局","21.1 rem适配布局",[387,145657,145659],{"id":145658},"_2111-rem单位","21.1.1 rem单位",[3269,145661],{"style":127773,"src":145662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,145664,145665],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[387,145667,145669],{"id":145668},"_2112-媒体查询","21.1.2 媒体查询",[26,145671,145672],{},[29,145673,145674],{},"参数介绍",[3269,145676],{"style":127773,"src":145677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[3269,145679],{"style":127773,"src":145680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[3269,145682],{"style":127773,"src":145683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[3269,145685],{"style":127773,"src":145686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[3269,145688],{"style":127773,"src":145689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[154,145691,145693],{"className":127917,"code":145692,"language":127919,"meta":160,"style":160},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[70,145694,145695,145700,145719,145726,145739,145743],{"__ignoreMap":160},[178,145696,145697],{"class":180,"line":181},[178,145698,145699],{"class":2008},"\u002F* 媒体查询 *\u002F\n",[178,145701,145702,145705,145707,145710,145712,145715,145717],{"class":180,"line":263},[178,145703,145704],{"class":699},"@media",[178,145706,3457],{"class":319},[178,145708,145709],{"class":195},"max-width",[178,145711,53167],{"class":319},[178,145713,145714],{"class":195},"768",[178,145716,53222],{"class":699},[178,145718,14203],{"class":319},[178,145720,145721,145724],{"class":180,"line":274},[178,145722,145723],{"class":184},"  .container",[178,145725,17330],{"class":319},[178,145727,145728,145731,145733,145735,145737],{"class":180,"line":354},[178,145729,145730],{"class":195},"    width",[178,145732,53167],{"class":319},[178,145734,2251],{"class":195},[178,145736,2268],{"class":699},[178,145738,3100],{"class":319},[178,145740,145741],{"class":180,"line":364},[178,145742,128713],{"class":319},[178,145744,145745],{"class":180,"line":740},[178,145746,3371],{"class":319},[19,145748,145749],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[26,145751,145752],{"start":263},[29,145753,145754],{},"引入资源",[3269,145756],{"style":127773,"src":145757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,145759,145760],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[387,145762,145764],{"id":145763},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[2946,145766,145767,145770,145773],{},[29,145768,145769],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[29,145771,145772],{},"媒体查询可以根据不同设备宽度来修改样式",[29,145774,145775],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,145777,145779],{"id":145778},"_212-less基础","21.2 Less基础",[19,145781,145782],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,145784,145785],{},"Less可以解决该问题，它是css的扩展语言",[19,145787,145788,145789],{},"Less中文网址： ",[2178,145790,145791],{"href":145791,"rel":145792},"http:\u002F\u002Flesscss.cn\u002F",[25619],[19,145794,145795],{},[2093,145796,145797],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[387,145799,145801],{"id":145800},"_2121-less安装","21.2.1 less安装",[19,145803,145804],{},"如果使用vscode，则无需进行下方安装步骤",[19,145806,145807],{},[2178,145808,145809],{"href":145809,"rel":145810},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[25619],[3269,145812],{"style":127773,"src":145813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[387,145815,145817],{"id":145816},"_2122-less使用","21.2.2 less使用",[19,145819,145820],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[26,145822,145823],{},[29,145824,145825],{},[2093,145826,145827],{},"Less 变量",[3269,145829],{"style":127773,"src":145830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[3269,145832],{"style":127773,"src":145833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[26,145835,145836],{"start":263},[29,145837,145838],{},[2093,145839,145840],{},"Less 编译",[3269,145842],{"style":127773,"src":145843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[26,145845,145846],{"start":274},[29,145847,145848],{},[2093,145849,145850],{},"Less 嵌套",[3269,145852],{"style":127773,"src":145853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[3269,145855],{"style":127773,"src":145856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[26,145858,145859],{"start":354},[29,145860,145861],{},[2093,145862,145863],{},"Less 运算",[3269,145865],{"style":127773,"src":145866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,145868,145869],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,145871,1981],{},[2946,145873,145874,145877,145880,145883,145886],{},[29,145875,145876],{},"乘号（*）和除号（\u002F）的写法",[29,145878,145879],{},"运算符中间左右有个空格隔开 1px + 5",[29,145881,145882],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[29,145884,145885],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[29,145887,145888],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,145890,145892],{"id":145891},"_213-rem-适配方案","21.3 rem 适配方案",[19,145894,145895],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,145897,145898],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[3269,145900],{"style":127773,"src":145901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[387,145903,145905],{"id":145904},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,145907,145908],{},"rem + 媒体查询 + less 技术",[3269,145910],{"style":127773,"src":145911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,145913,145914],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,145916,145917],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[3269,145919],{"style":127773,"src":145920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,145922,145923],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,145925,528],{},[3269,145927],{"style":127773,"src":145928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,145930,145931],{},"index.html:",[154,145933,145935],{"className":127917,"code":145934,"language":127919,"meta":160,"style":160},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[70,145936,145937,145942,145948,145964,145968,145974,145990],{"__ignoreMap":160},[178,145938,145939],{"class":180,"line":181},[178,145940,145941],{"class":2008},"\u002F* rem 适配方案 *\u002F\n",[178,145943,145944,145946],{"class":180,"line":263},[178,145945,52367],{"class":323},[178,145947,17330],{"class":319},[178,145949,145950,145952,145954,145957,145959,145961],{"class":180,"line":274},[178,145951,72346],{"class":195},[178,145953,53167],{"class":319},[178,145955,145956],{"class":195},"62.5",[178,145958,2268],{"class":699},[178,145960,131780],{"class":319},[178,145962,145963],{"class":2008},"\u002F* 1rem = 10px *\u002F\n",[178,145965,145966],{"class":180,"line":354},[178,145967,3371],{"class":319},[178,145969,145970,145972],{"class":180,"line":364},[178,145971,131765],{"class":184},[178,145973,17330],{"class":319},[178,145975,145976,145978,145980,145982,145985,145987],{"class":180,"line":740},[178,145977,72288],{"class":195},[178,145979,53167],{"class":319},[178,145981,2386],{"class":195},[178,145983,145984],{"class":699},"rem",[178,145986,131780],{"class":319},[178,145988,145989],{"class":2008},"\u002F* 100px *\u002F\n",[178,145991,145992],{"class":180,"line":746},[178,145993,3371],{"class":319},[19,145995,145996],{},"common.less",[154,145998,146000],{"className":127917,"code":145999,"language":127919,"meta":160,"style":160},"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",[70,146001,146002,146008,146023,146027,146033,146047,146051,146055,146059,146065,146079,146083,146089,146103],{"__ignoreMap":160},[178,146003,146004,146006],{"class":180,"line":181},[178,146005,52367],{"class":323},[178,146007,17330],{"class":319},[178,146009,146010,146012,146014,146016,146018,146020],{"class":180,"line":263},[178,146011,72346],{"class":195},[178,146013,53167],{"class":319},[178,146015,145956],{"class":195},[178,146017,2268],{"class":699},[178,146019,27818],{"class":319},[178,146021,146022],{"class":2008},"\u002F* 10px *\u002F\n",[178,146024,146025],{"class":180,"line":274},[178,146026,3371],{"class":319},[178,146028,146029,146031],{"class":180,"line":354},[178,146030,53341],{"class":323},[178,146032,17330],{"class":319},[178,146034,146035,146037,146039,146041,146043,146045],{"class":180,"line":364},[178,146036,72288],{"class":195},[178,146038,53167],{"class":319},[178,146040,2386],{"class":195},[178,146042,145984],{"class":699},[178,146044,27818],{"class":319},[178,146046,145989],{"class":2008},[178,146048,146049],{"class":180,"line":740},[178,146050,3371],{"class":319},[178,146052,146053],{"class":180,"line":746},[178,146054,137378],{"class":319},[178,146056,146057],{"class":180,"line":752},[178,146058,145941],{"class":2008},[178,146060,146061,146063],{"class":180,"line":757},[178,146062,52367],{"class":323},[178,146064,17330],{"class":319},[178,146066,146067,146069,146071,146073,146075,146077],{"class":180,"line":763},[178,146068,72346],{"class":195},[178,146070,53167],{"class":319},[178,146072,145956],{"class":195},[178,146074,2268],{"class":699},[178,146076,131780],{"class":319},[178,146078,145963],{"class":2008},[178,146080,146081],{"class":180,"line":769},[178,146082,3371],{"class":319},[178,146084,146085,146087],{"class":180,"line":774},[178,146086,131765],{"class":184},[178,146088,17330],{"class":319},[178,146090,146091,146093,146095,146097,146099,146101],{"class":180,"line":780},[178,146092,72288],{"class":195},[178,146094,53167],{"class":319},[178,146096,2386],{"class":195},[178,146098,145984],{"class":699},[178,146100,131780],{"class":319},[178,146102,145989],{"class":2008},[178,146104,146105],{"class":180,"line":786},[178,146106,3371],{"class":319},[19,146108,146109,146110,146113],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25312,146111,146112],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[154,146115,146118],{"className":146116,"code":146117,"language":159},[157],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[70,146119,146117],{"__ignoreMap":160},[19,146121,146122],{},"less保存时会自动变成.css文件",[19,146124,146125],{},"好好搞懂上述代码写法",[387,146127,146129],{"id":146128},"_2132-样式导入样式","21.3.2 样式导入样式",[3269,146131],{"style":127773,"src":146132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[387,146134,146136],{"id":146135},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[26,146138,146139],{},[29,146140,146141],{},"准备工作",[3269,146143],{"style":127773,"src":146144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,146146,146147,146148],{},"github地址：",[2178,146149,146150],{"href":146150,"rel":146151},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[25619],[19,146153,146154],{},"下载之后，将index.js文件拖到项目中就可以了",[19,146156,146157,146158],{},"js文件引入到index.html中使用的是",[70,146159,146160],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[26,146162,146163],{"start":263},[29,146164,146165],{},"vscode插件",[3269,146167],{"style":127773,"src":146168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,146170,146171],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,146173,146174],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[3269,146176],{"style":127773,"src":146177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,146179,146180],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[3269,146182],{"style":127773,"src":146183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,146185,146186],{},"修改成75就可以，alt+z为快捷键",[19,146188,146189],{},"index.css：",[154,146191,146192],{"className":127917,"code":145934,"language":127919,"meta":160,"style":160},[70,146193,146194,146198,146204,146218,146222,146228,146242],{"__ignoreMap":160},[178,146195,146196],{"class":180,"line":181},[178,146197,145941],{"class":2008},[178,146199,146200,146202],{"class":180,"line":263},[178,146201,52367],{"class":323},[178,146203,17330],{"class":319},[178,146205,146206,146208,146210,146212,146214,146216],{"class":180,"line":274},[178,146207,72346],{"class":195},[178,146209,53167],{"class":319},[178,146211,145956],{"class":195},[178,146213,2268],{"class":699},[178,146215,131780],{"class":319},[178,146217,145963],{"class":2008},[178,146219,146220],{"class":180,"line":354},[178,146221,3371],{"class":319},[178,146223,146224,146226],{"class":180,"line":364},[178,146225,131765],{"class":184},[178,146227,17330],{"class":319},[178,146229,146230,146232,146234,146236,146238,146240],{"class":180,"line":740},[178,146231,72288],{"class":195},[178,146233,53167],{"class":319},[178,146235,2386],{"class":195},[178,146237,145984],{"class":699},[178,146239,131780],{"class":319},[178,146241,145989],{"class":2008},[178,146243,146244],{"class":180,"line":746},[178,146245,3371],{"class":319},[19,146247,145931],{},[154,146249,146250],{"className":127917,"code":128321,"language":127919,"meta":160,"style":160},[70,146251,146252,146258,146270],{"__ignoreMap":160},[178,146253,146254,146256],{"class":180,"line":181},[178,146255,376],{"class":323},[178,146257,17330],{"class":319},[178,146259,146260,146262,146264,146266,146268],{"class":180,"line":263},[178,146261,72346],{"class":195},[178,146263,53167],{"class":319},[178,146265,2541],{"class":195},[178,146267,53222],{"class":699},[178,146269,3100],{"class":319},[178,146271,146272],{"class":180,"line":274},[178,146273,3371],{"class":319},[14,146275,146277],{"id":146276},"_214-响应式开发","21.4 响应式开发",[19,146279,146280],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[3269,146282],{"style":127773,"src":146283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,146285,146286],{},"做法：",[2946,146288,146289,146292],{},[29,146290,146291],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[29,146293,146294],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[3269,146296],{"style":127773,"src":146297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,146299,146300],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[387,146302,146304],{"id":146303},"_2141-简单代码示范","21.4.1 简单代码示范",[154,146306,146307],{"className":127917,"code":145934,"language":127919,"meta":160,"style":160},[70,146308,146309,146313,146319,146333,146337,146343,146357],{"__ignoreMap":160},[178,146310,146311],{"class":180,"line":181},[178,146312,145941],{"class":2008},[178,146314,146315,146317],{"class":180,"line":263},[178,146316,52367],{"class":323},[178,146318,17330],{"class":319},[178,146320,146321,146323,146325,146327,146329,146331],{"class":180,"line":274},[178,146322,72346],{"class":195},[178,146324,53167],{"class":319},[178,146326,145956],{"class":195},[178,146328,2268],{"class":699},[178,146330,131780],{"class":319},[178,146332,145963],{"class":2008},[178,146334,146335],{"class":180,"line":354},[178,146336,3371],{"class":319},[178,146338,146339,146341],{"class":180,"line":364},[178,146340,131765],{"class":184},[178,146342,17330],{"class":319},[178,146344,146345,146347,146349,146351,146353,146355],{"class":180,"line":740},[178,146346,72288],{"class":195},[178,146348,53167],{"class":319},[178,146350,2386],{"class":195},[178,146352,145984],{"class":699},[178,146354,131780],{"class":319},[178,146356,145989],{"class":2008},[178,146358,146359],{"class":180,"line":746},[178,146360,3371],{"class":319},[19,146362,146363],{},"父盒子一般命名为container",[387,146365,146367],{"id":146366},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,146369,146370,146371],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[2093,146372,146373],{},"使得 Web 开发更加快捷",[2946,146375,146376],{},[29,146377,146378,146379],{},"官网：",[2093,146380,146381],{},[2178,146382,146383],{"href":146383,"rel":146384},"http:\u002F\u002Fgetbootstrap.com\u002F",[25619],[19,146386,146387],{},"可以直接去官网拿现成的东西",[26,146389,146390],{},[29,146391,146392],{},"Bootstrap的使用",[19,146394,146395],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,146397,146398],{},"Bootstrap 使用四步曲：",[19,146400,146401,146404],{},[2093,146402,146403],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[3269,146406],{"style":127773,"src":146407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,146409,146410],{},"打开Bootstrap官网，然后下载",[3269,146412],{"style":127773,"src":146413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[3269,146415],{"style":127773,"src":146416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,146418,146419],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,146421,146422],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,146424,146425],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[3269,146427],{"style":127773,"src":146428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[154,146430,146432],{"className":127917,"code":146431,"language":127919,"meta":160,"style":160},".center {\n  color: red;\n}\n",[70,146433,146434,146440,146450],{"__ignoreMap":160},[178,146435,146436,146438],{"class":180,"line":181},[178,146437,128208],{"class":184},[178,146439,17330],{"class":319},[178,146441,146442,146444,146446,146448],{"class":180,"line":263},[178,146443,72625],{"class":195},[178,146445,53167],{"class":319},[178,146447,59142],{"class":195},[178,146449,3100],{"class":319},[178,146451,146452],{"class":180,"line":274},[178,146453,3371],{"class":319},[19,146455,146456,146459],{},[70,146457,146458],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[3269,146461],{"style":127773,"src":146462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[3269,146464],{"style":127773,"src":146465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[3269,146467],{"style":127773,"src":146468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,146470,146471],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[3269,146473],{"style":127773,"src":146474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,146476,146477],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[26,146479,146480],{"start":263},[29,146481,146482],{},"布局容器",[3269,146484],{"style":127773,"src":146485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,146487,146488],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,146490,146491],{},"container-fluid用于移动式布局比较方便",[26,146493,146494],{"start":274},[29,146495,146496,146497],{},"bootstrap ",[2093,146498,146499],{},"栅格系统原理",[3269,146501],{"style":127773,"src":146502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[26,146504,146505],{"start":354},[29,146506,146507],{},[2093,146508,146509],{},"栅格选项参数",[3269,146511],{"style":127773,"src":146512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,146514,146515],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,146517,528],{},[154,146519,146520],{"className":127917,"code":146431,"language":127919,"meta":160,"style":160},[70,146521,146522,146528,146538],{"__ignoreMap":160},[178,146523,146524,146526],{"class":180,"line":181},[178,146525,128208],{"class":184},[178,146527,17330],{"class":319},[178,146529,146530,146532,146534,146536],{"class":180,"line":263},[178,146531,72625],{"class":195},[178,146533,53167],{"class":319},[178,146535,59142],{"class":195},[178,146537,3100],{"class":319},[178,146539,146540],{"class":180,"line":274},[178,146541,3371],{"class":319},[19,146543,136960],{},[3269,146545],{"style":127773,"src":146546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,146548,146549],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,146551,146552],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,146554,146555],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,146557,146558],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,146560,146561],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,146563,146564],{},"汇总展示说明：",[154,146566,146567],{"className":128664,"code":132021,"language":128666,"meta":160,"style":160},[70,146568,146569,146573,146587,146591],{"__ignoreMap":160},[178,146570,146571],{"class":180,"line":181},[178,146572,132028],{"class":2008},[178,146574,146575,146577,146579,146581,146583,146585],{"class":180,"line":263},[178,146576,320],{"class":319},[178,146578,53341],{"class":323},[178,146580,55210],{"class":184},[178,146582,330],{"class":319},[178,146584,132041],{"class":188},[178,146586,336],{"class":319},[178,146588,146589],{"class":180,"line":274},[178,146590,132048],{"class":319},[178,146592,146593,146595,146597],{"class":180,"line":354},[178,146594,367],{"class":319},[178,146596,53341],{"class":323},[178,146598,336],{"class":319},[3269,146600],{"style":127773,"src":146601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,146603,146604],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[154,146606,146607],{"className":128664,"code":132021,"language":128666,"meta":160,"style":160},[70,146608,146609,146613,146627,146631],{"__ignoreMap":160},[178,146610,146611],{"class":180,"line":181},[178,146612,132028],{"class":2008},[178,146614,146615,146617,146619,146621,146623,146625],{"class":180,"line":263},[178,146616,320],{"class":319},[178,146618,53341],{"class":323},[178,146620,55210],{"class":184},[178,146622,330],{"class":319},[178,146624,132041],{"class":188},[178,146626,336],{"class":319},[178,146628,146629],{"class":180,"line":274},[178,146630,132048],{"class":319},[178,146632,146633,146635,146637],{"class":180,"line":354},[178,146634,367],{"class":319},[178,146636,53341],{"class":323},[178,146638,336],{"class":319},[26,146640,146641],{"start":364},[29,146642,146643],{},[2093,146644,146645],{},"列嵌套",[3269,146647],{"style":127773,"src":146648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,146650,146651],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,146653,146654],{},"没加row内部这样：",[3269,146656],{"style":127773,"src":146657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,146659,146660],{},"加上row之后内部为：",[3269,146662],{"style":127773,"src":146663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[26,146665,146666],{"start":740},[29,146667,146668],{},[2093,146669,146670],{},"列偏移",[3269,146672],{"style":127773,"src":146673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,146675,146676],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,146678,146679],{},"要加偏移量，即偏移份数",[19,146681,146682],{},"偏移的份数=12-两个盒子的份数",[26,146684,146685],{"start":746},[29,146686,146687],{},[2093,146688,146689],{},"列排序",[3269,146691],{"style":127773,"src":146692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,146694,146695],{},"pull拉左；push推右",[26,146697,146698],{"start":752},[29,146699,146700],{},[2093,146701,146702],{},"响应式工具",[3269,146704],{"style":127773,"src":146705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,146707,146708],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[387,146710,146712],{"id":146711},"_2143-响应式小项目","21.4.3 响应式小项目",[19,146714,146715],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,146717,146718],{},"ul {",[19,146720,146721],{},"list-style: none;",[19,146723,146724],{},"margin:0;",[19,146726,146727],{},"padding:0; }",[3269,146729],{"style":127773,"src":146730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[3269,146732],{"style":127773,"src":146733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,146735,146736],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,146738,70609],{},[154,146740,146741],{"className":127917,"code":140587,"language":127919,"meta":160,"style":160},[70,146742,146743,146749,146759],{"__ignoreMap":160},[178,146744,146745,146747],{"class":180,"line":181},[178,146746,131765],{"class":184},[178,146748,17330],{"class":319},[178,146750,146751,146753,146755,146757],{"class":180,"line":263},[178,146752,132397],{"class":195},[178,146754,53167],{"class":319},[178,146756,56],{"class":195},[178,146758,3100],{"class":319},[178,146760,146761],{"class":180,"line":274},[178,146762,3371],{"class":319},[19,146764,72173],{},[154,146766,146767],{"className":127917,"code":140587,"language":127919,"meta":160,"style":160},[70,146768,146769,146775,146785],{"__ignoreMap":160},[178,146770,146771,146773],{"class":180,"line":181},[178,146772,131765],{"class":184},[178,146774,17330],{"class":319},[178,146776,146777,146779,146781,146783],{"class":180,"line":263},[178,146778,132397],{"class":195},[178,146780,53167],{"class":319},[178,146782,56],{"class":195},[178,146784,3100],{"class":319},[178,146786,146787],{"class":180,"line":274},[178,146788,3371],{"class":319},[14,146790,146792],{"id":146791},"_215-swiper-插件使用","21.5 swiper 插件使用",[2946,146794,146795,146798,146801],{},[29,146796,146797],{},"下载需要的css和js文件html页面中 引入相关文件",[29,146799,146800],{},"官网找到类似案例，复制html结构，css样式 js 语法",[29,146802,146803],{},"根据需求定制修改模块",[3269,146805],{"style":127773,"src":146806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,146808,146809],{},"解压后将这两部分放到项目中",[3269,146811],{"style":127773,"src":146812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,146814,146815],{},"这个插件可以帮助我们实现轮播图效果",[19,146817,146818],{},"用法：",[3269,146820],{"style":127773,"src":146821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,146823,146824],{},"找到自己喜欢的",[3269,146826],{"style":127773,"src":146827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,146829,146830],{},"右键，查看网页源代码",[3269,146832],{"style":127773,"src":146833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,146835,146836],{},"复制人家的结构内容",[19,146838,146839],{},"然后去看API文档：",[3269,146841],{"style":127773,"src":146842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,146844,146845],{},"可以看看如何修改样式",[19,146847,146848],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[1853,146850,146851],{},"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":160,"searchDepth":263,"depth":263,"links":146853},[146854,146859,146863,146868,146873],{"id":145654,"depth":263,"text":145655,"children":146855},[146856,146857,146858],{"id":145658,"depth":274,"text":145659},{"id":145668,"depth":274,"text":145669},{"id":145763,"depth":274,"text":145764},{"id":145778,"depth":263,"text":145779,"children":146860},[146861,146862],{"id":145800,"depth":274,"text":145801},{"id":145816,"depth":274,"text":145817},{"id":145891,"depth":263,"text":145892,"children":146864},[146865,146866,146867],{"id":145904,"depth":274,"text":145905},{"id":146128,"depth":274,"text":146129},{"id":146135,"depth":274,"text":146136},{"id":146276,"depth":263,"text":146277,"children":146869},[146870,146871,146872],{"id":146303,"depth":274,"text":146304},{"id":146366,"depth":274,"text":146367},{"id":146711,"depth":274,"text":146712},{"id":146791,"depth":263,"text":146792},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145646,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":146880,"title":146881,"body":146882,"description":25135,"extension":1880,"meta":147102,"navigation":721,"path":147103,"seo":147104,"stem":147105,"__hash__":147106},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":146883,"toc":147098},[146884,146887,146891,146894,146909,146914,146917,146922,146957,146962,146974,146979,146992,146997,147014,147019,147039,147044,147062,147065,147068,147071,147074,147078,147081,147084,147087,147090,147093,147096],[10,146885,146881],{"id":146886},"_22-代码提交与新型相对单位",[14,146888,146890],{"id":146889},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,146892,146893],{},"法1：",[26,146895,146896,146903,146906],{},[29,146897,146898,146899],{},"登录网站注册：",[2178,146900,146901],{"href":146901,"rel":146902},"https:\u002F\u002Fgitee.com\u002F",[25619],[29,146904,146905],{},"码云创建新的仓库",[29,146907,146908],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[2946,146910,146911],{},[29,146912,146913],{},"在网站根目录右键-- Git Bash Here",[3269,146915],{"style":127773,"src":146916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[2946,146918,146919],{},[29,146920,146921],{},"如果是第一次利用git提交，请配置好全局选项",[154,146923,146925],{"className":118661,"code":146924,"language":118663,"meta":160,"style":160},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[70,146926,146927,146943],{"__ignoreMap":160},[178,146928,146929,146932,146934,146937,146940],{"class":180,"line":181},[178,146930,146931],{"class":184},"git",[178,146933,121084],{"class":188},[178,146935,146936],{"class":195}," --global",[178,146938,146939],{"class":188}," user.name",[178,146941,146942],{"class":188}," \"你的名字\"\n",[178,146944,146945,146947,146949,146951,146954],{"class":180,"line":263},[178,146946,146931],{"class":184},[178,146948,121084],{"class":188},[178,146950,146936],{"class":195},[178,146952,146953],{"class":188}," user.email",[178,146955,146956],{"class":188}," \"你的邮箱\"\n",[2946,146958,146959],{},[29,146960,146961],{},"初始化仓库",[154,146963,146965],{"className":118661,"code":146964,"language":118663,"meta":160,"style":160},"git init\n",[70,146966,146967],{"__ignoreMap":160},[178,146968,146969,146971],{"class":180,"line":181},[178,146970,146931],{"class":184},[178,146972,146973],{"class":188}," init\n",[2946,146975,146976],{},[29,146977,146978],{},"把本地文件放到暂存区",[154,146980,146982],{"className":118661,"code":146981,"language":118663,"meta":160,"style":160},"git add .\n",[70,146983,146984],{"__ignoreMap":160},[178,146985,146986,146988,146990],{"class":180,"line":181},[178,146987,146931],{"class":184},[178,146989,6978],{"class":188},[178,146991,30489],{"class":188},[2946,146993,146994],{},[29,146995,146996],{},"把本地文件放到本地仓库里面",[154,146998,147000],{"className":118661,"code":146999,"language":118663,"meta":160,"style":160},"git commit -m \"first commit\"\n",[70,147001,147002],{"__ignoreMap":160},[178,147003,147004,147006,147009,147011],{"class":180,"line":181},[178,147005,146931],{"class":184},[178,147007,147008],{"class":188}," commit",[178,147010,102588],{"class":195},[178,147012,147013],{"class":188}," \"first commit\"\n",[2946,147015,147016],{},[29,147017,147018],{},"链接远程仓库",[154,147020,147022],{"className":118661,"code":147021,"language":118663,"meta":160,"style":160},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[70,147023,147024],{"__ignoreMap":160},[178,147025,147026,147028,147031,147033,147036],{"class":180,"line":181},[178,147027,146931],{"class":184},[178,147029,147030],{"class":188}," remote",[178,147032,6978],{"class":188},[178,147034,147035],{"class":188}," origin",[178,147037,147038],{"class":188}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[2946,147040,147041],{},[29,147042,147043],{},"把本地仓库的文件推送到远程仓库 push",[154,147045,147047],{"className":118661,"code":147046,"language":118663,"meta":160,"style":160},"git push -u origin master\n",[70,147048,147049],{"__ignoreMap":160},[178,147050,147051,147053,147055,147057,147059],{"class":180,"line":181},[178,147052,146931],{"class":184},[178,147054,30764],{"class":188},[178,147056,30039],{"class":195},[178,147058,147035],{"class":188},[178,147060,147061],{"class":188}," master\n",[3269,147063],{"style":127773,"src":147064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,147066,147067],{},"上方方法暂未实现，后边学完git后在整",[19,147069,147070],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[3269,147072],{"style":127773,"src":147073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,147075,147077],{"id":147076},"_222-新型相对单位","22.2 新型相对单位",[3269,147079],{"style":127773,"src":147080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[3269,147082],{"style":127773,"src":147083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,147085,147086],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,147088,147089],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[3269,147091],{"style":127773,"src":147092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,147094,147095],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[1853,147097,25712],{},{"title":160,"searchDepth":263,"depth":263,"links":147099},[147100,147101],{"id":146889,"depth":263,"text":146890},{"id":147076,"depth":263,"text":147077},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":146881,"description":25135},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":147108,"title":147109,"body":147110,"description":147114,"extension":1880,"meta":147115,"navigation":721,"path":147116,"seo":147117,"stem":147118,"__hash__":147119},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":147111,"toc":147112},[],{"title":160,"searchDepth":263,"depth":263,"links":147113},[],"自己正经开始学编程的第一门语言！",{"category":94554},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":147109,"description":147114},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147121,"title":147122,"body":147123,"description":25135,"extension":1880,"meta":148270,"navigation":721,"path":148271,"seo":148272,"stem":148273,"__hash__":148274},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147124,"toc":148246},[147125,147128,147132,147135,147138,147163,147166,147172,147176,147179,147206,147209,147249,147252,147264,147267,147273,147277,147281,147308,147325,147332,147336,147339,147365,147368,147372,147375,147415,147418,147435,147441,147445,147450,147494,147497,147515,147518,147586,147590,147597,147600,147615,147618,147627,147630,147641,147644,147653,147656,147673,147676,147691,147695,147699,147702,147704,147724,147728,147731,147734,147745,147748,147754,147758,147764,147791,147794,147806,147809,147820,147823,147829,147833,147839,147889,147892,147934,147937,147970,147973,148007,148011,148014,148034,148037,148073,148076,148089,148093,148097,148103,148106,148119,148123,148126,148132,148135,148139,148142,148145,148194,148198,148214,148220,148227,148233,148243],[10,147126,147122],{"id":147127},"_1-python环境与第一个程序",[14,147129,147131],{"id":147130},"_11-什么是python","1.1 什么是Python",[19,147133,147134],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,147136,147137],{},"理解 Python 时抓住三个关键词：",[26,147139,147140,147143,147146],{},[29,147141,147142],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[29,147144,147145],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[29,147147,147148,147149,1258,147152,1258,147155,1258,147158,1258,147160,297],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[70,147150,147151],{},"os",[70,147153,147154],{},"sys",[70,147156,147157],{},"json",[70,147159,59581],{},[70,147161,147162],{},"datetime",[19,147164,147165],{},"Python 程序的运行链路：",[154,147167,147170],{"className":147168,"code":147169,"language":159,"meta":160},[157],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[70,147171,147169],{"__ignoreMap":160},[14,147173,147175],{"id":147174},"_12-python解释器","1.2 Python解释器",[19,147177,147178],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[154,147180,147182],{"className":172,"code":147181,"language":174,"meta":160,"style":160},"python --version\npython3 --version\npython\npython3\n",[70,147183,147184,147190,147196,147201],{"__ignoreMap":160},[178,147185,147186,147188],{"class":180,"line":181},[178,147187,692],{"class":184},[178,147189,28044],{"class":195},[178,147191,147192,147194],{"class":180,"line":263},[178,147193,102585],{"class":184},[178,147195,28044],{"class":195},[178,147197,147198],{"class":180,"line":274},[178,147199,147200],{"class":184},"python\n",[178,147202,147203],{"class":180,"line":354},[178,147204,147205],{"class":184},"python3\n",[19,147207,147208],{},"进入交互模式后，可以直接输入表达式：",[154,147210,147212],{"className":690,"code":147211,"language":692,"meta":160,"style":160},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[70,147213,147214,147225,147230,147244],{"__ignoreMap":160},[178,147215,147216,147219,147221,147223],{"class":180,"line":181},[178,147217,147218],{"class":699},">>>",[178,147220,26870],{"class":195},[178,147222,47298],{"class":699},[178,147224,49455],{"class":195},[178,147226,147227],{"class":180,"line":263},[178,147228,147229],{"class":195},"3\n",[178,147231,147232,147234,147237,147239,147242],{"class":180,"line":274},[178,147233,147218],{"class":699},[178,147235,147236],{"class":195}," print",[178,147238,944],{"class":319},[178,147240,147241],{"class":188},"\"hello python\"",[178,147243,863],{"class":319},[178,147245,147246],{"class":180,"line":354},[178,147247,147248],{"class":319},"hello python\n",[19,147250,147251],{},"退出交互模式：",[154,147253,147255],{"className":690,"code":147254,"language":692,"meta":160,"style":160},"exit()\n",[70,147256,147257],{"__ignoreMap":160},[178,147258,147259,147262],{"class":180,"line":181},[178,147260,147261],{"class":195},"exit",[178,147263,3760],{"class":319},[19,147265,147266],{},"或使用快捷键：",[154,147268,147271],{"className":147269,"code":147270,"language":159,"meta":160},[157],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[70,147272,147270],{"__ignoreMap":160},[14,147274,147276],{"id":147275},"_13-安装python","1.3 安装Python",[387,147278,147280],{"id":147279},"_131-windows安装","1.3.1 Windows安装",[26,147282,147283,147290,147293,147299,147305],{},[29,147284,147285,147286],{},"打开 Python 官网：",[2178,147287,147288],{"href":147288,"rel":147289},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[25619],[29,147291,147292],{},"下载 Windows Installer。",[29,147294,147295,147296,297],{},"安装时勾选 ",[70,147297,147298],{},"Add Python to PATH",[29,147300,147301,147302,297],{},"点击 ",[70,147303,147304],{},"Install Now",[29,147306,147307],{},"安装完成后打开命令提示符验证：",[154,147309,147311],{"className":172,"code":147310,"language":174,"meta":160,"style":160},"python --version\npip --version\n",[70,147312,147313,147319],{"__ignoreMap":160},[178,147314,147315,147317],{"class":180,"line":181},[178,147316,692],{"class":184},[178,147318,28044],{"class":195},[178,147320,147321,147323],{"class":180,"line":263},[178,147322,221],{"class":184},[178,147324,28044],{"class":195},[19,147326,147327,147328,147331],{},"如果提示 ",[70,147329,147330],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[387,147333,147335],{"id":147334},"_132-macos安装","1.3.2 macOS安装",[19,147337,147338],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[154,147340,147342],{"className":172,"code":147341,"language":174,"meta":160,"style":160},"brew install python\npython3 --version\npip3 --version\n",[70,147343,147344,147353,147359],{"__ignoreMap":160},[178,147345,147346,147349,147351],{"class":180,"line":181},[178,147347,147348],{"class":184},"brew",[178,147350,192],{"class":188},[178,147352,125683],{"class":188},[178,147354,147355,147357],{"class":180,"line":263},[178,147356,102585],{"class":184},[178,147358,28044],{"class":195},[178,147360,147361,147363],{"class":180,"line":274},[178,147362,121065],{"class":184},[178,147364,28044],{"class":195},[19,147366,147367],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[387,147369,147371],{"id":147370},"_133-linux安装","1.3.3 Linux安装",[19,147373,147374],{},"Ubuntu\u002FDebian：",[154,147376,147378],{"className":172,"code":147377,"language":174,"meta":160,"style":160},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[70,147379,147380,147388,147403,147409],{"__ignoreMap":160},[178,147381,147382,147384,147386],{"class":180,"line":181},[178,147383,185],{"class":184},[178,147385,118682],{"class":188},[178,147387,27993],{"class":188},[178,147389,147390,147392,147394,147396,147398,147400],{"class":180,"line":263},[178,147391,185],{"class":184},[178,147393,118682],{"class":188},[178,147395,192],{"class":188},[178,147397,105768],{"class":188},[178,147399,102505],{"class":188},[178,147401,147402],{"class":188}," python3-venv\n",[178,147404,147405,147407],{"class":180,"line":274},[178,147406,102585],{"class":184},[178,147408,28044],{"class":195},[178,147410,147411,147413],{"class":180,"line":354},[178,147412,121065],{"class":184},[178,147414,28044],{"class":195},[19,147416,147417],{},"Fedora：",[154,147419,147421],{"className":172,"code":147420,"language":174,"meta":160,"style":160},"sudo dnf install python3 python3-pip\n",[70,147422,147423],{"__ignoreMap":160},[178,147424,147425,147427,147429,147431,147433],{"class":180,"line":181},[178,147426,185],{"class":184},[178,147428,189],{"class":188},[178,147430,192],{"class":188},[178,147432,105768],{"class":188},[178,147434,121130],{"class":188},[19,147436,147437,147438,147440],{},"Linux 上通常使用 ",[70,147439,102585],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147442,147444],{"id":147443},"_14-pip包管理器","1.4 pip包管理器",[19,147446,147447,147449],{},[70,147448,221],{}," 用来安装第三方库。",[154,147451,147453],{"className":172,"code":147452,"language":174,"meta":160,"style":160},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[70,147454,147455,147464,147473,147481,147487],{"__ignoreMap":160},[178,147456,147457,147459,147461],{"class":180,"line":181},[178,147458,221],{"class":184},[178,147460,192],{"class":188},[178,147462,147463],{"class":188}," requests\n",[178,147465,147466,147468,147471],{"class":180,"line":263},[178,147467,221],{"class":184},[178,147469,147470],{"class":188}," uninstall",[178,147472,147463],{"class":188},[178,147474,147475,147477,147479],{"class":180,"line":274},[178,147476,221],{"class":184},[178,147478,118939],{"class":188},[178,147480,147463],{"class":188},[178,147482,147483,147485],{"class":180,"line":354},[178,147484,221],{"class":184},[178,147486,120320],{"class":188},[178,147488,147489,147491],{"class":180,"line":364},[178,147490,221],{"class":184},[178,147492,147493],{"class":188}," freeze\n",[19,147495,147496],{},"国内网络较慢时可以临时使用镜像：",[154,147498,147500],{"className":172,"code":147499,"language":174,"meta":160,"style":160},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[70,147501,147502],{"__ignoreMap":160},[178,147503,147504,147506,147508,147511,147513],{"class":180,"line":181},[178,147505,221],{"class":184},[178,147507,192],{"class":188},[178,147509,147510],{"class":188}," requests",[178,147512,28179],{"class":195},[178,147514,121093],{"class":188},[19,147516,147517],{},"常见第三方库：",[45,147519,147520,147529],{},[48,147521,147522],{},[51,147523,147524,147527],{},[54,147525,147526],{},"库",[54,147528,60],{},[62,147530,147531,147539,147546,147554,147562,147570,147578],{},[51,147532,147533,147536],{},[67,147534,147535],{},"requests",[67,147537,147538],{},"网络请求",[51,147540,147541,147543],{},[67,147542,102339],{},[67,147544,147545],{},"数值计算",[51,147547,147548,147551],{},[67,147549,147550],{},"pandas",[67,147552,147553],{},"表格数据处理",[51,147555,147556,147559],{},[67,147557,147558],{},"matplotlib",[67,147560,147561],{},"绘图",[51,147563,147564,147567],{},[67,147565,147566],{},"pyecharts",[67,147568,147569],{},"ECharts 图表",[51,147571,147572,147575],{},[67,147573,147574],{},"flask",[67,147576,147577],{},"Web 后端",[51,147579,147580,147583],{},[67,147581,147582],{},"pytest",[67,147584,147585],{},"自动化测试",[14,147587,147589],{"id":147588},"_15-虚拟环境","1.5 虚拟环境",[19,147591,147592,147593,147596],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[70,147594,147595],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,147598,147599],{},"创建虚拟环境：",[154,147601,147603],{"className":172,"code":147602,"language":174,"meta":160,"style":160},"python -m venv .venv\n",[70,147604,147605],{"__ignoreMap":160},[178,147606,147607,147609,147611,147613],{"class":180,"line":181},[178,147608,692],{"class":184},[178,147610,102588],{"class":195},[178,147612,102591],{"class":188},[178,147614,102594],{"class":188},[19,147616,147617],{},"Windows 激活：",[154,147619,147621],{"className":172,"code":147620,"language":174,"meta":160,"style":160},".venv\\Scripts\\activate\n",[70,147622,147623],{"__ignoreMap":160},[178,147624,147625],{"class":180,"line":181},[178,147626,147620],{"class":184},[19,147628,147629],{},"macOS\u002FLinux 激活：",[154,147631,147633],{"className":172,"code":147632,"language":174,"meta":160,"style":160},"source .venv\u002Fbin\u002Factivate\n",[70,147634,147635],{"__ignoreMap":160},[178,147636,147637,147639],{"class":180,"line":181},[178,147638,102599],{"class":195},[178,147640,102602],{"class":188},[19,147642,147643],{},"退出虚拟环境：",[154,147645,147647],{"className":172,"code":147646,"language":174,"meta":160,"style":160},"deactivate\n",[70,147648,147649],{"__ignoreMap":160},[178,147650,147651],{"class":180,"line":181},[178,147652,147646],{"class":184},[19,147654,147655],{},"保存依赖：",[154,147657,147659],{"className":172,"code":147658,"language":174,"meta":160,"style":160},"pip freeze > requirements.txt\n",[70,147660,147661],{"__ignoreMap":160},[178,147662,147663,147665,147668,147670],{"class":180,"line":181},[178,147664,221],{"class":184},[178,147666,147667],{"class":188}," freeze",[178,147669,27973],{"class":699},[178,147671,147672],{"class":188}," requirements.txt\n",[19,147674,147675],{},"安装依赖：",[154,147677,147679],{"className":172,"code":147678,"language":174,"meta":160,"style":160},"pip install -r requirements.txt\n",[70,147680,147681],{"__ignoreMap":160},[178,147682,147683,147685,147687,147689],{"class":180,"line":181},[178,147684,221],{"class":184},[178,147686,192],{"class":188},[178,147688,121004],{"class":195},[178,147690,147672],{"class":188},[14,147692,147694],{"id":147693},"_16-开发工具","1.6 开发工具",[387,147696,147698],{"id":147697},"_161-pycharm","1.6.1 PyCharm",[19,147700,147701],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,147703,123427],{},[26,147705,147706,147709,147712,147718,147721],{},[29,147707,147708],{},"New Project：创建项目。",[29,147710,147711],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[29,147713,147714,147715,127348],{},"New Python File：创建 ",[70,147716,147717],{},".py",[29,147719,147720],{},"Run：运行当前文件。",[29,147722,147723],{},"Debug：断点调试。",[387,147725,147727],{"id":147726},"_162-vs-code","1.6.2 VS Code",[19,147729,147730],{},"VS Code 轻量，适合后续多语言开发。",[19,147732,147733],{},"建议安装插件：",[26,147735,147736,147739,147742],{},[29,147737,147738],{},"Python。",[29,147740,147741],{},"Pylance。",[29,147743,147744],{},"Jupyter。",[19,147746,147747],{},"选择解释器：",[154,147749,147752],{"className":147750,"code":147751,"language":159,"meta":160},[157],"Ctrl + Shift + P -> Python: Select Interpreter\n",[70,147753,147751],{"__ignoreMap":160},[14,147755,147757],{"id":147756},"_17-第一个python程序","1.7 第一个Python程序",[19,147759,147760,147761,26372],{},"创建文件 ",[70,147762,147763],{},"hello.py",[154,147765,147767],{"className":690,"code":147766,"language":692,"meta":160,"style":160},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[70,147768,147769,147780],{"__ignoreMap":160},[178,147770,147771,147773,147775,147778],{"class":180,"line":181},[178,147772,1504],{"class":195},[178,147774,944],{"class":319},[178,147776,147777],{"class":188},"\"Hello World\"",[178,147779,863],{"class":319},[178,147781,147782,147784,147786,147789],{"class":180,"line":263},[178,147783,1504],{"class":195},[178,147785,944],{"class":319},[178,147787,147788],{"class":188},"\"你好，Python\"",[178,147790,863],{"class":319},[19,147792,147793],{},"在终端运行：",[154,147795,147797],{"className":172,"code":147796,"language":174,"meta":160,"style":160},"python hello.py\n",[70,147798,147799],{"__ignoreMap":160},[178,147800,147801,147803],{"class":180,"line":181},[178,147802,692],{"class":184},[178,147804,147805],{"class":188}," hello.py\n",[19,147807,147808],{},"或：",[154,147810,147812],{"className":172,"code":147811,"language":174,"meta":160,"style":160},"python3 hello.py\n",[70,147813,147814],{"__ignoreMap":160},[178,147815,147816,147818],{"class":180,"line":181},[178,147817,102585],{"class":184},[178,147819,147805],{"class":188},[19,147821,147822],{},"输出：",[154,147824,147827],{"className":147825,"code":147826,"language":159,"meta":160},[157],"Hello World\n你好，Python\n",[70,147828,147826],{"__ignoreMap":160},[14,147830,147832],{"id":147831},"_18-print函数","1.8 print函数",[19,147834,147835,147838],{},[70,147836,147837],{},"print()"," 用来输出内容。",[154,147840,147842],{"className":690,"code":147841,"language":692,"meta":160,"style":160},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[70,147843,147844,147854,147864,147874],{"__ignoreMap":160},[178,147845,147846,147848,147850,147852],{"class":180,"line":181},[178,147847,1504],{"class":195},[178,147849,944],{"class":319},[178,147851,7613],{"class":188},[178,147853,863],{"class":319},[178,147855,147856,147858,147860,147862],{"class":180,"line":263},[178,147857,1504],{"class":195},[178,147859,944],{"class":319},[178,147861,2251],{"class":195},[178,147863,863],{"class":319},[178,147865,147866,147868,147870,147872],{"class":180,"line":274},[178,147867,1504],{"class":195},[178,147869,944],{"class":319},[178,147871,1999],{"class":195},[178,147873,863],{"class":319},[178,147875,147876,147878,147880,147883,147885,147887],{"class":180,"line":354},[178,147877,1504],{"class":195},[178,147879,944],{"class":319},[178,147881,147882],{"class":188},"\"年龄:\"",[178,147884,14196],{"class":319},[178,147886,2590],{"class":195},[178,147888,863],{"class":319},[19,147890,147891],{},"多个内容用逗号隔开，默认中间加空格：",[154,147893,147895],{"className":690,"code":147894,"language":692,"meta":160,"style":160},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[70,147896,147897,147907,147917],{"__ignoreMap":160},[178,147898,147899,147902,147904],{"class":180,"line":181},[178,147900,147901],{"class":319},"name ",[178,147903,330],{"class":699},[178,147905,147906],{"class":188}," \"张三\"\n",[178,147908,147909,147912,147914],{"class":180,"line":263},[178,147910,147911],{"class":319},"age ",[178,147913,330],{"class":699},[178,147915,147916],{"class":195}," 18\n",[178,147918,147919,147921,147923,147926,147929,147931],{"class":180,"line":274},[178,147920,1504],{"class":195},[178,147922,944],{"class":319},[178,147924,147925],{"class":188},"\"姓名:\"",[178,147927,147928],{"class":319},", name, ",[178,147930,147882],{"class":188},[178,147932,147933],{"class":319},", age)\n",[19,147935,147936],{},"修改分隔符：",[154,147938,147940],{"className":690,"code":147939,"language":692,"meta":160,"style":160},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[70,147941,147942],{"__ignoreMap":160},[178,147943,147944,147946,147948,147951,147953,147955,147957,147959,147961,147964,147966,147968],{"class":180,"line":181},[178,147945,1504],{"class":195},[178,147947,944],{"class":319},[178,147949,147950],{"class":188},"\"2024\"",[178,147952,14196],{"class":319},[178,147954,56037],{"class":188},[178,147956,14196],{"class":319},[178,147958,56037],{"class":188},[178,147960,14196],{"class":319},[178,147962,147963],{"class":6985},"sep",[178,147965,330],{"class":699},[178,147967,34215],{"class":188},[178,147969,863],{"class":319},[19,147971,147972],{},"修改结尾符：",[154,147974,147976],{"className":690,"code":147975,"language":692,"meta":160,"style":160},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[70,147977,147978,147996],{"__ignoreMap":160},[178,147979,147980,147982,147984,147986,147988,147990,147992,147994],{"class":180,"line":181},[178,147981,1504],{"class":195},[178,147983,944],{"class":319},[178,147985,7613],{"class":188},[178,147987,14196],{"class":319},[178,147989,47533],{"class":6985},[178,147991,330],{"class":699},[178,147993,6130],{"class":188},[178,147995,863],{"class":319},[178,147997,147998,148000,148002,148005],{"class":180,"line":263},[178,147999,1504],{"class":195},[178,148001,944],{"class":319},[178,148003,148004],{"class":188},"\"python\"",[178,148006,863],{"class":319},[14,148008,148010],{"id":148009},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,148012,148013],{},"交互运行适合临时验证：",[154,148015,148017],{"className":690,"code":148016,"language":692,"meta":160,"style":160},">>> 10 * 3\n30\n",[70,148018,148019,148029],{"__ignoreMap":160},[178,148020,148021,148023,148025,148027],{"class":180,"line":181},[178,148022,147218],{"class":699},[178,148024,3822],{"class":195},[178,148026,8287],{"class":699},[178,148028,121401],{"class":195},[178,148030,148031],{"class":180,"line":263},[178,148032,148033],{"class":195},"30\n",[19,148035,148036],{},"脚本运行适合保存程序：",[154,148038,148040],{"className":690,"code":148039,"language":692,"meta":160,"style":160},"price = 8\ncount = 5\nprint(price * count)\n",[70,148041,148042,148052,148061],{"__ignoreMap":160},[178,148043,148044,148047,148049],{"class":180,"line":181},[178,148045,148046],{"class":319},"price ",[178,148048,330],{"class":699},[178,148050,148051],{"class":195}," 8\n",[178,148053,148054,148057,148059],{"class":180,"line":263},[178,148055,148056],{"class":319},"count ",[178,148058,330],{"class":699},[178,148060,56148],{"class":195},[178,148062,148063,148065,148068,148070],{"class":180,"line":274},[178,148064,1504],{"class":195},[178,148066,148067],{"class":319},"(price ",[178,148069,2395],{"class":699},[178,148071,148072],{"class":319}," count)\n",[19,148074,148075],{},"实际学习中推荐：",[26,148077,148078,148081,148086],{},[29,148079,148080],{},"临时试一个语法，用交互模式。",[29,148082,148083,148084,127348],{},"写完整练习，用 ",[70,148085,147717],{},[29,148087,148088],{},"写项目，用独立目录和虚拟环境。",[14,148090,148092],{"id":148091},"_110-常见错误","1.10 常见错误",[387,148094,148096],{"id":148095},"_1101-命令找不到","1.10.1 命令找不到",[154,148098,148101],{"className":148099,"code":148100,"language":159,"meta":160},[157],"python: command not found\n",[70,148102,148100],{"__ignoreMap":160},[19,148104,148105],{},"原因：",[26,148107,148108,148111,148114],{},[29,148109,148110],{},"没安装 Python。",[29,148112,148113],{},"PATH 没配置。",[29,148115,148116,148117,297],{},"Linux\u002FmacOS 应该使用 ",[70,148118,102585],{},[387,148120,148122],{"id":148121},"_1102-文件名冲突","1.10.2 文件名冲突",[19,148124,148125],{},"不要把文件命名为：",[154,148127,148130],{"className":148128,"code":148129,"language":159,"meta":160},[157],"random.py\njson.py\ntime.py\nrequests.py\n",[70,148131,148129],{"__ignoreMap":160},[19,148133,148134],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[387,148136,148138],{"id":148137},"_1103-中文乱码","1.10.3 中文乱码",[19,148140,148141],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,148143,148144],{},"如果读写文件出现乱码，要明确指定编码：",[154,148146,148148],{"className":690,"code":148147,"language":692,"meta":160,"style":160},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[70,148149,148150,148184],{"__ignoreMap":160},[178,148151,148152,148154,148157,148159,148162,148164,148167,148169,148172,148174,148177,148179,148181],{"class":180,"line":181},[178,148153,109198],{"class":699},[178,148155,148156],{"class":195}," open",[178,148158,944],{"class":319},[178,148160,148161],{"class":188},"\"data.txt\"",[178,148163,14196],{"class":319},[178,148165,148166],{"class":188},"\"r\"",[178,148168,14196],{"class":319},[178,148170,148171],{"class":6985},"encoding",[178,148173,330],{"class":699},[178,148175,148176],{"class":188},"\"utf-8\"",[178,148178,15474],{"class":319},[178,148180,713],{"class":699},[178,148182,148183],{"class":319}," f:\n",[178,148185,148186,148189,148191],{"class":180,"line":263},[178,148187,148188],{"class":319},"    content ",[178,148190,330],{"class":699},[178,148192,148193],{"class":319}," f.read()\n",[14,148195,148197],{"id":148196},"_111-本章练习","1.11 本章练习",[26,148199,148200,148203,148209],{},[29,148201,148202],{},"安装 Python，并在终端输出版本号。",[29,148204,148205,148206,148208],{},"新建 ",[70,148207,147763],{},"，输出自己的姓名、年龄、学习目标。",[29,148210,105731,148211,148213],{},[70,148212,147837],{}," 输出下面格式：",[154,148215,148218],{"className":148216,"code":148217,"language":159,"meta":160},[157],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[70,148219,148217],{"__ignoreMap":160},[26,148221,148222],{"start":354},[29,148223,105731,148224,148226],{},[70,148225,147963],{}," 输出日期：",[154,148228,148231],{"className":148229,"code":148230,"language":159,"meta":160},[157],"2024-10-10\n",[70,148232,148230],{"__ignoreMap":160},[26,148234,148235],{"start":364},[29,148236,105731,148237,148239,148240,148242],{},[70,148238,47533],{}," 让两次 ",[70,148241,147837],{}," 输出在同一行。",[1853,148244,148245],{},"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":160,"searchDepth":263,"depth":263,"links":148247},[148248,148249,148250,148255,148256,148257,148261,148262,148263,148264,148269],{"id":147130,"depth":263,"text":147131},{"id":147174,"depth":263,"text":147175},{"id":147275,"depth":263,"text":147276,"children":148251},[148252,148253,148254],{"id":147279,"depth":274,"text":147280},{"id":147334,"depth":274,"text":147335},{"id":147370,"depth":274,"text":147371},{"id":147443,"depth":263,"text":147444},{"id":147588,"depth":263,"text":147589},{"id":147693,"depth":263,"text":147694,"children":148258},[148259,148260],{"id":147697,"depth":274,"text":147698},{"id":147726,"depth":274,"text":147727},{"id":147756,"depth":263,"text":147757},{"id":147831,"depth":263,"text":147832},{"id":148009,"depth":263,"text":148010},{"id":148091,"depth":263,"text":148092,"children":148265},[148266,148267,148268],{"id":148095,"depth":274,"text":148096},{"id":148121,"depth":274,"text":148122},{"id":148137,"depth":274,"text":148138},{"id":148196,"depth":263,"text":148197},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147122,"description":25135},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148276,"title":148277,"body":148278,"description":25135,"extension":1880,"meta":150682,"navigation":721,"path":150683,"seo":150684,"stem":150685,"__hash__":150686},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148279,"toc":150667},[148280,148283,148287,148290,148293,148310,148313,148355,148358,148362,148365,148368,148405,148408,148442,148445,148537,148541,148555,148558,148585,148588,148592,148695,148702,148705,148722,148726,148733,148922,148925,148998,149002,149005,149089,149092,149124,149128,149332,149335,149339,149345,149447,149450,149706,149710,149713,149716,149730,149732,149918,149922,150284,150290,150294,150297,150421,150424,150603,150606,150610,150643,150647,150664],[10,148281,148277],{"id":148282},"_10-json与pyecharts折线图",[14,148284,148286],{"id":148285},"_101-数据可视化","10.1 数据可视化",[19,148288,148289],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,148291,148292],{},"常见图表：",[26,148294,148295,148298,148301,148304,148307],{},[29,148296,148297],{},"折线图：看趋势。",[29,148299,148300],{},"柱状图：看分类对比。",[29,148302,148303],{},"饼图：看占比。",[29,148305,148306],{},"地图：看地域分布。",[29,148308,148309],{},"散点图：看两个变量之间的关系。",[19,148311,148312],{},"Python 可视化常用库：",[45,148314,148315,148323],{},[48,148316,148317],{},[51,148318,148319,148321],{},[54,148320,147526],{},[54,148322,25498],{},[62,148324,148325,148332,148340,148347],{},[51,148326,148327,148329],{},[67,148328,147558],{},[67,148330,148331],{},"基础、经典、可定制",[51,148333,148334,148337],{},[67,148335,148336],{},"seaborn",[67,148338,148339],{},"统计图表更美观",[51,148341,148342,148344],{},[67,148343,147566],{},[67,148345,148346],{},"生成交互式网页图表",[51,148348,148349,148352],{},[67,148350,148351],{},"plotly",[67,148353,148354],{},"交互图表能力强",[19,148356,148357],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,148359,148361],{"id":148360},"_102-json回顾","10.2 JSON回顾",[19,148363,148364],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,148366,148367],{},"Python 字典：",[154,148369,148371],{"className":690,"code":148370,"language":692,"meta":160,"style":160},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[70,148372,148373,148381,148392,148401],{"__ignoreMap":160},[178,148374,148375,148377,148379],{"class":180,"line":181},[178,148376,103315],{"class":319},[178,148378,330],{"class":699},[178,148380,17330],{"class":319},[178,148382,148383,148386,148388,148390],{"class":180,"line":263},[178,148384,148385],{"class":188},"    \"name\"",[178,148387,53167],{"class":319},[178,148389,70989],{"class":188},[178,148391,33202],{"class":319},[178,148393,148394,148397,148399],{"class":180,"line":274},[178,148395,148396],{"class":188},"    \"value\"",[178,148398,53167],{"class":319},[178,148400,99171],{"class":195},[178,148402,148403],{"class":180,"line":354},[178,148404,3371],{"class":319},[19,148406,148407],{},"JSON 字符串：",[154,148409,148412],{"className":148410,"code":148411,"language":147157,"meta":160,"style":160},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[70,148413,148414,148418,148429,148438],{"__ignoreMap":160},[178,148415,148416],{"class":180,"line":181},[178,148417,3352],{"class":319},[178,148419,148420,148423,148425,148427],{"class":180,"line":263},[178,148421,148422],{"class":195},"  \"name\"",[178,148424,53167],{"class":319},[178,148426,70989],{"class":188},[178,148428,33202],{"class":319},[178,148430,148431,148434,148436],{"class":180,"line":274},[178,148432,148433],{"class":195},"  \"value\"",[178,148435,53167],{"class":319},[178,148437,99171],{"class":195},[178,148439,148440],{"class":180,"line":354},[178,148441,3371],{"class":319},[19,148443,148444],{},"Python 与 JSON 的转换：",[154,148446,148448],{"className":690,"code":148447,"language":692,"meta":160,"style":160},"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",[70,148449,148450,148457,148461,148486,148490,148509,148516,148520,148530],{"__ignoreMap":160},[178,148451,148452,148454],{"class":180,"line":181},[178,148453,700],{"class":699},[178,148455,148456],{"class":319}," json\n",[178,148458,148459],{"class":180,"line":263},[178,148460,722],{"emptyLinePlaceholder":721},[178,148462,148463,148465,148467,148469,148471,148473,148475,148477,148480,148482,148484],{"class":180,"line":274},[178,148464,103315],{"class":319},[178,148466,330],{"class":699},[178,148468,6219],{"class":319},[178,148470,333],{"class":188},[178,148472,53167],{"class":319},[178,148474,70989],{"class":188},[178,148476,14196],{"class":319},[178,148478,148479],{"class":188},"\"value\"",[178,148481,53167],{"class":319},[178,148483,2251],{"class":195},[178,148485,3371],{"class":319},[178,148487,148488],{"class":180,"line":354},[178,148489,722],{"emptyLinePlaceholder":721},[178,148491,148492,148495,148497,148500,148503,148505,148507],{"class":180,"line":364},[178,148493,148494],{"class":319},"json_text ",[178,148496,330],{"class":699},[178,148498,148499],{"class":319}," json.dumps(data, ",[178,148501,148502],{"class":6985},"ensure_ascii",[178,148504,330],{"class":699},[178,148506,35719],{"class":195},[178,148508,863],{"class":319},[178,148510,148511,148513],{"class":180,"line":740},[178,148512,1504],{"class":195},[178,148514,148515],{"class":319},"(json_text)\n",[178,148517,148518],{"class":180,"line":746},[178,148519,722],{"emptyLinePlaceholder":721},[178,148521,148522,148525,148527],{"class":180,"line":752},[178,148523,148524],{"class":319},"new_data ",[178,148526,330],{"class":699},[178,148528,148529],{"class":319}," json.loads(json_text)\n",[178,148531,148532,148534],{"class":180,"line":757},[178,148533,1504],{"class":195},[178,148535,148536],{"class":319},"(new_data)\n",[14,148538,148540],{"id":148539},"_103-安装pyecharts","10.3 安装pyecharts",[154,148542,148544],{"className":172,"code":148543,"language":174,"meta":160,"style":160},"pip install pyecharts\n",[70,148545,148546],{"__ignoreMap":160},[178,148547,148548,148550,148552],{"class":180,"line":181},[178,148549,221],{"class":184},[178,148551,192],{"class":188},[178,148553,148554],{"class":188}," pyecharts\n",[19,148556,148557],{},"验证：",[154,148559,148561],{"className":690,"code":148560,"language":692,"meta":160,"style":160},"import pyecharts\n\nprint(pyecharts.__version__)\n",[70,148562,148563,148569,148573],{"__ignoreMap":160},[178,148564,148565,148567],{"class":180,"line":181},[178,148566,700],{"class":699},[178,148568,148554],{"class":319},[178,148570,148571],{"class":180,"line":263},[178,148572,722],{"emptyLinePlaceholder":721},[178,148574,148575,148577,148580,148583],{"class":180,"line":274},[178,148576,1504],{"class":195},[178,148578,148579],{"class":319},"(pyecharts.",[178,148581,148582],{"class":195},"__version__",[178,148584,863],{"class":319},[19,148586,148587],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148589,148591],{"id":148590},"_104-第一个折线图","10.4 第一个折线图",[154,148593,148595],{"className":690,"code":148594,"language":692,"meta":160,"style":160},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[70,148596,148597,148609,148613,148623,148653,148685],{"__ignoreMap":160},[178,148598,148599,148601,148604,148606],{"class":180,"line":181},[178,148600,32479],{"class":699},[178,148602,148603],{"class":319}," pyecharts.charts ",[178,148605,700],{"class":699},[178,148607,148608],{"class":319}," Line\n",[178,148610,148611],{"class":180,"line":263},[178,148612,722],{"emptyLinePlaceholder":721},[178,148614,148615,148618,148620],{"class":180,"line":274},[178,148616,148617],{"class":319},"line ",[178,148619,330],{"class":699},[178,148621,148622],{"class":319}," Line()\n",[178,148624,148625,148628,148631,148633,148636,148638,148641,148643,148646,148648,148651],{"class":180,"line":354},[178,148626,148627],{"class":319},"line.add_xaxis([",[178,148629,148630],{"class":188},"\"周一\"",[178,148632,14196],{"class":319},[178,148634,148635],{"class":188},"\"周二\"",[178,148637,14196],{"class":319},[178,148639,148640],{"class":188},"\"周三\"",[178,148642,14196],{"class":319},[178,148644,148645],{"class":188},"\"周四\"",[178,148647,14196],{"class":319},[178,148649,148650],{"class":188},"\"周五\"",[178,148652,6428],{"class":319},[178,148654,148655,148658,148661,148663,148665,148667,148669,148671,148673,148675,148678,148680,148683],{"class":180,"line":364},[178,148656,148657],{"class":319},"line.add_yaxis(",[178,148659,148660],{"class":188},"\"销售额\"",[178,148662,79238],{"class":319},[178,148664,2251],{"class":195},[178,148666,14196],{"class":319},[178,148668,2757],{"class":195},[178,148670,14196],{"class":319},[178,148672,2802],{"class":195},[178,148674,14196],{"class":319},[178,148676,148677],{"class":195},"150",[178,148679,14196],{"class":319},[178,148681,148682],{"class":195},"180",[178,148684,6428],{"class":319},[178,148686,148687,148690,148693],{"class":180,"line":740},[178,148688,148689],{"class":319},"line.render(",[178,148691,148692],{"class":188},"\"line.html\"",[178,148694,863],{"class":319},[19,148696,148697,148698,148701],{},"运行后会生成 ",[70,148699,148700],{},"line.html","，用浏览器打开即可看到图表。",[19,148703,148704],{},"核心步骤：",[26,148706,148707,148710,148713,148716,148719],{},[29,148708,148709],{},"导入图表类。",[29,148711,148712],{},"创建图表对象。",[29,148714,148715],{},"添加 x 轴数据。",[29,148717,148718],{},"添加 y 轴数据。",[29,148720,148721],{},"渲染为 HTML。",[14,148723,148725],{"id":148724},"_105-全局配置","10.5 全局配置",[19,148727,148728,148729,148732],{},"常用配置在 ",[70,148730,148731],{},"pyecharts.options"," 中。",[154,148734,148736],{"className":690,"code":148735,"language":692,"meta":160,"style":160},"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",[70,148737,148738,148755,148765,148769,148777,148801,148829,148834,148853,148872,148890,148910,148914],{"__ignoreMap":160},[178,148739,148740,148742,148745,148747,148750,148752],{"class":180,"line":181},[178,148741,32479],{"class":699},[178,148743,148744],{"class":319}," pyecharts ",[178,148746,700],{"class":699},[178,148748,148749],{"class":319}," options ",[178,148751,713],{"class":699},[178,148753,148754],{"class":319}," opts\n",[178,148756,148757,148759,148761,148763],{"class":180,"line":263},[178,148758,32479],{"class":699},[178,148760,148603],{"class":319},[178,148762,700],{"class":699},[178,148764,148608],{"class":319},[178,148766,148767],{"class":180,"line":274},[178,148768,722],{"emptyLinePlaceholder":721},[178,148770,148771,148773,148775],{"class":180,"line":354},[178,148772,148617],{"class":319},[178,148774,330],{"class":699},[178,148776,148622],{"class":319},[178,148778,148779,148781,148783,148785,148787,148789,148791,148793,148795,148797,148799],{"class":180,"line":364},[178,148780,148627],{"class":319},[178,148782,148630],{"class":188},[178,148784,14196],{"class":319},[178,148786,148635],{"class":188},[178,148788,14196],{"class":319},[178,148790,148640],{"class":188},[178,148792,14196],{"class":319},[178,148794,148645],{"class":188},[178,148796,14196],{"class":319},[178,148798,148650],{"class":188},[178,148800,6428],{"class":319},[178,148802,148803,148805,148807,148809,148811,148813,148815,148817,148819,148821,148823,148825,148827],{"class":180,"line":740},[178,148804,148657],{"class":319},[178,148806,148660],{"class":188},[178,148808,79238],{"class":319},[178,148810,2251],{"class":195},[178,148812,14196],{"class":319},[178,148814,2757],{"class":195},[178,148816,14196],{"class":319},[178,148818,2802],{"class":195},[178,148820,14196],{"class":319},[178,148822,148677],{"class":195},[178,148824,14196],{"class":319},[178,148826,148682],{"class":195},[178,148828,6428],{"class":319},[178,148830,148831],{"class":180,"line":746},[178,148832,148833],{"class":319},"line.set_global_opts(\n",[178,148835,148836,148839,148841,148844,148846,148848,148851],{"class":180,"line":752},[178,148837,148838],{"class":6985},"    title_opts",[178,148840,330],{"class":699},[178,148842,148843],{"class":319},"opts.TitleOpts(",[178,148845,53137],{"class":6985},[178,148847,330],{"class":699},[178,148849,148850],{"class":188},"\"一周销售额\"",[178,148852,39779],{"class":319},[178,148854,148855,148858,148860,148863,148865,148867,148870],{"class":180,"line":757},[178,148856,148857],{"class":6985},"    xaxis_opts",[178,148859,330],{"class":699},[178,148861,148862],{"class":319},"opts.AxisOpts(",[178,148864,81529],{"class":6985},[178,148866,330],{"class":699},[178,148868,148869],{"class":188},"\"日期\"",[178,148871,39779],{"class":319},[178,148873,148874,148877,148879,148881,148883,148885,148888],{"class":180,"line":763},[178,148875,148876],{"class":6985},"    yaxis_opts",[178,148878,330],{"class":699},[178,148880,148862],{"class":319},[178,148882,81529],{"class":6985},[178,148884,330],{"class":699},[178,148886,148887],{"class":188},"\"金额\"",[178,148889,39779],{"class":319},[178,148891,148892,148895,148897,148900,148903,148905,148908],{"class":180,"line":769},[178,148893,148894],{"class":6985},"    tooltip_opts",[178,148896,330],{"class":699},[178,148898,148899],{"class":319},"opts.TooltipOpts(",[178,148901,148902],{"class":6985},"trigger",[178,148904,330],{"class":699},[178,148906,148907],{"class":188},"\"axis\"",[178,148909,39779],{"class":319},[178,148911,148912],{"class":180,"line":774},[178,148913,863],{"class":319},[178,148915,148916,148918,148920],{"class":180,"line":780},[178,148917,148689],{"class":319},[178,148919,148692],{"class":188},[178,148921,863],{"class":319},[19,148923,148924],{},"常见全局配置：",[45,148926,148927,148936],{},[48,148928,148929],{},[51,148930,148931,148934],{},[54,148932,148933],{},"配置",[54,148935,60],{},[62,148937,148938,148948,148958,148968,148978,148988],{},[51,148939,148940,148945],{},[67,148941,148942],{},[70,148943,148944],{},"TitleOpts",[67,148946,148947],{},"标题",[51,148949,148950,148955],{},[67,148951,148952],{},[70,148953,148954],{},"LegendOpts",[67,148956,148957],{},"图例",[51,148959,148960,148965],{},[67,148961,148962],{},[70,148963,148964],{},"TooltipOpts",[67,148966,148967],{},"提示框",[51,148969,148970,148975],{},[67,148971,148972],{},[70,148973,148974],{},"AxisOpts",[67,148976,148977],{},"坐标轴",[51,148979,148980,148985],{},[67,148981,148982],{},[70,148983,148984],{},"VisualMapOpts",[67,148986,148987],{},"视觉映射",[51,148989,148990,148995],{},[67,148991,148992],{},[70,148993,148994],{},"DataZoomOpts",[67,148996,148997],{},"区域缩放",[14,148999,149001],{"id":149000},"_106-系列配置","10.6 系列配置",[19,149003,149004],{},"系列配置作用于某一组数据。",[154,149006,149008],{"className":690,"code":149007,"language":692,"meta":160,"style":160},"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",[70,149009,149010,149015,149026,149055,149066,149085],{"__ignoreMap":160},[178,149011,149012],{"class":180,"line":181},[178,149013,149014],{"class":319},"line.add_yaxis(\n",[178,149016,149017,149020,149022,149024],{"class":180,"line":263},[178,149018,149019],{"class":6985},"    series_name",[178,149021,330],{"class":699},[178,149023,148660],{"class":188},[178,149025,33202],{"class":319},[178,149027,149028,149031,149033,149035,149037,149039,149041,149043,149045,149047,149049,149051,149053],{"class":180,"line":274},[178,149029,149030],{"class":6985},"    y_axis",[178,149032,330],{"class":699},[178,149034,2830],{"class":319},[178,149036,2251],{"class":195},[178,149038,14196],{"class":319},[178,149040,2757],{"class":195},[178,149042,14196],{"class":319},[178,149044,2802],{"class":195},[178,149046,14196],{"class":319},[178,149048,148677],{"class":195},[178,149050,14196],{"class":319},[178,149052,148682],{"class":195},[178,149054,89551],{"class":319},[178,149056,149057,149060,149062,149064],{"class":180,"line":354},[178,149058,149059],{"class":6985},"    is_smooth",[178,149061,330],{"class":699},[178,149063,33212],{"class":195},[178,149065,33202],{"class":319},[178,149067,149068,149071,149073,149076,149079,149081,149083],{"class":180,"line":364},[178,149069,149070],{"class":6985},"    label_opts",[178,149072,330],{"class":699},[178,149074,149075],{"class":319},"opts.LabelOpts(",[178,149077,149078],{"class":6985},"is_show",[178,149080,330],{"class":699},[178,149082,33212],{"class":195},[178,149084,39779],{"class":319},[178,149086,149087],{"class":180,"line":740},[178,149088,863],{"class":319},[19,149090,149091],{},"常用参数：",[26,149093,149094,149100,149106,149112,149118],{},[29,149095,149096,149099],{},[70,149097,149098],{},"series_name","：系列名称。",[29,149101,149102,149105],{},[70,149103,149104],{},"y_axis","：y 轴数据。",[29,149107,149108,149111],{},[70,149109,149110],{},"is_smooth","：是否平滑曲线。",[29,149113,149114,149117],{},[70,149115,149116],{},"label_opts","：标签配置。",[29,149119,149120,149123],{},[70,149121,149122],{},"symbol_size","：标记点大小。",[14,149125,149127],{"id":149126},"_107-多条折线","10.7 多条折线",[154,149129,149131],{"className":690,"code":149130,"language":692,"meta":160,"style":160},"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",[70,149132,149133,149147,149157,149161,149190,149194,149202,149207,149245,149282,149286,149303,149319,149323],{"__ignoreMap":160},[178,149134,149135,149137,149139,149141,149143,149145],{"class":180,"line":181},[178,149136,32479],{"class":699},[178,149138,148744],{"class":319},[178,149140,700],{"class":699},[178,149142,148749],{"class":319},[178,149144,713],{"class":699},[178,149146,148754],{"class":319},[178,149148,149149,149151,149153,149155],{"class":180,"line":263},[178,149150,32479],{"class":699},[178,149152,148603],{"class":319},[178,149154,700],{"class":699},[178,149156,148608],{"class":319},[178,149158,149159],{"class":180,"line":274},[178,149160,722],{"emptyLinePlaceholder":721},[178,149162,149163,149166,149168,149170,149172,149174,149176,149178,149180,149182,149184,149186,149188],{"class":180,"line":354},[178,149164,149165],{"class":319},"dates ",[178,149167,330],{"class":699},[178,149169,53953],{"class":319},[178,149171,148630],{"class":188},[178,149173,14196],{"class":319},[178,149175,148635],{"class":188},[178,149177,14196],{"class":319},[178,149179,148640],{"class":188},[178,149181,14196],{"class":319},[178,149183,148645],{"class":188},[178,149185,14196],{"class":319},[178,149187,148650],{"class":188},[178,149189,34978],{"class":319},[178,149191,149192],{"class":180,"line":364},[178,149193,722],{"emptyLinePlaceholder":721},[178,149195,149196,149198,149200],{"class":180,"line":740},[178,149197,148617],{"class":319},[178,149199,330],{"class":699},[178,149201,148622],{"class":319},[178,149203,149204],{"class":180,"line":746},[178,149205,149206],{"class":319},"line.add_xaxis(dates)\n",[178,149208,149209,149211,149214,149216,149218,149220,149223,149225,149227,149229,149231,149233,149235,149237,149239,149241,149243],{"class":180,"line":752},[178,149210,148657],{"class":319},[178,149212,149213],{"class":188},"\"线上销售\"",[178,149215,79238],{"class":319},[178,149217,2251],{"class":195},[178,149219,14196],{"class":319},[178,149221,149222],{"class":195},"130",[178,149224,14196],{"class":319},[178,149226,2757],{"class":195},[178,149228,14196],{"class":319},[178,149230,22806],{"class":195},[178,149232,14196],{"class":319},[178,149234,1002],{"class":195},[178,149236,113567],{"class":319},[178,149238,149110],{"class":6985},[178,149240,330],{"class":699},[178,149242,33212],{"class":195},[178,149244,863],{"class":319},[178,149246,149247,149249,149252,149254,149256,149258,149260,149262,149264,149266,149268,149270,149272,149274,149276,149278,149280],{"class":180,"line":757},[178,149248,148657],{"class":319},[178,149250,149251],{"class":188},"\"线下销售\"",[178,149253,79238],{"class":319},[178,149255,2552],{"class":195},[178,149257,14196],{"class":319},[178,149259,2802],{"class":195},[178,149261,14196],{"class":319},[178,149263,2251],{"class":195},[178,149265,14196],{"class":319},[178,149267,2757],{"class":195},[178,149269,14196],{"class":319},[178,149271,148677],{"class":195},[178,149273,113567],{"class":319},[178,149275,149110],{"class":6985},[178,149277,330],{"class":699},[178,149279,33212],{"class":195},[178,149281,863],{"class":319},[178,149283,149284],{"class":180,"line":763},[178,149285,148833],{"class":319},[178,149287,149288,149290,149292,149294,149296,149298,149301],{"class":180,"line":769},[178,149289,148838],{"class":6985},[178,149291,330],{"class":699},[178,149293,148843],{"class":319},[178,149295,53137],{"class":6985},[178,149297,330],{"class":699},[178,149299,149300],{"class":188},"\"线上线下销售趋势\"",[178,149302,39779],{"class":319},[178,149304,149305,149307,149309,149311,149313,149315,149317],{"class":180,"line":774},[178,149306,148894],{"class":6985},[178,149308,330],{"class":699},[178,149310,148899],{"class":319},[178,149312,148902],{"class":6985},[178,149314,330],{"class":699},[178,149316,148907],{"class":188},[178,149318,39779],{"class":319},[178,149320,149321],{"class":180,"line":780},[178,149322,863],{"class":319},[178,149324,149325,149327,149330],{"class":180,"line":786},[178,149326,148689],{"class":319},[178,149328,149329],{"class":188},"\"sales.html\"",[178,149331,863],{"class":319},[19,149333,149334],{},"多条折线适合比较不同指标或不同地区。",[14,149336,149338],{"id":149337},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,149340,149341,149342,26372],{},"假设 ",[70,149343,149344],{},"sales.json",[154,149346,149348],{"className":148410,"code":149347,"language":147157,"meta":160,"style":160},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[70,149349,149350,149355,149387,149415,149443],{"__ignoreMap":160},[178,149351,149352],{"class":180,"line":181},[178,149353,149354],{"class":319},"[\n",[178,149356,149357,149360,149363,149365,149367,149369,149372,149374,149376,149378,149381,149383,149385],{"class":180,"line":263},[178,149358,149359],{"class":319},"  {",[178,149361,149362],{"class":195},"\"date\"",[178,149364,53167],{"class":319},[178,149366,148630],{"class":188},[178,149368,14196],{"class":319},[178,149370,149371],{"class":195},"\"online\"",[178,149373,53167],{"class":319},[178,149375,2251],{"class":195},[178,149377,14196],{"class":319},[178,149379,149380],{"class":195},"\"offline\"",[178,149382,53167],{"class":319},[178,149384,2552],{"class":195},[178,149386,6701],{"class":319},[178,149388,149389,149391,149393,149395,149397,149399,149401,149403,149405,149407,149409,149411,149413],{"class":180,"line":274},[178,149390,149359],{"class":319},[178,149392,149362],{"class":195},[178,149394,53167],{"class":319},[178,149396,148635],{"class":188},[178,149398,14196],{"class":319},[178,149400,149371],{"class":195},[178,149402,53167],{"class":319},[178,149404,149222],{"class":195},[178,149406,14196],{"class":319},[178,149408,149380],{"class":195},[178,149410,53167],{"class":319},[178,149412,2802],{"class":195},[178,149414,6701],{"class":319},[178,149416,149417,149419,149421,149423,149425,149427,149429,149431,149433,149435,149437,149439,149441],{"class":180,"line":354},[178,149418,149359],{"class":319},[178,149420,149362],{"class":195},[178,149422,53167],{"class":319},[178,149424,148640],{"class":188},[178,149426,14196],{"class":319},[178,149428,149371],{"class":195},[178,149430,53167],{"class":319},[178,149432,2757],{"class":195},[178,149434,14196],{"class":319},[178,149436,149380],{"class":195},[178,149438,53167],{"class":319},[178,149440,2251],{"class":195},[178,149442,3371],{"class":319},[178,149444,149445],{"class":180,"line":364},[178,149446,34978],{"class":319},[19,149448,149449],{},"读取并绘图：",[154,149451,149453],{"className":690,"code":149452,"language":692,"meta":160,"style":160},"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",[70,149454,149455,149461,149475,149485,149489,149521,149534,149538,149546,149555,149564,149568,149580,149589,149598,149607,149611,149619,149623,149640,149657,149661,149678,149694,149698],{"__ignoreMap":160},[178,149456,149457,149459],{"class":180,"line":181},[178,149458,700],{"class":699},[178,149460,148456],{"class":319},[178,149462,149463,149465,149467,149469,149471,149473],{"class":180,"line":263},[178,149464,32479],{"class":699},[178,149466,148744],{"class":319},[178,149468,700],{"class":699},[178,149470,148749],{"class":319},[178,149472,713],{"class":699},[178,149474,148754],{"class":319},[178,149476,149477,149479,149481,149483],{"class":180,"line":274},[178,149478,32479],{"class":699},[178,149480,148603],{"class":319},[178,149482,700],{"class":699},[178,149484,148608],{"class":319},[178,149486,149487],{"class":180,"line":354},[178,149488,722],{"emptyLinePlaceholder":721},[178,149490,149491,149493,149495,149497,149500,149502,149504,149506,149508,149510,149512,149514,149516,149519],{"class":180,"line":364},[178,149492,109198],{"class":699},[178,149494,148156],{"class":195},[178,149496,944],{"class":319},[178,149498,149499],{"class":188},"\"sales.json\"",[178,149501,14196],{"class":319},[178,149503,148166],{"class":188},[178,149505,14196],{"class":319},[178,149507,148171],{"class":6985},[178,149509,330],{"class":699},[178,149511,148176],{"class":188},[178,149513,15474],{"class":319},[178,149515,713],{"class":699},[178,149517,149518],{"class":6985}," file",[178,149520,847],{"class":319},[178,149522,149523,149525,149527,149530,149532],{"class":180,"line":740},[178,149524,869],{"class":319},[178,149526,330],{"class":699},[178,149528,149529],{"class":319}," json.load(",[178,149531,47086],{"class":6985},[178,149533,863],{"class":319},[178,149535,149536],{"class":180,"line":746},[178,149537,722],{"emptyLinePlaceholder":721},[178,149539,149540,149542,149544],{"class":180,"line":752},[178,149541,149165],{"class":319},[178,149543,330],{"class":699},[178,149545,53566],{"class":319},[178,149547,149548,149551,149553],{"class":180,"line":757},[178,149549,149550],{"class":319},"online_sales ",[178,149552,330],{"class":699},[178,149554,53566],{"class":319},[178,149556,149557,149560,149562],{"class":180,"line":763},[178,149558,149559],{"class":319},"offline_sales ",[178,149561,330],{"class":699},[178,149563,53566],{"class":319},[178,149565,149566],{"class":180,"line":769},[178,149567,722],{"emptyLinePlaceholder":721},[178,149569,149570,149572,149575,149577],{"class":180,"line":774},[178,149571,1474],{"class":699},[178,149573,149574],{"class":319}," item ",[178,149576,994],{"class":699},[178,149578,149579],{"class":319}," data:\n",[178,149581,149582,149585,149587],{"class":180,"line":780},[178,149583,149584],{"class":319},"    dates.append(item[",[178,149586,149362],{"class":188},[178,149588,6428],{"class":319},[178,149590,149591,149594,149596],{"class":180,"line":786},[178,149592,149593],{"class":319},"    online_sales.append(item[",[178,149595,149371],{"class":188},[178,149597,6428],{"class":319},[178,149599,149600,149603,149605],{"class":180,"line":792},[178,149601,149602],{"class":319},"    offline_sales.append(item[",[178,149604,149380],{"class":188},[178,149606,6428],{"class":319},[178,149608,149609],{"class":180,"line":798},[178,149610,722],{"emptyLinePlaceholder":721},[178,149612,149613,149615,149617],{"class":180,"line":804},[178,149614,148617],{"class":319},[178,149616,330],{"class":699},[178,149618,148622],{"class":319},[178,149620,149621],{"class":180,"line":810},[178,149622,149206],{"class":319},[178,149624,149625,149627,149629,149632,149634,149636,149638],{"class":180,"line":816},[178,149626,148657],{"class":319},[178,149628,149213],{"class":188},[178,149630,149631],{"class":319},", online_sales, ",[178,149633,149110],{"class":6985},[178,149635,330],{"class":699},[178,149637,33212],{"class":195},[178,149639,863],{"class":319},[178,149641,149642,149644,149646,149649,149651,149653,149655],{"class":180,"line":822},[178,149643,148657],{"class":319},[178,149645,149251],{"class":188},[178,149647,149648],{"class":319},", offline_sales, ",[178,149650,149110],{"class":6985},[178,149652,330],{"class":699},[178,149654,33212],{"class":195},[178,149656,863],{"class":319},[178,149658,149659],{"class":180,"line":827},[178,149660,148833],{"class":319},[178,149662,149663,149665,149667,149669,149671,149673,149676],{"class":180,"line":832},[178,149664,148838],{"class":6985},[178,149666,330],{"class":699},[178,149668,148843],{"class":319},[178,149670,53137],{"class":6985},[178,149672,330],{"class":699},[178,149674,149675],{"class":188},"\"销售趋势\"",[178,149677,39779],{"class":319},[178,149679,149680,149682,149684,149686,149688,149690,149692],{"class":180,"line":850},[178,149681,148894],{"class":6985},[178,149683,330],{"class":699},[178,149685,148899],{"class":319},[178,149687,148902],{"class":6985},[178,149689,330],{"class":699},[178,149691,148907],{"class":188},[178,149693,39779],{"class":319},[178,149695,149696],{"class":180,"line":866},[178,149697,863],{"class":319},[178,149699,149700,149702,149704],{"class":180,"line":877},[178,149701,148689],{"class":319},[178,149703,149329],{"class":188},[178,149705,863],{"class":319},[14,149707,149709],{"id":149708},"_109-数据清洗","10.9 数据清洗",[19,149711,149712],{},"真实数据经常不整齐，需要清洗。",[19,149714,149715],{},"常见问题：",[26,149717,149718,149721,149724,149727],{},[29,149719,149720],{},"数字是字符串。",[29,149722,149723],{},"字段缺失。",[29,149725,149726],{},"空值。",[29,149728,149729],{},"日期格式不统一。",[19,149731,16893],{},[154,149733,149735],{"className":690,"code":149734,"language":692,"meta":160,"style":160},"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",[70,149736,149737,149746,149769,149789,149810,149814,149818,149826,149835,149839,149850,149864,149873,149878,149882,149890,149900,149904,149911],{"__ignoreMap":160},[178,149738,149739,149742,149744],{"class":180,"line":181},[178,149740,149741],{"class":319},"raw_data ",[178,149743,330],{"class":699},[178,149745,57168],{"class":319},[178,149747,149748,149751,149753,149755,149757,149759,149762,149764,149767],{"class":180,"line":263},[178,149749,149750],{"class":319},"    {",[178,149752,149362],{"class":188},[178,149754,53167],{"class":319},[178,149756,148630],{"class":188},[178,149758,14196],{"class":319},[178,149760,149761],{"class":188},"\"sales\"",[178,149763,53167],{"class":319},[178,149765,149766],{"class":188},"\"100\"",[178,149768,6701],{"class":319},[178,149770,149771,149773,149775,149777,149779,149781,149783,149785,149787],{"class":180,"line":274},[178,149772,149750],{"class":319},[178,149774,149362],{"class":188},[178,149776,53167],{"class":319},[178,149778,148635],{"class":188},[178,149780,14196],{"class":319},[178,149782,149761],{"class":188},[178,149784,53167],{"class":319},[178,149786,9421],{"class":188},[178,149788,6701],{"class":319},[178,149790,149791,149793,149795,149797,149799,149801,149803,149805,149808],{"class":180,"line":354},[178,149792,149750],{"class":319},[178,149794,149362],{"class":188},[178,149796,53167],{"class":319},[178,149798,148640],{"class":188},[178,149800,14196],{"class":319},[178,149802,149761],{"class":188},[178,149804,53167],{"class":319},[178,149806,149807],{"class":188},"\"120\"",[178,149809,6701],{"class":319},[178,149811,149812],{"class":180,"line":364},[178,149813,34978],{"class":319},[178,149815,149816],{"class":180,"line":740},[178,149817,722],{"emptyLinePlaceholder":721},[178,149819,149820,149822,149824],{"class":180,"line":746},[178,149821,149165],{"class":319},[178,149823,330],{"class":699},[178,149825,53566],{"class":319},[178,149827,149828,149831,149833],{"class":180,"line":752},[178,149829,149830],{"class":319},"sales ",[178,149832,330],{"class":699},[178,149834,53566],{"class":319},[178,149836,149837],{"class":180,"line":757},[178,149838,722],{"emptyLinePlaceholder":721},[178,149840,149841,149843,149845,149847],{"class":180,"line":763},[178,149842,1474],{"class":699},[178,149844,149574],{"class":319},[178,149846,994],{"class":699},[178,149848,149849],{"class":319}," raw_data:\n",[178,149851,149852,149855,149857,149860,149862],{"class":180,"line":769},[178,149853,149854],{"class":319},"    value ",[178,149856,330],{"class":699},[178,149858,149859],{"class":319}," item.get(",[178,149861,149761],{"class":188},[178,149863,863],{"class":319},[178,149865,149866,149868,149870],{"class":180,"line":774},[178,149867,922],{"class":699},[178,149869,40662],{"class":699},[178,149871,149872],{"class":319}," value:\n",[178,149874,149875],{"class":180,"line":780},[178,149876,149877],{"class":699},"        continue\n",[178,149879,149880],{"class":180,"line":786},[178,149881,722],{"emptyLinePlaceholder":721},[178,149883,149884,149886,149888],{"class":180,"line":792},[178,149885,149584],{"class":319},[178,149887,149362],{"class":188},[178,149889,6428],{"class":319},[178,149891,149892,149895,149897],{"class":180,"line":798},[178,149893,149894],{"class":319},"    sales.append(",[178,149896,1956],{"class":195},[178,149898,149899],{"class":319},"(value))\n",[178,149901,149902],{"class":180,"line":804},[178,149903,722],{"emptyLinePlaceholder":721},[178,149905,149906,149908],{"class":180,"line":810},[178,149907,1504],{"class":195},[178,149909,149910],{"class":319},"(dates)\n",[178,149912,149913,149915],{"class":180,"line":816},[178,149914,1504],{"class":195},[178,149916,149917],{"class":319},"(sales)\n",[14,149919,149921],{"id":149920},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[154,149923,149925],{"className":690,"code":149924,"language":692,"meta":160,"style":160},"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",[70,149926,149927,149941,149951,149955,149963,149984,150006,150028,150050,150072,150076,150080,150102,150123,150127,150135,150139,150143,150153,150162,150172,150188,150192,150196,150213,150229,150245,150261,150271,150275],{"__ignoreMap":160},[178,149928,149929,149931,149933,149935,149937,149939],{"class":180,"line":181},[178,149930,32479],{"class":699},[178,149932,148744],{"class":319},[178,149934,700],{"class":699},[178,149936,148749],{"class":319},[178,149938,713],{"class":699},[178,149940,148754],{"class":319},[178,149942,149943,149945,149947,149949],{"class":180,"line":263},[178,149944,32479],{"class":699},[178,149946,148603],{"class":319},[178,149948,700],{"class":699},[178,149950,148608],{"class":319},[178,149952,149953],{"class":180,"line":274},[178,149954,722],{"emptyLinePlaceholder":721},[178,149956,149957,149959,149961],{"class":180,"line":354},[178,149958,149830],{"class":319},[178,149960,330],{"class":699},[178,149962,57168],{"class":319},[178,149964,149965,149967,149969,149971,149974,149976,149978,149980,149982],{"class":180,"line":364},[178,149966,149750],{"class":319},[178,149968,149362],{"class":188},[178,149970,53167],{"class":319},[178,149972,149973],{"class":188},"\"2024-10-01\"",[178,149975,14196],{"class":319},[178,149977,85799],{"class":188},[178,149979,53167],{"class":319},[178,149981,93738],{"class":195},[178,149983,6701],{"class":319},[178,149985,149986,149988,149990,149992,149995,149997,149999,150001,150004],{"class":180,"line":740},[178,149987,149750],{"class":319},[178,149989,149362],{"class":188},[178,149991,53167],{"class":319},[178,149993,149994],{"class":188},"\"2024-10-02\"",[178,149996,14196],{"class":319},[178,149998,85799],{"class":188},[178,150000,53167],{"class":319},[178,150002,150003],{"class":195},"1800",[178,150005,6701],{"class":319},[178,150007,150008,150010,150012,150014,150017,150019,150021,150023,150026],{"class":180,"line":746},[178,150009,149750],{"class":319},[178,150011,149362],{"class":188},[178,150013,53167],{"class":319},[178,150015,150016],{"class":188},"\"2024-10-03\"",[178,150018,14196],{"class":319},[178,150020,85799],{"class":188},[178,150022,53167],{"class":319},[178,150024,150025],{"class":195},"1500",[178,150027,6701],{"class":319},[178,150029,150030,150032,150034,150036,150039,150041,150043,150045,150048],{"class":180,"line":752},[178,150031,149750],{"class":319},[178,150033,149362],{"class":188},[178,150035,53167],{"class":319},[178,150037,150038],{"class":188},"\"2024-10-04\"",[178,150040,14196],{"class":319},[178,150042,85799],{"class":188},[178,150044,53167],{"class":319},[178,150046,150047],{"class":195},"2100",[178,150049,6701],{"class":319},[178,150051,150052,150054,150056,150058,150061,150063,150065,150067,150070],{"class":180,"line":757},[178,150053,149750],{"class":319},[178,150055,149362],{"class":188},[178,150057,53167],{"class":319},[178,150059,150060],{"class":188},"\"2024-10-05\"",[178,150062,14196],{"class":319},[178,150064,85799],{"class":188},[178,150066,53167],{"class":319},[178,150068,150069],{"class":195},"2600",[178,150071,6701],{"class":319},[178,150073,150074],{"class":180,"line":763},[178,150075,34978],{"class":319},[178,150077,150078],{"class":180,"line":769},[178,150079,722],{"emptyLinePlaceholder":721},[178,150081,150082,150084,150086,150089,150091,150093,150095,150097,150099],{"class":180,"line":774},[178,150083,149165],{"class":319},[178,150085,330],{"class":699},[178,150087,150088],{"class":319}," [item[",[178,150090,149362],{"class":188},[178,150092,6214],{"class":319},[178,150094,1474],{"class":699},[178,150096,149574],{"class":319},[178,150098,994],{"class":699},[178,150100,150101],{"class":319}," sales]\n",[178,150103,150104,150107,150109,150111,150113,150115,150117,150119,150121],{"class":180,"line":780},[178,150105,150106],{"class":319},"amounts ",[178,150108,330],{"class":699},[178,150110,150088],{"class":319},[178,150112,85799],{"class":188},[178,150114,6214],{"class":319},[178,150116,1474],{"class":699},[178,150118,149574],{"class":319},[178,150120,994],{"class":699},[178,150122,150101],{"class":319},[178,150124,150125],{"class":180,"line":786},[178,150126,722],{"emptyLinePlaceholder":721},[178,150128,150129,150131,150133],{"class":180,"line":792},[178,150130,148617],{"class":319},[178,150132,330],{"class":699},[178,150134,148622],{"class":319},[178,150136,150137],{"class":180,"line":798},[178,150138,149206],{"class":319},[178,150140,150141],{"class":180,"line":804},[178,150142,149014],{"class":319},[178,150144,150145,150147,150149,150151],{"class":180,"line":810},[178,150146,149019],{"class":6985},[178,150148,330],{"class":699},[178,150150,148660],{"class":188},[178,150152,33202],{"class":319},[178,150154,150155,150157,150159],{"class":180,"line":816},[178,150156,149030],{"class":6985},[178,150158,330],{"class":699},[178,150160,150161],{"class":319},"amounts,\n",[178,150163,150164,150166,150168,150170],{"class":180,"line":822},[178,150165,149059],{"class":6985},[178,150167,330],{"class":699},[178,150169,33212],{"class":195},[178,150171,33202],{"class":319},[178,150173,150174,150176,150178,150180,150182,150184,150186],{"class":180,"line":827},[178,150175,149070],{"class":6985},[178,150177,330],{"class":699},[178,150179,149075],{"class":319},[178,150181,149078],{"class":6985},[178,150183,330],{"class":699},[178,150185,33212],{"class":195},[178,150187,39779],{"class":319},[178,150189,150190],{"class":180,"line":832},[178,150191,863],{"class":319},[178,150193,150194],{"class":180,"line":850},[178,150195,148833],{"class":319},[178,150197,150198,150200,150202,150204,150206,150208,150211],{"class":180,"line":866},[178,150199,148838],{"class":6985},[178,150201,330],{"class":699},[178,150203,148843],{"class":319},[178,150205,53137],{"class":6985},[178,150207,330],{"class":699},[178,150209,150210],{"class":188},"\"每日销售额\"",[178,150212,39779],{"class":319},[178,150214,150215,150217,150219,150221,150223,150225,150227],{"class":180,"line":877},[178,150216,148857],{"class":6985},[178,150218,330],{"class":699},[178,150220,148862],{"class":319},[178,150222,81529],{"class":6985},[178,150224,330],{"class":699},[178,150226,148869],{"class":188},[178,150228,39779],{"class":319},[178,150230,150231,150233,150235,150237,150239,150241,150243],{"class":180,"line":882},[178,150232,148876],{"class":6985},[178,150234,330],{"class":699},[178,150236,148862],{"class":319},[178,150238,81529],{"class":6985},[178,150240,330],{"class":699},[178,150242,148887],{"class":188},[178,150244,39779],{"class":319},[178,150246,150247,150249,150251,150253,150255,150257,150259],{"class":180,"line":898},[178,150248,148894],{"class":6985},[178,150250,330],{"class":699},[178,150252,148899],{"class":319},[178,150254,148902],{"class":6985},[178,150256,330],{"class":699},[178,150258,148907],{"class":188},[178,150260,39779],{"class":319},[178,150262,150263,150266,150268],{"class":180,"line":914},[178,150264,150265],{"class":6985},"    datazoom_opts",[178,150267,330],{"class":699},[178,150269,150270],{"class":319},"[opts.DataZoomOpts()],\n",[178,150272,150273],{"class":180,"line":919},[178,150274,863],{"class":319},[178,150276,150277,150279,150282],{"class":180,"line":935},[178,150278,148689],{"class":319},[178,150280,150281],{"class":188},"\"daily_sales.html\"",[178,150283,863],{"class":319},[19,150285,150286,150289],{},[70,150287,150288],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,150291,150293],{"id":150292},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,150295,150296],{},"如果数据结构如下：",[154,150298,150300],{"className":690,"code":150299,"language":692,"meta":160,"style":160},"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",[70,150301,150302,150310,150318,150340,150361,150366,150373,150393,150413,150417],{"__ignoreMap":160},[178,150303,150304,150306,150308],{"class":180,"line":181},[178,150305,103315],{"class":319},[178,150307,330],{"class":699},[178,150309,17330],{"class":319},[178,150311,150312,150315],{"class":180,"line":263},[178,150313,150314],{"class":188},"    \"北京\"",[178,150316,150317],{"class":319},": [\n",[178,150319,150320,150322,150324,150326,150329,150331,150334,150336,150338],{"class":180,"line":274},[178,150321,6688],{"class":319},[178,150323,149362],{"class":188},[178,150325,53167],{"class":319},[178,150327,150328],{"class":188},"\"2024-01-01\"",[178,150330,14196],{"class":319},[178,150332,150333],{"class":188},"\"confirm\"",[178,150335,53167],{"class":319},[178,150337,2386],{"class":195},[178,150339,6701],{"class":319},[178,150341,150342,150344,150346,150348,150351,150353,150355,150357,150359],{"class":180,"line":354},[178,150343,6688],{"class":319},[178,150345,149362],{"class":188},[178,150347,53167],{"class":319},[178,150349,150350],{"class":188},"\"2024-01-02\"",[178,150352,14196],{"class":319},[178,150354,150333],{"class":188},[178,150356,53167],{"class":319},[178,150358,2438],{"class":195},[178,150360,6701],{"class":319},[178,150362,150363],{"class":180,"line":364},[178,150364,150365],{"class":319},"    ],\n",[178,150367,150368,150371],{"class":180,"line":740},[178,150369,150370],{"class":188},"    \"上海\"",[178,150372,150317],{"class":319},[178,150374,150375,150377,150379,150381,150383,150385,150387,150389,150391],{"class":180,"line":746},[178,150376,6688],{"class":319},[178,150378,149362],{"class":188},[178,150380,53167],{"class":319},[178,150382,150328],{"class":188},[178,150384,14196],{"class":319},[178,150386,150333],{"class":188},[178,150388,53167],{"class":319},[178,150390,2335],{"class":195},[178,150392,6701],{"class":319},[178,150394,150395,150397,150399,150401,150403,150405,150407,150409,150411],{"class":180,"line":752},[178,150396,6688],{"class":319},[178,150398,149362],{"class":188},[178,150400,53167],{"class":319},[178,150402,150350],{"class":188},[178,150404,14196],{"class":319},[178,150406,150333],{"class":188},[178,150408,53167],{"class":319},[178,150410,2463],{"class":195},[178,150412,6701],{"class":319},[178,150414,150415],{"class":180,"line":757},[178,150416,150365],{"class":319},[178,150418,150419],{"class":180,"line":763},[178,150420,3371],{"class":319},[19,150422,150423],{},"绘制多地区趋势：",[154,150425,150427],{"className":690,"code":150426,"language":692,"meta":160,"style":160},"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",[70,150428,150429,150443,150453,150457,150482,150486,150494,150498,150502,150514,150536,150549,150553,150557,150574,150590,150594],{"__ignoreMap":160},[178,150430,150431,150433,150435,150437,150439,150441],{"class":180,"line":181},[178,150432,32479],{"class":699},[178,150434,148744],{"class":319},[178,150436,700],{"class":699},[178,150438,148749],{"class":319},[178,150440,713],{"class":699},[178,150442,148754],{"class":319},[178,150444,150445,150447,150449,150451],{"class":180,"line":263},[178,150446,32479],{"class":699},[178,150448,148603],{"class":319},[178,150450,700],{"class":699},[178,150452,148608],{"class":319},[178,150454,150455],{"class":180,"line":274},[178,150456,722],{"emptyLinePlaceholder":721},[178,150458,150459,150461,150463,150465,150467,150469,150471,150473,150475,150478,150480],{"class":180,"line":354},[178,150460,149165],{"class":319},[178,150462,330],{"class":699},[178,150464,150088],{"class":319},[178,150466,149362],{"class":188},[178,150468,6214],{"class":319},[178,150470,1474],{"class":699},[178,150472,149574],{"class":319},[178,150474,994],{"class":699},[178,150476,150477],{"class":319}," data[",[178,150479,70989],{"class":188},[178,150481,79247],{"class":319},[178,150483,150484],{"class":180,"line":364},[178,150485,722],{"emptyLinePlaceholder":721},[178,150487,150488,150490,150492],{"class":180,"line":740},[178,150489,148617],{"class":319},[178,150491,330],{"class":699},[178,150493,148622],{"class":319},[178,150495,150496],{"class":180,"line":746},[178,150497,149206],{"class":319},[178,150499,150500],{"class":180,"line":752},[178,150501,722],{"emptyLinePlaceholder":721},[178,150503,150504,150506,150509,150511],{"class":180,"line":757},[178,150505,1474],{"class":699},[178,150507,150508],{"class":319}," city, records ",[178,150510,994],{"class":699},[178,150512,150513],{"class":319}," data.items():\n",[178,150515,150516,150519,150521,150523,150525,150527,150529,150531,150533],{"class":180,"line":763},[178,150517,150518],{"class":319},"    values ",[178,150520,330],{"class":699},[178,150522,150088],{"class":319},[178,150524,150333],{"class":188},[178,150526,6214],{"class":319},[178,150528,1474],{"class":699},[178,150530,149574],{"class":319},[178,150532,994],{"class":699},[178,150534,150535],{"class":319}," records]\n",[178,150537,150538,150541,150543,150545,150547],{"class":180,"line":769},[178,150539,150540],{"class":319},"    line.add_yaxis(city, values, ",[178,150542,149110],{"class":6985},[178,150544,330],{"class":699},[178,150546,33212],{"class":195},[178,150548,863],{"class":319},[178,150550,150551],{"class":180,"line":774},[178,150552,722],{"emptyLinePlaceholder":721},[178,150554,150555],{"class":180,"line":780},[178,150556,148833],{"class":319},[178,150558,150559,150561,150563,150565,150567,150569,150572],{"class":180,"line":786},[178,150560,148838],{"class":6985},[178,150562,330],{"class":699},[178,150564,148843],{"class":319},[178,150566,53137],{"class":6985},[178,150568,330],{"class":699},[178,150570,150571],{"class":188},"\"多地区趋势图\"",[178,150573,39779],{"class":319},[178,150575,150576,150578,150580,150582,150584,150586,150588],{"class":180,"line":792},[178,150577,148894],{"class":6985},[178,150579,330],{"class":699},[178,150581,148899],{"class":319},[178,150583,148902],{"class":6985},[178,150585,330],{"class":699},[178,150587,148907],{"class":188},[178,150589,39779],{"class":319},[178,150591,150592],{"class":180,"line":798},[178,150593,863],{"class":319},[178,150595,150596,150598,150601],{"class":180,"line":804},[178,150597,148689],{"class":319},[178,150599,150600],{"class":188},"\"trend.html\"",[178,150602,863],{"class":319},[19,150604,150605],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150607,150609],{"id":150608},"_1012-易错点","10.12 易错点",[26,150611,150612,150618,150624,150634,150640],{},[29,150613,150614,150617],{},[70,150615,150616],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[29,150619,150620,150623],{},[70,150621,150622],{},"render()"," 生成的是 HTML，不是图片。",[29,150625,150626,150627,150630,150631,297],{},"JSON 字符串用 ",[70,150628,150629],{},"json.loads()","，JSON 文件用 ",[70,150632,150633],{},"json.load()",[29,150635,150636,150637,297],{},"中文 JSON 保存时加 ",[70,150638,150639],{},"ensure_ascii=False",[29,150641,150642],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150644,150646],{"id":150645},"_1013-本章练习","10.13 本章练习",[26,150648,150649,150652,150655,150658,150661],{},[29,150650,150651],{},"安装 pyecharts 并生成第一个折线图。",[29,150653,150654],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[29,150656,150657],{},"绘制两条折线，对比线上和线下销售额。",[29,150659,150660],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[29,150662,150663],{},"对含有空值的销售数据进行清洗后再绘图。",[1853,150665,150666],{},"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":160,"searchDepth":263,"depth":263,"links":150668},[150669,150670,150671,150672,150673,150674,150675,150676,150677,150678,150679,150680,150681],{"id":148285,"depth":263,"text":148286},{"id":148360,"depth":263,"text":148361},{"id":148539,"depth":263,"text":148540},{"id":148590,"depth":263,"text":148591},{"id":148724,"depth":263,"text":148725},{"id":149000,"depth":263,"text":149001},{"id":149126,"depth":263,"text":149127},{"id":149337,"depth":263,"text":149338},{"id":149708,"depth":263,"text":149709},{"id":149920,"depth":263,"text":149921},{"id":150292,"depth":263,"text":150293},{"id":150608,"depth":263,"text":150609},{"id":150645,"depth":263,"text":150646},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148277,"description":25135},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150688,"title":150689,"body":150690,"description":25135,"extension":1880,"meta":153050,"navigation":721,"path":153051,"seo":153052,"stem":153053,"__hash__":153054},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150691,"toc":153027},[150692,150695,150699,150702,150705,150781,150784,150875,150878,150882,150885,150929,150942,150946,150949,151016,151019,151023,151026,151110,151118,151122,151127,151268,151271,151282,151288,151294,151408,151412,151415,151418,151671,151674,151678,151681,151785,151788,151792,151943,151947,151954,152067,152071,152074,152180,152183,152187,152190,152221,152224,152329,152332,152336,152340,152350,152418,152422,152429,152493,152496,152500,152506,152602,152611,152615,152939,152948,152952,152980,152984,153024],[10,150693,150689],{"id":150694},"_11-面向对象基础",[14,150696,150698],{"id":150697},"_111-什么是面向对象","11.1 什么是面向对象",[19,150700,150701],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,150703,150704],{},"面向过程：",[154,150706,150708],{"className":690,"code":150707,"language":692,"meta":160,"style":160},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[70,150709,150710,150719,150727,150731,150741,150772,150776],{"__ignoreMap":160},[178,150711,150712,150714,150716],{"class":180,"line":181},[178,150713,147901],{"class":319},[178,150715,330],{"class":699},[178,150717,150718],{"class":188}," \"小明\"\n",[178,150720,150721,150723,150725],{"class":180,"line":263},[178,150722,147911],{"class":319},[178,150724,330],{"class":699},[178,150726,147916],{"class":195},[178,150728,150729],{"class":180,"line":274},[178,150730,722],{"emptyLinePlaceholder":721},[178,150732,150733,150735,150738],{"class":180,"line":354},[178,150734,835],{"class":699},[178,150736,150737],{"class":184}," introduce",[178,150739,150740],{"class":319},"(name, age):\n",[178,150742,150743,150745,150747,150749,150752,150754,150756,150758,150761,150763,150765,150767,150770],{"class":180,"line":364},[178,150744,1022],{"class":195},[178,150746,944],{"class":319},[178,150748,2002],{"class":699},[178,150750,150751],{"class":188},"\"我叫",[178,150753,2836],{"class":195},[178,150755,81529],{"class":319},[178,150757,2885],{"class":195},[178,150759,150760],{"class":188},"，今年",[178,150762,2836],{"class":195},[178,150764,71941],{"class":319},[178,150766,2885],{"class":195},[178,150768,150769],{"class":188},"岁\"",[178,150771,863],{"class":319},[178,150773,150774],{"class":180,"line":740},[178,150775,722],{"emptyLinePlaceholder":721},[178,150777,150778],{"class":180,"line":746},[178,150779,150780],{"class":319},"introduce(name, age)\n",[19,150782,150783],{},"面向对象：",[154,150785,150787],{"className":690,"code":150786,"language":692,"meta":160,"style":160},"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",[70,150788,150789,150797,150805,150834,150838,150842,150852,150861,150870],{"__ignoreMap":160},[178,150790,150791,150793,150795],{"class":180,"line":181},[178,150792,16453],{"class":699},[178,150794,9667],{"class":184},[178,150796,847],{"class":319},[178,150798,150799,150801,150803],{"class":180,"line":263},[178,150800,32542],{"class":699},[178,150802,150737],{"class":184},[178,150804,32548],{"class":319},[178,150806,150807,150809,150811,150813,150815,150818,150820,150822,150824,150826,150828,150830,150832],{"class":180,"line":274},[178,150808,34183],{"class":195},[178,150810,944],{"class":319},[178,150812,2002],{"class":699},[178,150814,150751],{"class":188},[178,150816,150817],{"class":195},"{self",[178,150819,82020],{"class":319},[178,150821,2885],{"class":195},[178,150823,150760],{"class":188},[178,150825,150817],{"class":195},[178,150827,82032],{"class":319},[178,150829,2885],{"class":195},[178,150831,150769],{"class":188},[178,150833,863],{"class":319},[178,150835,150836],{"class":180,"line":354},[178,150837,722],{"emptyLinePlaceholder":721},[178,150839,150840],{"class":180,"line":364},[178,150841,722],{"emptyLinePlaceholder":721},[178,150843,150844,150847,150849],{"class":180,"line":740},[178,150845,150846],{"class":319},"student ",[178,150848,330],{"class":699},[178,150850,150851],{"class":319}," Student()\n",[178,150853,150854,150857,150859],{"class":180,"line":746},[178,150855,150856],{"class":319},"student.name ",[178,150858,330],{"class":699},[178,150860,150718],{"class":188},[178,150862,150863,150866,150868],{"class":180,"line":752},[178,150864,150865],{"class":319},"student.age ",[178,150867,330],{"class":699},[178,150869,147916],{"class":195},[178,150871,150872],{"class":180,"line":757},[178,150873,150874],{"class":319},"student.introduce()\n",[19,150876,150877],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,150879,150881],{"id":150880},"_112-类和对象","11.2 类和对象",[19,150883,150884],{},"类是模板，对象是根据模板创建出来的具体实例。",[154,150886,150888],{"className":690,"code":150887,"language":692,"meta":160,"style":160},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[70,150889,150890,150898,150903,150907,150911,150920],{"__ignoreMap":160},[178,150891,150892,150894,150896],{"class":180,"line":181},[178,150893,16453],{"class":699},[178,150895,9667],{"class":184},[178,150897,847],{"class":319},[178,150899,150900],{"class":180,"line":263},[178,150901,150902],{"class":699},"    pass\n",[178,150904,150905],{"class":180,"line":274},[178,150906,722],{"emptyLinePlaceholder":721},[178,150908,150909],{"class":180,"line":354},[178,150910,722],{"emptyLinePlaceholder":721},[178,150912,150913,150916,150918],{"class":180,"line":364},[178,150914,150915],{"class":319},"student1 ",[178,150917,330],{"class":699},[178,150919,150851],{"class":319},[178,150921,150922,150925,150927],{"class":180,"line":740},[178,150923,150924],{"class":319},"student2 ",[178,150926,330],{"class":699},[178,150928,150851],{"class":319},[19,150930,150931,150934,150935,404,150938,150941],{},[70,150932,150933],{},"Student"," 是类，",[70,150936,150937],{},"student1",[70,150939,150940],{},"student2"," 是对象。",[14,150943,150945],{"id":150944},"_113-属性","11.3 属性",[19,150947,150948],{},"属性是对象保存的数据。",[154,150950,150952],{"className":690,"code":150951,"language":692,"meta":160,"style":160},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[70,150953,150954,150962,150966,150970,150974,150982,150990,150998,151002,151009],{"__ignoreMap":160},[178,150955,150956,150958,150960],{"class":180,"line":181},[178,150957,16453],{"class":699},[178,150959,9667],{"class":184},[178,150961,847],{"class":319},[178,150963,150964],{"class":180,"line":263},[178,150965,150902],{"class":699},[178,150967,150968],{"class":180,"line":274},[178,150969,722],{"emptyLinePlaceholder":721},[178,150971,150972],{"class":180,"line":354},[178,150973,722],{"emptyLinePlaceholder":721},[178,150975,150976,150978,150980],{"class":180,"line":364},[178,150977,150846],{"class":319},[178,150979,330],{"class":699},[178,150981,150851],{"class":319},[178,150983,150984,150986,150988],{"class":180,"line":740},[178,150985,150856],{"class":319},[178,150987,330],{"class":699},[178,150989,150718],{"class":188},[178,150991,150992,150994,150996],{"class":180,"line":746},[178,150993,150865],{"class":319},[178,150995,330],{"class":699},[178,150997,147916],{"class":195},[178,150999,151000],{"class":180,"line":752},[178,151001,722],{"emptyLinePlaceholder":721},[178,151003,151004,151006],{"class":180,"line":757},[178,151005,1504],{"class":195},[178,151007,151008],{"class":319},"(student.name)\n",[178,151010,151011,151013],{"class":180,"line":763},[178,151012,1504],{"class":195},[178,151014,151015],{"class":319},"(student.age)\n",[19,151017,151018],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,151020,151022],{"id":151021},"_114-方法","11.4 方法",[19,151024,151025],{},"类中的函数叫方法。",[154,151027,151028],{"className":690,"code":150786,"language":692,"meta":160,"style":160},[70,151029,151030,151038,151046,151074,151078,151082,151090,151098,151106],{"__ignoreMap":160},[178,151031,151032,151034,151036],{"class":180,"line":181},[178,151033,16453],{"class":699},[178,151035,9667],{"class":184},[178,151037,847],{"class":319},[178,151039,151040,151042,151044],{"class":180,"line":263},[178,151041,32542],{"class":699},[178,151043,150737],{"class":184},[178,151045,32548],{"class":319},[178,151047,151048,151050,151052,151054,151056,151058,151060,151062,151064,151066,151068,151070,151072],{"class":180,"line":274},[178,151049,34183],{"class":195},[178,151051,944],{"class":319},[178,151053,2002],{"class":699},[178,151055,150751],{"class":188},[178,151057,150817],{"class":195},[178,151059,82020],{"class":319},[178,151061,2885],{"class":195},[178,151063,150760],{"class":188},[178,151065,150817],{"class":195},[178,151067,82032],{"class":319},[178,151069,2885],{"class":195},[178,151071,150769],{"class":188},[178,151073,863],{"class":319},[178,151075,151076],{"class":180,"line":354},[178,151077,722],{"emptyLinePlaceholder":721},[178,151079,151080],{"class":180,"line":364},[178,151081,722],{"emptyLinePlaceholder":721},[178,151083,151084,151086,151088],{"class":180,"line":740},[178,151085,150846],{"class":319},[178,151087,330],{"class":699},[178,151089,150851],{"class":319},[178,151091,151092,151094,151096],{"class":180,"line":746},[178,151093,150856],{"class":319},[178,151095,330],{"class":699},[178,151097,150718],{"class":188},[178,151099,151100,151102,151104],{"class":180,"line":752},[178,151101,150865],{"class":319},[178,151103,330],{"class":699},[178,151105,147916],{"class":195},[178,151107,151108],{"class":180,"line":757},[178,151109,150874],{"class":319},[19,151111,151112,151114,151115,151117],{},[70,151113,32564],{}," 表示当前对象。调用方法时不需要手动传入 ",[70,151116,32564],{},"，Python 会自动传。",[14,151119,151121],{"id":151120},"_115-构造方法__init__","11.5 构造方法__init__",[19,151123,151124,151126],{},[70,151125,32570],{}," 在对象创建时自动执行，用于初始化属性。",[154,151128,151130],{"className":690,"code":151129,"language":692,"meta":160,"style":160},"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",[70,151131,151132,151140,151149,151161,151173,151184,151188,151196,151234,151238,151242,151264],{"__ignoreMap":160},[178,151133,151134,151136,151138],{"class":180,"line":181},[178,151135,16453],{"class":699},[178,151137,9667],{"class":184},[178,151139,847],{"class":319},[178,151141,151142,151144,151146],{"class":180,"line":263},[178,151143,32542],{"class":699},[178,151145,32545],{"class":195},[178,151147,151148],{"class":319},"(self, name, age, score):\n",[178,151150,151151,151153,151156,151158],{"class":180,"line":274},[178,151152,32586],{"class":195},[178,151154,151155],{"class":319},".name ",[178,151157,330],{"class":699},[178,151159,151160],{"class":319}," name\n",[178,151162,151163,151165,151168,151170],{"class":180,"line":354},[178,151164,32586],{"class":195},[178,151166,151167],{"class":319},".age ",[178,151169,330],{"class":699},[178,151171,151172],{"class":319}," age\n",[178,151174,151175,151177,151180,151182],{"class":180,"line":364},[178,151176,32586],{"class":195},[178,151178,151179],{"class":319},".score ",[178,151181,330],{"class":699},[178,151183,3385],{"class":319},[178,151185,151186],{"class":180,"line":740},[178,151187,722],{"emptyLinePlaceholder":721},[178,151189,151190,151192,151194],{"class":180,"line":746},[178,151191,32542],{"class":699},[178,151193,150737],{"class":184},[178,151195,32548],{"class":319},[178,151197,151198,151200,151202,151204,151206,151208,151210,151212,151214,151216,151218,151220,151223,151225,151228,151230,151232],{"class":180,"line":752},[178,151199,34183],{"class":195},[178,151201,944],{"class":319},[178,151203,2002],{"class":699},[178,151205,150751],{"class":188},[178,151207,150817],{"class":195},[178,151209,82020],{"class":319},[178,151211,2885],{"class":195},[178,151213,150760],{"class":188},[178,151215,150817],{"class":195},[178,151217,82032],{"class":319},[178,151219,2885],{"class":195},[178,151221,151222],{"class":188},"岁，成绩",[178,151224,150817],{"class":195},[178,151226,151227],{"class":319},".score",[178,151229,2885],{"class":195},[178,151231,2191],{"class":188},[178,151233,863],{"class":319},[178,151235,151236],{"class":180,"line":757},[178,151237,722],{"emptyLinePlaceholder":721},[178,151239,151240],{"class":180,"line":763},[178,151241,722],{"emptyLinePlaceholder":721},[178,151243,151244,151246,151248,151251,151254,151256,151258,151260,151262],{"class":180,"line":769},[178,151245,150846],{"class":319},[178,151247,330],{"class":699},[178,151249,151250],{"class":319}," Student(",[178,151252,151253],{"class":188},"\"小明\"",[178,151255,14196],{"class":319},[178,151257,2590],{"class":195},[178,151259,14196],{"class":319},[178,151261,2928],{"class":195},[178,151263,863],{"class":319},[178,151265,151266],{"class":180,"line":774},[178,151267,150874],{"class":319},[19,151269,151270],{},"构造方法的好处：",[26,151272,151273,151276,151279],{},[29,151274,151275],{},"创建对象时必须提供必要数据。",[29,151277,151278],{},"属性初始化集中，不容易漏。",[29,151280,151281],{},"对象状态更完整。",[14,151283,151285,151286],{"id":151284},"_116-str","11.6 ",[2093,151287,3109],{},[19,151289,151290,151291,297],{},"直接打印对象时，默认输出不直观。可以定义 ",[70,151292,151293],{},"__str__",[154,151295,151297],{"className":690,"code":151296,"language":692,"meta":160,"style":160},"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",[70,151298,151299,151307,151316,151326,151336,151340,151349,151377,151381,151385,151401],{"__ignoreMap":160},[178,151300,151301,151303,151305],{"class":180,"line":181},[178,151302,16453],{"class":699},[178,151304,9667],{"class":184},[178,151306,847],{"class":319},[178,151308,151309,151311,151313],{"class":180,"line":263},[178,151310,32542],{"class":699},[178,151312,32545],{"class":195},[178,151314,151315],{"class":319},"(self, name, age):\n",[178,151317,151318,151320,151322,151324],{"class":180,"line":274},[178,151319,32586],{"class":195},[178,151321,151155],{"class":319},[178,151323,330],{"class":699},[178,151325,151160],{"class":319},[178,151327,151328,151330,151332,151334],{"class":180,"line":354},[178,151329,32586],{"class":195},[178,151331,151167],{"class":319},[178,151333,330],{"class":699},[178,151335,151172],{"class":319},[178,151337,151338],{"class":180,"line":364},[178,151339,722],{"emptyLinePlaceholder":721},[178,151341,151342,151344,151347],{"class":180,"line":740},[178,151343,32542],{"class":699},[178,151345,151346],{"class":195}," __str__",[178,151348,32548],{"class":319},[178,151350,151351,151353,151356,151359,151361,151363,151365,151368,151370,151372,151374],{"class":180,"line":746},[178,151352,16511],{"class":699},[178,151354,151355],{"class":699}," f",[178,151357,151358],{"class":188},"\"Student(name=",[178,151360,150817],{"class":195},[178,151362,82020],{"class":319},[178,151364,2885],{"class":195},[178,151366,151367],{"class":188},", age=",[178,151369,150817],{"class":195},[178,151371,82032],{"class":319},[178,151373,2885],{"class":195},[178,151375,151376],{"class":188},")\"\n",[178,151378,151379],{"class":180,"line":752},[178,151380,722],{"emptyLinePlaceholder":721},[178,151382,151383],{"class":180,"line":757},[178,151384,722],{"emptyLinePlaceholder":721},[178,151386,151387,151389,151391,151393,151395,151397,151399],{"class":180,"line":763},[178,151388,150846],{"class":319},[178,151390,330],{"class":699},[178,151392,151250],{"class":319},[178,151394,151253],{"class":188},[178,151396,14196],{"class":319},[178,151398,2590],{"class":195},[178,151400,863],{"class":319},[178,151402,151403,151405],{"class":180,"line":769},[178,151404,1504],{"class":195},[178,151406,151407],{"class":319},"(student)\n",[14,151409,151411],{"id":151410},"_117-封装","11.7 封装",[19,151413,151414],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,151416,151417],{},"Python 中以双下划线开头的属性通常视为私有属性。",[154,151419,151421],{"className":690,"code":151420,"language":692,"meta":160,"style":160},"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",[70,151422,151423,151432,151441,151453,151465,151469,151478,151487,151491,151501,151514,151525,151530,151541,151545,151554,151566,151577,151581,151594,151605,151609,151620,151624,151628,151646,151655,151664],{"__ignoreMap":160},[178,151424,151425,151427,151430],{"class":180,"line":181},[178,151426,16453],{"class":699},[178,151428,151429],{"class":184}," Account",[178,151431,847],{"class":319},[178,151433,151434,151436,151438],{"class":180,"line":263},[178,151435,32542],{"class":699},[178,151437,32545],{"class":195},[178,151439,151440],{"class":319},"(self, owner, balance):\n",[178,151442,151443,151445,151448,151450],{"class":180,"line":274},[178,151444,32586],{"class":195},[178,151446,151447],{"class":319},".owner ",[178,151449,330],{"class":699},[178,151451,151452],{"class":319}," owner\n",[178,151454,151455,151457,151460,151462],{"class":180,"line":354},[178,151456,32586],{"class":195},[178,151458,151459],{"class":319},".__balance ",[178,151461,330],{"class":699},[178,151463,151464],{"class":319}," balance\n",[178,151466,151467],{"class":180,"line":364},[178,151468,722],{"emptyLinePlaceholder":721},[178,151470,151471,151473,151476],{"class":180,"line":740},[178,151472,32542],{"class":699},[178,151474,151475],{"class":184}," get_balance",[178,151477,32548],{"class":319},[178,151479,151480,151482,151484],{"class":180,"line":746},[178,151481,16511],{"class":699},[178,151483,40605],{"class":195},[178,151485,151486],{"class":319},".__balance\n",[178,151488,151489],{"class":180,"line":752},[178,151490,722],{"emptyLinePlaceholder":721},[178,151492,151493,151495,151498],{"class":180,"line":757},[178,151494,32542],{"class":699},[178,151496,151497],{"class":184}," deposit",[178,151499,151500],{"class":319},"(self, money):\n",[178,151502,151503,151505,151508,151510,151512],{"class":180,"line":763},[178,151504,4280],{"class":699},[178,151506,151507],{"class":319}," money ",[178,151509,3394],{"class":699},[178,151511,930],{"class":195},[178,151513,847],{"class":319},[178,151515,151516,151518,151520,151523],{"class":180,"line":769},[178,151517,36382],{"class":195},[178,151519,944],{"class":319},[178,151521,151522],{"class":188},"\"存款金额必须大于0\"",[178,151524,863],{"class":319},[178,151526,151527],{"class":180,"line":774},[178,151528,151529],{"class":699},"            return\n",[178,151531,151532,151534,151536,151538],{"class":180,"line":780},[178,151533,32586],{"class":195},[178,151535,151459],{"class":319},[178,151537,11238],{"class":699},[178,151539,151540],{"class":319}," money\n",[178,151542,151543],{"class":180,"line":786},[178,151544,722],{"emptyLinePlaceholder":721},[178,151546,151547,151549,151552],{"class":180,"line":792},[178,151548,32542],{"class":699},[178,151550,151551],{"class":184}," withdraw",[178,151553,151500],{"class":319},[178,151555,151556,151558,151560,151562,151564],{"class":180,"line":798},[178,151557,4280],{"class":699},[178,151559,151507],{"class":319},[178,151561,3394],{"class":699},[178,151563,930],{"class":195},[178,151565,847],{"class":319},[178,151567,151568,151570,151572,151575],{"class":180,"line":804},[178,151569,36382],{"class":195},[178,151571,944],{"class":319},[178,151573,151574],{"class":188},"\"取款金额必须大于0\"",[178,151576,863],{"class":319},[178,151578,151579],{"class":180,"line":810},[178,151580,151529],{"class":699},[178,151582,151583,151585,151587,151589,151591],{"class":180,"line":816},[178,151584,4280],{"class":699},[178,151586,151507],{"class":319},[178,151588,2899],{"class":699},[178,151590,40605],{"class":195},[178,151592,151593],{"class":319},".__balance:\n",[178,151595,151596,151598,151600,151603],{"class":180,"line":822},[178,151597,36382],{"class":195},[178,151599,944],{"class":319},[178,151601,151602],{"class":188},"\"余额不足\"",[178,151604,863],{"class":319},[178,151606,151607],{"class":180,"line":827},[178,151608,151529],{"class":699},[178,151610,151611,151613,151615,151618],{"class":180,"line":832},[178,151612,32586],{"class":195},[178,151614,151459],{"class":319},[178,151616,151617],{"class":699},"-=",[178,151619,151540],{"class":319},[178,151621,151622],{"class":180,"line":850},[178,151623,722],{"emptyLinePlaceholder":721},[178,151625,151626],{"class":180,"line":866},[178,151627,722],{"emptyLinePlaceholder":721},[178,151629,151630,151633,151635,151638,151640,151642,151644],{"class":180,"line":877},[178,151631,151632],{"class":319},"account ",[178,151634,330],{"class":699},[178,151636,151637],{"class":319}," Account(",[178,151639,151253],{"class":188},[178,151641,14196],{"class":319},[178,151643,8179],{"class":195},[178,151645,863],{"class":319},[178,151647,151648,151651,151653],{"class":180,"line":882},[178,151649,151650],{"class":319},"account.deposit(",[178,151652,1002],{"class":195},[178,151654,863],{"class":319},[178,151656,151657,151660,151662],{"class":180,"line":898},[178,151658,151659],{"class":319},"account.withdraw(",[178,151661,2251],{"class":195},[178,151663,863],{"class":319},[178,151665,151666,151668],{"class":180,"line":914},[178,151667,1504],{"class":195},[178,151669,151670],{"class":319},"(account.get_balance())\n",[19,151672,151673],{},"封装的意义是避免外部随意修改内部状态。",[14,151675,151677],{"id":151676},"_118-继承","11.8 继承",[19,151679,151680],{},"继承可以让子类复用父类的属性和方法。",[154,151682,151684],{"className":690,"code":151683,"language":692,"meta":160,"style":160},"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",[70,151685,151686,151695,151704,151715,151719,151723,151737,151746,151757,151761,151765,151775,151780],{"__ignoreMap":160},[178,151687,151688,151690,151693],{"class":180,"line":181},[178,151689,16453],{"class":699},[178,151691,151692],{"class":184}," Animal",[178,151694,847],{"class":319},[178,151696,151697,151699,151702],{"class":180,"line":263},[178,151698,32542],{"class":699},[178,151700,151701],{"class":184}," eat",[178,151703,32548],{"class":319},[178,151705,151706,151708,151710,151713],{"class":180,"line":274},[178,151707,34183],{"class":195},[178,151709,944],{"class":319},[178,151711,151712],{"class":188},"\"吃东西\"",[178,151714,863],{"class":319},[178,151716,151717],{"class":180,"line":354},[178,151718,722],{"emptyLinePlaceholder":721},[178,151720,151721],{"class":180,"line":364},[178,151722,722],{"emptyLinePlaceholder":721},[178,151724,151725,151727,151730,151732,151735],{"class":180,"line":740},[178,151726,16453],{"class":699},[178,151728,151729],{"class":184}," Dog",[178,151731,944],{"class":319},[178,151733,151734],{"class":184},"Animal",[178,151736,1005],{"class":319},[178,151738,151739,151741,151744],{"class":180,"line":746},[178,151740,32542],{"class":699},[178,151742,151743],{"class":184}," bark",[178,151745,32548],{"class":319},[178,151747,151748,151750,151752,151755],{"class":180,"line":752},[178,151749,34183],{"class":195},[178,151751,944],{"class":319},[178,151753,151754],{"class":188},"\"汪汪\"",[178,151756,863],{"class":319},[178,151758,151759],{"class":180,"line":757},[178,151760,722],{"emptyLinePlaceholder":721},[178,151762,151763],{"class":180,"line":763},[178,151764,722],{"emptyLinePlaceholder":721},[178,151766,151767,151770,151772],{"class":180,"line":769},[178,151768,151769],{"class":319},"dog ",[178,151771,330],{"class":699},[178,151773,151774],{"class":319}," Dog()\n",[178,151776,151777],{"class":180,"line":774},[178,151778,151779],{"class":319},"dog.eat()\n",[178,151781,151782],{"class":180,"line":780},[178,151783,151784],{"class":319},"dog.bark()\n",[19,151786,151787],{},"子类可以扩展新方法，也可以重写父类方法。",[14,151789,151791],{"id":151790},"_119-方法重写","11.9 方法重写",[154,151793,151795],{"className":690,"code":151794,"language":692,"meta":160,"style":160},"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",[70,151796,151797,151805,151814,151825,151829,151833,151845,151853,151863,151867,151871,151884,151892,151903,151907,151911,151919,151929,151933,151938],{"__ignoreMap":160},[178,151798,151799,151801,151803],{"class":180,"line":181},[178,151800,16453],{"class":699},[178,151802,151692],{"class":184},[178,151804,847],{"class":319},[178,151806,151807,151809,151812],{"class":180,"line":263},[178,151808,32542],{"class":699},[178,151810,151811],{"class":184}," speak",[178,151813,32548],{"class":319},[178,151815,151816,151818,151820,151823],{"class":180,"line":274},[178,151817,34183],{"class":195},[178,151819,944],{"class":319},[178,151821,151822],{"class":188},"\"动物叫\"",[178,151824,863],{"class":319},[178,151826,151827],{"class":180,"line":354},[178,151828,722],{"emptyLinePlaceholder":721},[178,151830,151831],{"class":180,"line":364},[178,151832,722],{"emptyLinePlaceholder":721},[178,151834,151835,151837,151839,151841,151843],{"class":180,"line":740},[178,151836,16453],{"class":699},[178,151838,151729],{"class":184},[178,151840,944],{"class":319},[178,151842,151734],{"class":184},[178,151844,1005],{"class":319},[178,151846,151847,151849,151851],{"class":180,"line":746},[178,151848,32542],{"class":699},[178,151850,151811],{"class":184},[178,151852,32548],{"class":319},[178,151854,151855,151857,151859,151861],{"class":180,"line":752},[178,151856,34183],{"class":195},[178,151858,944],{"class":319},[178,151860,151754],{"class":188},[178,151862,863],{"class":319},[178,151864,151865],{"class":180,"line":757},[178,151866,722],{"emptyLinePlaceholder":721},[178,151868,151869],{"class":180,"line":763},[178,151870,722],{"emptyLinePlaceholder":721},[178,151872,151873,151875,151878,151880,151882],{"class":180,"line":769},[178,151874,16453],{"class":699},[178,151876,151877],{"class":184}," Cat",[178,151879,944],{"class":319},[178,151881,151734],{"class":184},[178,151883,1005],{"class":319},[178,151885,151886,151888,151890],{"class":180,"line":774},[178,151887,32542],{"class":699},[178,151889,151811],{"class":184},[178,151891,32548],{"class":319},[178,151893,151894,151896,151898,151901],{"class":180,"line":780},[178,151895,34183],{"class":195},[178,151897,944],{"class":319},[178,151899,151900],{"class":188},"\"喵喵\"",[178,151902,863],{"class":319},[178,151904,151905],{"class":180,"line":786},[178,151906,722],{"emptyLinePlaceholder":721},[178,151908,151909],{"class":180,"line":792},[178,151910,722],{"emptyLinePlaceholder":721},[178,151912,151913,151915,151917],{"class":180,"line":798},[178,151914,151769],{"class":319},[178,151916,330],{"class":699},[178,151918,151774],{"class":319},[178,151920,151921,151924,151926],{"class":180,"line":804},[178,151922,151923],{"class":319},"cat ",[178,151925,330],{"class":699},[178,151927,151928],{"class":319}," Cat()\n",[178,151930,151931],{"class":180,"line":810},[178,151932,722],{"emptyLinePlaceholder":721},[178,151934,151935],{"class":180,"line":816},[178,151936,151937],{"class":319},"dog.speak()\n",[178,151939,151940],{"class":180,"line":822},[178,151941,151942],{"class":319},"cat.speak()\n",[14,151944,151946],{"id":151945},"_1110-super","11.10 super",[19,151948,151949,151950,151953],{},"子类可以通过 ",[70,151951,151952],{},"super()"," 调用父类方法。",[154,151955,151957],{"className":690,"code":151956,"language":692,"meta":160,"style":160},"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",[70,151958,151959,151967,151976,151986,151990,151994,152006,152015,152026,152036,152040,152044,152060],{"__ignoreMap":160},[178,151960,151961,151963,151965],{"class":180,"line":181},[178,151962,16453],{"class":699},[178,151964,17327],{"class":184},[178,151966,847],{"class":319},[178,151968,151969,151971,151973],{"class":180,"line":263},[178,151970,32542],{"class":699},[178,151972,32545],{"class":195},[178,151974,151975],{"class":319},"(self, name):\n",[178,151977,151978,151980,151982,151984],{"class":180,"line":274},[178,151979,32586],{"class":195},[178,151981,151155],{"class":319},[178,151983,330],{"class":699},[178,151985,151160],{"class":319},[178,151987,151988],{"class":180,"line":354},[178,151989,722],{"emptyLinePlaceholder":721},[178,151991,151992],{"class":180,"line":364},[178,151993,722],{"emptyLinePlaceholder":721},[178,151995,151996,151998,152000,152002,152004],{"class":180,"line":740},[178,151997,16453],{"class":699},[178,151999,9667],{"class":184},[178,152001,944],{"class":319},[178,152003,20804],{"class":184},[178,152005,1005],{"class":319},[178,152007,152008,152010,152012],{"class":180,"line":746},[178,152009,32542],{"class":699},[178,152011,32545],{"class":195},[178,152013,152014],{"class":319},"(self, name, score):\n",[178,152016,152017,152019,152021,152023],{"class":180,"line":752},[178,152018,32558],{"class":195},[178,152020,19019],{"class":319},[178,152022,32570],{"class":195},[178,152024,152025],{"class":319},"(name)\n",[178,152027,152028,152030,152032,152034],{"class":180,"line":757},[178,152029,32586],{"class":195},[178,152031,151179],{"class":319},[178,152033,330],{"class":699},[178,152035,3385],{"class":319},[178,152037,152038],{"class":180,"line":763},[178,152039,722],{"emptyLinePlaceholder":721},[178,152041,152042],{"class":180,"line":769},[178,152043,722],{"emptyLinePlaceholder":721},[178,152045,152046,152048,152050,152052,152054,152056,152058],{"class":180,"line":774},[178,152047,150846],{"class":319},[178,152049,330],{"class":699},[178,152051,151250],{"class":319},[178,152053,151253],{"class":188},[178,152055,14196],{"class":319},[178,152057,2928],{"class":195},[178,152059,863],{"class":319},[178,152061,152062,152064],{"class":180,"line":780},[178,152063,1504],{"class":195},[178,152065,152066],{"class":319},"(student.name, student.score)\n",[14,152068,152070],{"id":152069},"_1111-多态","11.11 多态",[19,152072,152073],{},"多态指不同对象响应同一个方法，表现出不同结果。",[154,152075,152077],{"className":690,"code":152076,"language":692,"meta":160,"style":160},"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",[70,152078,152079,152087,152095,152105,152109,152113,152121,152129,152139,152143,152147,152157,152162,152166,152170,152175],{"__ignoreMap":160},[178,152080,152081,152083,152085],{"class":180,"line":181},[178,152082,16453],{"class":699},[178,152084,151729],{"class":184},[178,152086,847],{"class":319},[178,152088,152089,152091,152093],{"class":180,"line":263},[178,152090,32542],{"class":699},[178,152092,151811],{"class":184},[178,152094,32548],{"class":319},[178,152096,152097,152099,152101,152103],{"class":180,"line":274},[178,152098,34183],{"class":195},[178,152100,944],{"class":319},[178,152102,151754],{"class":188},[178,152104,863],{"class":319},[178,152106,152107],{"class":180,"line":354},[178,152108,722],{"emptyLinePlaceholder":721},[178,152110,152111],{"class":180,"line":364},[178,152112,722],{"emptyLinePlaceholder":721},[178,152114,152115,152117,152119],{"class":180,"line":740},[178,152116,16453],{"class":699},[178,152118,151877],{"class":184},[178,152120,847],{"class":319},[178,152122,152123,152125,152127],{"class":180,"line":746},[178,152124,32542],{"class":699},[178,152126,151811],{"class":184},[178,152128,32548],{"class":319},[178,152130,152131,152133,152135,152137],{"class":180,"line":752},[178,152132,34183],{"class":195},[178,152134,944],{"class":319},[178,152136,151900],{"class":188},[178,152138,863],{"class":319},[178,152140,152141],{"class":180,"line":757},[178,152142,722],{"emptyLinePlaceholder":721},[178,152144,152145],{"class":180,"line":763},[178,152146,722],{"emptyLinePlaceholder":721},[178,152148,152149,152151,152154],{"class":180,"line":769},[178,152150,835],{"class":699},[178,152152,152153],{"class":184}," make_sound",[178,152155,152156],{"class":319},"(animal):\n",[178,152158,152159],{"class":180,"line":774},[178,152160,152161],{"class":319},"    animal.speak()\n",[178,152163,152164],{"class":180,"line":780},[178,152165,722],{"emptyLinePlaceholder":721},[178,152167,152168],{"class":180,"line":786},[178,152169,722],{"emptyLinePlaceholder":721},[178,152171,152172],{"class":180,"line":792},[178,152173,152174],{"class":319},"make_sound(Dog())\n",[178,152176,152177],{"class":180,"line":798},[178,152178,152179],{"class":319},"make_sound(Cat())\n",[19,152181,152182],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152184,152186],{"id":152185},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,152188,152189],{},"实例属性属于对象：",[154,152191,152193],{"className":690,"code":152192,"language":692,"meta":160,"style":160},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[70,152194,152195,152203,152211],{"__ignoreMap":160},[178,152196,152197,152199,152201],{"class":180,"line":181},[178,152198,16453],{"class":699},[178,152200,9667],{"class":184},[178,152202,847],{"class":319},[178,152204,152205,152207,152209],{"class":180,"line":263},[178,152206,32542],{"class":699},[178,152208,32545],{"class":195},[178,152210,151975],{"class":319},[178,152212,152213,152215,152217,152219],{"class":180,"line":274},[178,152214,32586],{"class":195},[178,152216,151155],{"class":319},[178,152218,330],{"class":699},[178,152220,151160],{"class":319},[19,152222,152223],{},"类属性属于类，所有对象共享：",[154,152225,152227],{"className":690,"code":152226,"language":692,"meta":160,"style":160},"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",[70,152228,152229,152237,152247,152251,152259,152269,152273,152277,152290,152304,152308,152315,152322],{"__ignoreMap":160},[178,152230,152231,152233,152235],{"class":180,"line":181},[178,152232,16453],{"class":699},[178,152234,9667],{"class":184},[178,152236,847],{"class":319},[178,152238,152239,152242,152244],{"class":180,"line":263},[178,152240,152241],{"class":319},"    school ",[178,152243,330],{"class":699},[178,152245,152246],{"class":188}," \"黑马学校\"\n",[178,152248,152249],{"class":180,"line":274},[178,152250,722],{"emptyLinePlaceholder":721},[178,152252,152253,152255,152257],{"class":180,"line":354},[178,152254,32542],{"class":699},[178,152256,32545],{"class":195},[178,152258,151975],{"class":319},[178,152260,152261,152263,152265,152267],{"class":180,"line":364},[178,152262,32586],{"class":195},[178,152264,151155],{"class":319},[178,152266,330],{"class":699},[178,152268,151160],{"class":319},[178,152270,152271],{"class":180,"line":740},[178,152272,722],{"emptyLinePlaceholder":721},[178,152274,152275],{"class":180,"line":746},[178,152276,722],{"emptyLinePlaceholder":721},[178,152278,152279,152282,152284,152286,152288],{"class":180,"line":752},[178,152280,152281],{"class":319},"s1 ",[178,152283,330],{"class":699},[178,152285,151250],{"class":319},[178,152287,151253],{"class":188},[178,152289,863],{"class":319},[178,152291,152292,152295,152297,152299,152302],{"class":180,"line":757},[178,152293,152294],{"class":319},"s2 ",[178,152296,330],{"class":699},[178,152298,151250],{"class":319},[178,152300,152301],{"class":188},"\"小红\"",[178,152303,863],{"class":319},[178,152305,152306],{"class":180,"line":763},[178,152307,722],{"emptyLinePlaceholder":721},[178,152309,152310,152312],{"class":180,"line":769},[178,152311,1504],{"class":195},[178,152313,152314],{"class":319},"(s1.school)\n",[178,152316,152317,152319],{"class":180,"line":774},[178,152318,1504],{"class":195},[178,152320,152321],{"class":319},"(s2.school)\n",[178,152323,152324,152326],{"class":180,"line":780},[178,152325,1504],{"class":195},[178,152327,152328],{"class":319},"(Student.school)\n",[19,152330,152331],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,152333,152335],{"id":152334},"_1113-类方法和静态方法","11.13 类方法和静态方法",[387,152337,152339],{"id":152338},"_11131-类方法","11.13.1 类方法",[19,152341,152342,152343,152346,152347,297],{},"类方法使用 ",[70,152344,152345],{},"@classmethod","，第一个参数通常是 ",[70,152348,152349],{},"cls",[154,152351,152353],{"className":690,"code":152352,"language":692,"meta":160,"style":160},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[70,152354,152355,152363,152371,152375,152383,152393,152403,152407,152411],{"__ignoreMap":160},[178,152356,152357,152359,152361],{"class":180,"line":181},[178,152358,16453],{"class":699},[178,152360,9667],{"class":184},[178,152362,847],{"class":319},[178,152364,152365,152367,152369],{"class":180,"line":263},[178,152366,152241],{"class":319},[178,152368,330],{"class":699},[178,152370,152246],{"class":188},[178,152372,152373],{"class":180,"line":274},[178,152374,722],{"emptyLinePlaceholder":721},[178,152376,152377,152380],{"class":180,"line":354},[178,152378,152379],{"class":184},"    @",[178,152381,152382],{"class":195},"classmethod\n",[178,152384,152385,152387,152390],{"class":180,"line":364},[178,152386,32542],{"class":699},[178,152388,152389],{"class":184}," get_school",[178,152391,152392],{"class":319},"(cls):\n",[178,152394,152395,152397,152400],{"class":180,"line":740},[178,152396,16511],{"class":699},[178,152398,152399],{"class":195}," cls",[178,152401,152402],{"class":319},".school\n",[178,152404,152405],{"class":180,"line":746},[178,152406,722],{"emptyLinePlaceholder":721},[178,152408,152409],{"class":180,"line":752},[178,152410,722],{"emptyLinePlaceholder":721},[178,152412,152413,152415],{"class":180,"line":757},[178,152414,1504],{"class":195},[178,152416,152417],{"class":319},"(Student.get_school())\n",[387,152419,152421],{"id":152420},"_11132-静态方法","11.13.2 静态方法",[19,152423,152424,152425,152428],{},"静态方法使用 ",[70,152426,152427],{},"@staticmethod","，不需要访问实例和类。",[154,152430,152432],{"className":690,"code":152431,"language":692,"meta":160,"style":160},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[70,152433,152434,152443,152450,152459,152470,152474,152478],{"__ignoreMap":160},[178,152435,152436,152438,152441],{"class":180,"line":181},[178,152437,16453],{"class":699},[178,152439,152440],{"class":184}," MathUtils",[178,152442,847],{"class":319},[178,152444,152445,152447],{"class":180,"line":263},[178,152446,152379],{"class":184},[178,152448,152449],{"class":195},"staticmethod\n",[178,152451,152452,152454,152456],{"class":180,"line":274},[178,152453,32542],{"class":699},[178,152455,6978],{"class":184},[178,152457,152458],{"class":319},"(a, b):\n",[178,152460,152461,152463,152465,152467],{"class":180,"line":354},[178,152462,16511],{"class":699},[178,152464,12630],{"class":319},[178,152466,2421],{"class":699},[178,152468,152469],{"class":319}," b\n",[178,152471,152472],{"class":180,"line":364},[178,152473,722],{"emptyLinePlaceholder":721},[178,152475,152476],{"class":180,"line":740},[178,152477,722],{"emptyLinePlaceholder":721},[178,152479,152480,152482,152485,152487,152489,152491],{"class":180,"line":746},[178,152481,1504],{"class":195},[178,152483,152484],{"class":319},"(MathUtils.add(",[178,152486,1665],{"class":195},[178,152488,14196],{"class":319},[178,152490,1669],{"class":195},[178,152492,32239],{"class":319},[19,152494,152495],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152497,152499],{"id":152498},"_1114-dataclass","11.14 dataclass",[19,152501,152502,152505],{},[70,152503,152504],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[154,152507,152509],{"className":690,"code":152508,"language":692,"meta":160,"style":160},"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",[70,152510,152511,152523,152527,152531,152536,152544,152552,152560,152568,152572,152576,152596],{"__ignoreMap":160},[178,152512,152513,152515,152518,152520],{"class":180,"line":181},[178,152514,32479],{"class":699},[178,152516,152517],{"class":319}," dataclasses ",[178,152519,700],{"class":699},[178,152521,152522],{"class":319}," dataclass\n",[178,152524,152525],{"class":180,"line":263},[178,152526,722],{"emptyLinePlaceholder":721},[178,152528,152529],{"class":180,"line":274},[178,152530,722],{"emptyLinePlaceholder":721},[178,152532,152533],{"class":180,"line":354},[178,152534,152535],{"class":184},"@dataclass\n",[178,152537,152538,152540,152542],{"class":180,"line":364},[178,152539,16453],{"class":699},[178,152541,9667],{"class":184},[178,152543,847],{"class":319},[178,152545,152546,152549],{"class":180,"line":740},[178,152547,152548],{"class":319},"    name: ",[178,152550,152551],{"class":195},"str\n",[178,152553,152554,152557],{"class":180,"line":746},[178,152555,152556],{"class":319},"    age: ",[178,152558,152559],{"class":195},"int\n",[178,152561,152562,152565],{"class":180,"line":752},[178,152563,152564],{"class":319},"    score: ",[178,152566,152567],{"class":195},"float\n",[178,152569,152570],{"class":180,"line":757},[178,152571,722],{"emptyLinePlaceholder":721},[178,152573,152574],{"class":180,"line":763},[178,152575,722],{"emptyLinePlaceholder":721},[178,152577,152578,152580,152582,152584,152586,152588,152590,152592,152594],{"class":180,"line":769},[178,152579,150846],{"class":319},[178,152581,330],{"class":699},[178,152583,151250],{"class":319},[178,152585,151253],{"class":188},[178,152587,14196],{"class":319},[178,152589,2590],{"class":195},[178,152591,14196],{"class":319},[178,152593,2928],{"class":195},[178,152595,863],{"class":319},[178,152597,152598,152600],{"class":180,"line":774},[178,152599,1504],{"class":195},[178,152601,151407],{"class":319},[19,152603,152604,152605,1258,152607,152610],{},"它会自动生成 ",[70,152606,32570],{},[70,152608,152609],{},"__repr__"," 等方法。适合数据模型类。",[14,152612,152614],{"id":152613},"_1115-小案例学生类","11.15 小案例：学生类",[154,152616,152618],{"className":690,"code":152617,"language":692,"meta":160,"style":160},"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",[70,152619,152620,152628,152637,152649,152659,152669,152679,152683,152692,152705,152709,152718,152724,152736,152748,152760,152772,152776,152780,152786,152796,152805,152815,152823,152831,152840,152844,152848,152856,152892,152896,152900,152925,152932],{"__ignoreMap":160},[178,152621,152622,152624,152626],{"class":180,"line":181},[178,152623,16453],{"class":699},[178,152625,9667],{"class":184},[178,152627,847],{"class":319},[178,152629,152630,152632,152634],{"class":180,"line":263},[178,152631,32542],{"class":699},[178,152633,32545],{"class":195},[178,152635,152636],{"class":319},"(self, student_id, name, age, score):\n",[178,152638,152639,152641,152644,152646],{"class":180,"line":274},[178,152640,32586],{"class":195},[178,152642,152643],{"class":319},".student_id ",[178,152645,330],{"class":699},[178,152647,152648],{"class":319}," student_id\n",[178,152650,152651,152653,152655,152657],{"class":180,"line":354},[178,152652,32586],{"class":195},[178,152654,151155],{"class":319},[178,152656,330],{"class":699},[178,152658,151160],{"class":319},[178,152660,152661,152663,152665,152667],{"class":180,"line":364},[178,152662,32586],{"class":195},[178,152664,151167],{"class":319},[178,152666,330],{"class":699},[178,152668,151172],{"class":319},[178,152670,152671,152673,152675,152677],{"class":180,"line":740},[178,152672,32586],{"class":195},[178,152674,151179],{"class":319},[178,152676,330],{"class":699},[178,152678,3385],{"class":319},[178,152680,152681],{"class":180,"line":746},[178,152682,722],{"emptyLinePlaceholder":721},[178,152684,152685,152687,152690],{"class":180,"line":752},[178,152686,32542],{"class":699},[178,152688,152689],{"class":184}," is_passed",[178,152691,32548],{"class":319},[178,152693,152694,152696,152698,152700,152702],{"class":180,"line":757},[178,152695,16511],{"class":699},[178,152697,40605],{"class":195},[178,152699,151179],{"class":319},[178,152701,3505],{"class":699},[178,152703,152704],{"class":195}," 60\n",[178,152706,152707],{"class":180,"line":763},[178,152708,722],{"emptyLinePlaceholder":721},[178,152710,152711,152713,152716],{"class":180,"line":769},[178,152712,32542],{"class":699},[178,152714,152715],{"class":184}," to_dict",[178,152717,32548],{"class":319},[178,152719,152720,152722],{"class":180,"line":774},[178,152721,16511],{"class":699},[178,152723,17330],{"class":319},[178,152725,152726,152729,152731,152733],{"class":180,"line":780},[178,152727,152728],{"class":188},"            \"student_id\"",[178,152730,53167],{"class":319},[178,152732,32564],{"class":195},[178,152734,152735],{"class":319},".student_id,\n",[178,152737,152738,152741,152743,152745],{"class":180,"line":786},[178,152739,152740],{"class":188},"            \"name\"",[178,152742,53167],{"class":319},[178,152744,32564],{"class":195},[178,152746,152747],{"class":319},".name,\n",[178,152749,152750,152753,152755,152757],{"class":180,"line":792},[178,152751,152752],{"class":188},"            \"age\"",[178,152754,53167],{"class":319},[178,152756,32564],{"class":195},[178,152758,152759],{"class":319},".age,\n",[178,152761,152762,152765,152767,152769],{"class":180,"line":798},[178,152763,152764],{"class":188},"            \"score\"",[178,152766,53167],{"class":319},[178,152768,32564],{"class":195},[178,152770,152771],{"class":319},".score,\n",[178,152773,152774],{"class":180,"line":804},[178,152775,4312],{"class":319},[178,152777,152778],{"class":180,"line":810},[178,152779,722],{"emptyLinePlaceholder":721},[178,152781,152782,152784],{"class":180,"line":816},[178,152783,152379],{"class":184},[178,152785,152382],{"class":195},[178,152787,152788,152790,152793],{"class":180,"line":822},[178,152789,32542],{"class":699},[178,152791,152792],{"class":184}," from_dict",[178,152794,152795],{"class":319},"(cls, data):\n",[178,152797,152798,152800,152802],{"class":180,"line":827},[178,152799,16511],{"class":699},[178,152801,152399],{"class":195},[178,152803,152804],{"class":319},"(\n",[178,152806,152807,152810,152813],{"class":180,"line":832},[178,152808,152809],{"class":319},"            data[",[178,152811,152812],{"class":188},"\"student_id\"",[178,152814,89551],{"class":319},[178,152816,152817,152819,152821],{"class":180,"line":850},[178,152818,152809],{"class":319},[178,152820,333],{"class":188},[178,152822,89551],{"class":319},[178,152824,152825,152827,152829],{"class":180,"line":866},[178,152826,152809],{"class":319},[178,152828,70844],{"class":188},[178,152830,89551],{"class":319},[178,152832,152833,152835,152838],{"class":180,"line":877},[178,152834,152809],{"class":319},[178,152836,152837],{"class":188},"\"score\"",[178,152839,89551],{"class":319},[178,152841,152842],{"class":180,"line":882},[178,152843,39858],{"class":319},[178,152845,152846],{"class":180,"line":898},[178,152847,722],{"emptyLinePlaceholder":721},[178,152849,152850,152852,152854],{"class":180,"line":914},[178,152851,32542],{"class":699},[178,152853,151346],{"class":195},[178,152855,32548],{"class":319},[178,152857,152858,152860,152862,152864,152866,152869,152871,152874,152876,152878,152880,152882,152884,152886,152888,152890],{"class":180,"line":919},[178,152859,16511],{"class":699},[178,152861,151355],{"class":699},[178,152863,2191],{"class":188},[178,152865,150817],{"class":195},[178,152867,152868],{"class":319},".student_id",[178,152870,2885],{"class":195},[178,152872,152873],{"class":195}," {self",[178,152875,82020],{"class":319},[178,152877,2885],{"class":195},[178,152879,152873],{"class":195},[178,152881,82032],{"class":319},[178,152883,2885],{"class":195},[178,152885,152873],{"class":195},[178,152887,151227],{"class":319},[178,152889,2885],{"class":195},[178,152891,26885],{"class":188},[178,152893,152894],{"class":180,"line":935},[178,152895,722],{"emptyLinePlaceholder":721},[178,152897,152898],{"class":180,"line":952},[178,152899,722],{"emptyLinePlaceholder":721},[178,152901,152902,152904,152906,152908,152911,152913,152915,152917,152919,152921,152923],{"class":180,"line":966},[178,152903,150846],{"class":319},[178,152905,330],{"class":699},[178,152907,151250],{"class":319},[178,152909,152910],{"class":188},"\"001\"",[178,152912,14196],{"class":319},[178,152914,151253],{"class":188},[178,152916,14196],{"class":319},[178,152918,2590],{"class":195},[178,152920,14196],{"class":319},[178,152922,2928],{"class":195},[178,152924,863],{"class":319},[178,152926,152927,152929],{"class":180,"line":980},[178,152928,1504],{"class":195},[178,152930,152931],{"class":319},"(student.is_passed())\n",[178,152933,152934,152936],{"class":180,"line":985},[178,152935,1504],{"class":195},[178,152937,152938],{"class":319},"(student.to_dict())\n",[19,152940,152941,404,152944,152947],{},[70,152942,152943],{},"to_dict()",[70,152945,152946],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,152949,152951],{"id":152950},"_1116-易错点","11.16 易错点",[26,152953,152954,152960,152966,152971,152974,152977],{},[29,152955,152956,152957,297],{},"类名推荐使用大驼峰，如 ",[70,152958,152959],{},"StudentManager",[29,152961,152962,152963,152965],{},"方法第一个参数必须写 ",[70,152964,32564],{},"，调用时不用传。",[29,152967,152968,152970],{},[70,152969,32570],{}," 不是普通方法，它在创建对象时自动执行。",[29,152972,152973],{},"私有属性不是绝对安全，只是约定和名称改写。",[29,152975,152976],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[29,152978,152979],{},"类中方法太多时，说明职责可能过重。",[14,152981,152983],{"id":152982},"_1117-本章练习","11.17 本章练习",[26,152985,152986,152992,152998,153003,153016],{},[29,152987,152988,152989,152991],{},"定义 ",[70,152990,150933],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[29,152993,152988,152994,152997],{},[70,152995,152996],{},"Account"," 类，实现存款、取款、查询余额。",[29,152999,152988,153000,153002],{},[70,153001,18984],{}," 类，计算圆的周长和面积。",[29,153004,152988,153005,1258,153008,153011,153012,153015],{},[70,153006,153007],{},"Dog",[70,153009,153010],{},"Cat"," 类，并用同一个函数调用它们的 ",[70,153013,153014],{},"speak()"," 方法。",[29,153017,105731,153018,153020,153021,297],{},[70,153019,152504],{}," 定义一个商品类 ",[70,153022,153023],{},"Product",[1853,153025,153026],{},"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":160,"searchDepth":263,"depth":263,"links":153028},[153029,153030,153031,153032,153033,153034,153036,153037,153038,153039,153040,153041,153042,153046,153047,153048,153049],{"id":150697,"depth":263,"text":150698},{"id":150880,"depth":263,"text":150881},{"id":150944,"depth":263,"text":150945},{"id":151021,"depth":263,"text":151022},{"id":151120,"depth":263,"text":151121},{"id":151284,"depth":263,"text":153035},"11.6 str",{"id":151410,"depth":263,"text":151411},{"id":151676,"depth":263,"text":151677},{"id":151790,"depth":263,"text":151791},{"id":151945,"depth":263,"text":151946},{"id":152069,"depth":263,"text":152070},{"id":152185,"depth":263,"text":152186},{"id":152334,"depth":263,"text":152335,"children":153043},[153044,153045],{"id":152338,"depth":274,"text":152339},{"id":152420,"depth":274,"text":152421},{"id":152498,"depth":263,"text":152499},{"id":152613,"depth":263,"text":152614},{"id":152950,"depth":263,"text":152951},{"id":152982,"depth":263,"text":152983},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150689,"description":25135},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153056,"title":153057,"body":153058,"description":25135,"extension":1880,"meta":156371,"navigation":721,"path":156372,"seo":156373,"stem":156374,"__hash__":156375},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153059,"toc":156347},[153060,153063,153067,153070,153073,153102,153105,153113,153117,153121,153124,153147,153150,153156,153160,154606,154609,154630,154634,154637,154649,154652,154836,154839,154965,154968,154972,154976,155112,155116,155202,155206,155288,155292,155329,155333,155522,155526,155529,155759,155763,155766,155947,155950,155954,155957,155963,155966,155992,155996,155999,156013,156016,156041,156044,156058,156061,156078,156081,156098,156101,156118,156122,156148,156152,156175,156179,156182,156184,156190,156192,156213,156216,156222,156228,156232,156235,156311,156314,156318,156344],[10,153061,153057],{"id":153062},"_12-综合案例与复习路线",[14,153064,153066],{"id":153065},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,153068,153069],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,153071,153072],{},"一个合格的入门综合项目最好覆盖：",[26,153074,153075,153078,153081,153084,153087,153090,153093,153096,153099],{},[29,153076,153077],{},"输入输出。",[29,153079,153080],{},"判断和循环。",[29,153082,153083],{},"函数拆分。",[29,153085,153086],{},"列表、字典等容器。",[29,153088,153089],{},"文件持久化。",[29,153091,153092],{},"异常处理。",[29,153094,153095],{},"模块拆分。",[29,153097,153098],{},"可选：面向对象。",[29,153100,153101],{},"可选：数据可视化。",[19,153103,153104],{},"本章整理两个方向：",[26,153106,153107,153110],{},[29,153108,153109],{},"学生管理系统。",[29,153111,153112],{},"销售数据统计和可视化。",[14,153114,153116],{"id":153115},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[387,153118,153120],{"id":153119},"_1221-需求","12.2.1 需求",[19,153122,153123],{},"实现一个命令行学生管理系统：",[26,153125,153126,153129,153132,153135,153138,153141,153144],{},[29,153127,153128],{},"添加学生。",[29,153130,153131],{},"删除学生。",[29,153133,153134],{},"修改学生。",[29,153136,153137],{},"查询学生。",[29,153139,153140],{},"显示所有学生。",[29,153142,153143],{},"保存到 JSON 文件。",[29,153145,153146],{},"程序启动时自动读取 JSON 文件。",[19,153148,153149],{},"学生字段：",[154,153151,153154],{"className":153152,"code":153153,"language":159,"meta":160},[157],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[70,153155,153153],{"__ignoreMap":160},[14,153157,153159],{"id":153158},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[154,153161,153163],{"className":690,"code":153162,"language":692,"meta":160,"style":160},"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",[70,153164,153165,153171,153181,153185,153199,153203,153207,153216,153228,153234,153238,153244,153275,153285,153292,153303,153309,153313,153317,153327,153358,153384,153388,153392,153401,153412,153423,153434,153445,153456,153467,153478,153482,153486,153496,153508,153524,153531,153538,153542,153546,153556,153564,153571,153584,153594,153605,153609,153613,153622,153630,153636,153648,153656,153667,153671,153675,153684,153700,153704,153711,153722,153727,153731,153747,153762,153777,153781,153786,153794,153802,153810,153818,153822,153827,153838,153842,153846,153855,153870,153880,153884,153896,153907,153911,153915,153920,153924,153935,153939,153943,153952,153967,153975,153979,153991,154001,154005,154009,154024,154037,154050,154054,154067,154079,154091,154095,154099,154110,154114,154118,154127,154142,154150,154154,154166,154176,154180,154184,154189,154193,154197,154207,154213,154235,154254,154273,154292,154297,154301,154305,154314,154322,154333,154337,154341,154367,154377,154382,154386,154390,154398,154408,154412,154420,154425,154441,154445,154459,154464,154478,154483,154496,154501,154514,154519,154532,154537,154550,154561,154565,154571,154582,154586,154590,154602],{"__ignoreMap":160},[178,153166,153167,153169],{"class":180,"line":181},[178,153168,700],{"class":699},[178,153170,148456],{"class":319},[178,153172,153173,153175,153177,153179],{"class":180,"line":263},[178,153174,32479],{"class":699},[178,153176,109676],{"class":319},[178,153178,700],{"class":699},[178,153180,109681],{"class":319},[178,153182,153183],{"class":180,"line":274},[178,153184,722],{"emptyLinePlaceholder":721},[178,153186,153187,153190,153192,153194,153197],{"class":180,"line":354},[178,153188,153189],{"class":195},"DATA_FILE",[178,153191,734],{"class":699},[178,153193,109910],{"class":319},[178,153195,153196],{"class":188},"\"students.json\"",[178,153198,863],{"class":319},[178,153200,153201],{"class":180,"line":364},[178,153202,722],{"emptyLinePlaceholder":721},[178,153204,153205],{"class":180,"line":740},[178,153206,722],{"emptyLinePlaceholder":721},[178,153208,153209,153211,153214],{"class":180,"line":746},[178,153210,835],{"class":699},[178,153212,153213],{"class":184}," load_students",[178,153215,33687],{"class":319},[178,153217,153218,153220,153222,153225],{"class":180,"line":752},[178,153219,922],{"class":699},[178,153221,40662],{"class":699},[178,153223,153224],{"class":195}," DATA_FILE",[178,153226,153227],{"class":319},".exists():\n",[178,153229,153230,153232],{"class":180,"line":757},[178,153231,16511],{"class":699},[178,153233,53566],{"class":319},[178,153235,153236],{"class":180,"line":763},[178,153237,722],{"emptyLinePlaceholder":721},[178,153239,153240,153242],{"class":180,"line":769},[178,153241,127149],{"class":699},[178,153243,847],{"class":319},[178,153245,153246,153249,153251,153253,153255,153257,153259,153261,153263,153265,153267,153269,153271,153273],{"class":180,"line":774},[178,153247,153248],{"class":699},"        with",[178,153250,148156],{"class":195},[178,153252,944],{"class":319},[178,153254,153189],{"class":195},[178,153256,14196],{"class":319},[178,153258,148166],{"class":188},[178,153260,14196],{"class":319},[178,153262,148171],{"class":6985},[178,153264,330],{"class":699},[178,153266,148176],{"class":188},[178,153268,15474],{"class":319},[178,153270,713],{"class":699},[178,153272,149518],{"class":6985},[178,153274,847],{"class":319},[178,153276,153277,153279,153281,153283],{"class":180,"line":780},[178,153278,17490],{"class":699},[178,153280,149529],{"class":319},[178,153282,47086],{"class":6985},[178,153284,863],{"class":319},[178,153286,153287,153289],{"class":180,"line":786},[178,153288,127177],{"class":699},[178,153290,153291],{"class":319}," json.JSONDecodeError:\n",[178,153293,153294,153296,153298,153301],{"class":180,"line":792},[178,153295,34183],{"class":195},[178,153297,944],{"class":319},[178,153299,153300],{"class":188},"\"数据文件格式错误，已使用空数据启动\"",[178,153302,863],{"class":319},[178,153304,153305,153307],{"class":180,"line":798},[178,153306,16511],{"class":699},[178,153308,53566],{"class":319},[178,153310,153311],{"class":180,"line":804},[178,153312,722],{"emptyLinePlaceholder":721},[178,153314,153315],{"class":180,"line":810},[178,153316,722],{"emptyLinePlaceholder":721},[178,153318,153319,153321,153324],{"class":180,"line":816},[178,153320,835],{"class":699},[178,153322,153323],{"class":184}," save_students",[178,153325,153326],{"class":319},"(students):\n",[178,153328,153329,153331,153333,153335,153337,153339,153342,153344,153346,153348,153350,153352,153354,153356],{"class":180,"line":822},[178,153330,35910],{"class":699},[178,153332,148156],{"class":195},[178,153334,944],{"class":319},[178,153336,153189],{"class":195},[178,153338,14196],{"class":319},[178,153340,153341],{"class":188},"\"w\"",[178,153343,14196],{"class":319},[178,153345,148171],{"class":6985},[178,153347,330],{"class":699},[178,153349,148176],{"class":188},[178,153351,15474],{"class":319},[178,153353,713],{"class":699},[178,153355,149518],{"class":6985},[178,153357,847],{"class":319},[178,153359,153360,153363,153365,153367,153369,153371,153373,153375,153378,153380,153382],{"class":180,"line":827},[178,153361,153362],{"class":319},"        json.dump(students, ",[178,153364,47086],{"class":6985},[178,153366,14196],{"class":319},[178,153368,148502],{"class":6985},[178,153370,330],{"class":699},[178,153372,35719],{"class":195},[178,153374,14196],{"class":319},[178,153376,153377],{"class":6985},"indent",[178,153379,330],{"class":699},[178,153381,1669],{"class":195},[178,153383,863],{"class":319},[178,153385,153386],{"class":180,"line":832},[178,153387,722],{"emptyLinePlaceholder":721},[178,153389,153390],{"class":180,"line":850},[178,153391,722],{"emptyLinePlaceholder":721},[178,153393,153394,153396,153399],{"class":180,"line":866},[178,153395,835],{"class":699},[178,153397,153398],{"class":184}," show_menu",[178,153400,33687],{"class":319},[178,153402,153403,153405,153407,153410],{"class":180,"line":877},[178,153404,1022],{"class":195},[178,153406,944],{"class":319},[178,153408,153409],{"class":188},"\"====== 学生管理系统 ======\"",[178,153411,863],{"class":319},[178,153413,153414,153416,153418,153421],{"class":180,"line":882},[178,153415,1022],{"class":195},[178,153417,944],{"class":319},[178,153419,153420],{"class":188},"\"1. 添加学生\"",[178,153422,863],{"class":319},[178,153424,153425,153427,153429,153432],{"class":180,"line":898},[178,153426,1022],{"class":195},[178,153428,944],{"class":319},[178,153430,153431],{"class":188},"\"2. 删除学生\"",[178,153433,863],{"class":319},[178,153435,153436,153438,153440,153443],{"class":180,"line":914},[178,153437,1022],{"class":195},[178,153439,944],{"class":319},[178,153441,153442],{"class":188},"\"3. 修改学生\"",[178,153444,863],{"class":319},[178,153446,153447,153449,153451,153454],{"class":180,"line":919},[178,153448,1022],{"class":195},[178,153450,944],{"class":319},[178,153452,153453],{"class":188},"\"4. 查询学生\"",[178,153455,863],{"class":319},[178,153457,153458,153460,153462,153465],{"class":180,"line":935},[178,153459,1022],{"class":195},[178,153461,944],{"class":319},[178,153463,153464],{"class":188},"\"5. 显示所有学生\"",[178,153466,863],{"class":319},[178,153468,153469,153471,153473,153476],{"class":180,"line":952},[178,153470,1022],{"class":195},[178,153472,944],{"class":319},[178,153474,153475],{"class":188},"\"0. 退出系统\"",[178,153477,863],{"class":319},[178,153479,153480],{"class":180,"line":966},[178,153481,722],{"emptyLinePlaceholder":721},[178,153483,153484],{"class":180,"line":980},[178,153485,722],{"emptyLinePlaceholder":721},[178,153487,153488,153490,153493],{"class":180,"line":985},[178,153489,835],{"class":699},[178,153491,153492],{"class":184}," find_student",[178,153494,153495],{"class":319},"(students, student_id):\n",[178,153497,153498,153500,153503,153505],{"class":180,"line":1008},[178,153499,988],{"class":699},[178,153501,153502],{"class":319}," student ",[178,153504,994],{"class":699},[178,153506,153507],{"class":319}," students:\n",[178,153509,153510,153512,153515,153517,153519,153521],{"class":180,"line":1014},[178,153511,4280],{"class":699},[178,153513,153514],{"class":319}," student[",[178,153516,152812],{"class":188},[178,153518,6214],{"class":319},[178,153520,4725],{"class":699},[178,153522,153523],{"class":319}," student_id:\n",[178,153525,153526,153528],{"class":180,"line":1019},[178,153527,17490],{"class":699},[178,153529,153530],{"class":319}," student\n",[178,153532,153533,153535],{"class":180,"line":1033},[178,153534,5862],{"class":699},[178,153536,153537],{"class":195}," None\n",[178,153539,153540],{"class":180,"line":1046},[178,153541,722],{"emptyLinePlaceholder":721},[178,153543,153544],{"class":180,"line":1059},[178,153545,722],{"emptyLinePlaceholder":721},[178,153547,153548,153550,153553],{"class":180,"line":1072},[178,153549,835],{"class":699},[178,153551,153552],{"class":184}," input_int",[178,153554,153555],{"class":319},"(prompt):\n",[178,153557,153558,153560,153562],{"class":180,"line":1077},[178,153559,4035],{"class":699},[178,153561,97007],{"class":195},[178,153563,847],{"class":319},[178,153565,153566,153569],{"class":180,"line":1082},[178,153567,153568],{"class":699},"        try",[178,153570,847],{"class":319},[178,153572,153573,153575,153577,153579,153581],{"class":180,"line":1099},[178,153574,17490],{"class":699},[178,153576,4166],{"class":195},[178,153578,944],{"class":319},[178,153580,55543],{"class":195},[178,153582,153583],{"class":319},"(prompt))\n",[178,153585,153586,153589,153592],{"class":180,"line":9806},[178,153587,153588],{"class":699},"        except",[178,153590,153591],{"class":195}," ValueError",[178,153593,847],{"class":319},[178,153595,153596,153598,153600,153603],{"class":180,"line":9818},[178,153597,36382],{"class":195},[178,153599,944],{"class":319},[178,153601,153602],{"class":188},"\"请输入整数\"",[178,153604,863],{"class":319},[178,153606,153607],{"class":180,"line":11477},[178,153608,722],{"emptyLinePlaceholder":721},[178,153610,153611],{"class":180,"line":11502},[178,153612,722],{"emptyLinePlaceholder":721},[178,153614,153615,153617,153620],{"class":180,"line":11525},[178,153616,835],{"class":699},[178,153618,153619],{"class":184}," input_float",[178,153621,153555],{"class":319},[178,153623,153624,153626,153628],{"class":180,"line":11549},[178,153625,4035],{"class":699},[178,153627,97007],{"class":195},[178,153629,847],{"class":319},[178,153631,153632,153634],{"class":180,"line":11554},[178,153633,153568],{"class":699},[178,153635,847],{"class":319},[178,153637,153638,153640,153642,153644,153646],{"class":180,"line":11559},[178,153639,17490],{"class":699},[178,153641,111162],{"class":195},[178,153643,944],{"class":319},[178,153645,55543],{"class":195},[178,153647,153583],{"class":319},[178,153649,153650,153652,153654],{"class":180,"line":11564},[178,153651,153588],{"class":699},[178,153653,153591],{"class":195},[178,153655,847],{"class":319},[178,153657,153658,153660,153662,153665],{"class":180,"line":11573},[178,153659,36382],{"class":195},[178,153661,944],{"class":319},[178,153663,153664],{"class":188},"\"请输入数字\"",[178,153666,863],{"class":319},[178,153668,153669],{"class":180,"line":11578},[178,153670,722],{"emptyLinePlaceholder":721},[178,153672,153673],{"class":180,"line":11584},[178,153674,722],{"emptyLinePlaceholder":721},[178,153676,153677,153679,153682],{"class":180,"line":11605},[178,153678,835],{"class":699},[178,153680,153681],{"class":184}," add_student",[178,153683,153326],{"class":319},[178,153685,153686,153689,153691,153693,153695,153698],{"class":180,"line":11611},[178,153687,153688],{"class":319},"    student_id ",[178,153690,330],{"class":699},[178,153692,62326],{"class":195},[178,153694,944],{"class":319},[178,153696,153697],{"class":188},"\"请输入学号:\"",[178,153699,863],{"class":319},[178,153701,153702],{"class":180,"line":11625},[178,153703,722],{"emptyLinePlaceholder":721},[178,153705,153706,153708],{"class":180,"line":11631},[178,153707,922],{"class":699},[178,153709,153710],{"class":319}," find_student(students, student_id):\n",[178,153712,153713,153715,153717,153720],{"class":180,"line":11658},[178,153714,34183],{"class":195},[178,153716,944],{"class":319},[178,153718,153719],{"class":188},"\"学号已存在\"",[178,153721,863],{"class":319},[178,153723,153724],{"class":180,"line":11667},[178,153725,153726],{"class":699},"        return\n",[178,153728,153729],{"class":180,"line":11673},[178,153730,722],{"emptyLinePlaceholder":721},[178,153732,153733,153736,153738,153740,153742,153745],{"class":180,"line":11681},[178,153734,153735],{"class":319},"    name ",[178,153737,330],{"class":699},[178,153739,62326],{"class":195},[178,153741,944],{"class":319},[178,153743,153744],{"class":188},"\"请输入姓名:\"",[178,153746,863],{"class":319},[178,153748,153749,153752,153754,153757,153760],{"class":180,"line":11686},[178,153750,153751],{"class":319},"    age ",[178,153753,330],{"class":699},[178,153755,153756],{"class":319}," input_int(",[178,153758,153759],{"class":188},"\"请输入年龄:\"",[178,153761,863],{"class":319},[178,153763,153764,153767,153769,153772,153775],{"class":180,"line":18362},[178,153765,153766],{"class":319},"    score ",[178,153768,330],{"class":699},[178,153770,153771],{"class":319}," input_float(",[178,153773,153774],{"class":188},"\"请输入成绩:\"",[178,153776,863],{"class":319},[178,153778,153779],{"class":180,"line":18368},[178,153780,722],{"emptyLinePlaceholder":721},[178,153782,153783],{"class":180,"line":18391},[178,153784,153785],{"class":319},"    students.append({\n",[178,153787,153788,153791],{"class":180,"line":18397},[178,153789,153790],{"class":188},"        \"student_id\"",[178,153792,153793],{"class":319},": student_id,\n",[178,153795,153796,153799],{"class":180,"line":18420},[178,153797,153798],{"class":188},"        \"name\"",[178,153800,153801],{"class":319},": name,\n",[178,153803,153804,153807],{"class":180,"line":18434},[178,153805,153806],{"class":188},"        \"age\"",[178,153808,153809],{"class":319},": age,\n",[178,153811,153812,153815],{"class":180,"line":18454},[178,153813,153814],{"class":188},"        \"score\"",[178,153816,153817],{"class":319},": score,\n",[178,153819,153820],{"class":180,"line":18460},[178,153821,35193],{"class":319},[178,153823,153824],{"class":180,"line":18471},[178,153825,153826],{"class":319},"    save_students(students)\n",[178,153828,153829,153831,153833,153836],{"class":180,"line":18494},[178,153830,1022],{"class":195},[178,153832,944],{"class":319},[178,153834,153835],{"class":188},"\"添加成功\"",[178,153837,863],{"class":319},[178,153839,153840],{"class":180,"line":18516},[178,153841,722],{"emptyLinePlaceholder":721},[178,153843,153844],{"class":180,"line":18521},[178,153845,722],{"emptyLinePlaceholder":721},[178,153847,153848,153850,153853],{"class":180,"line":18527},[178,153849,835],{"class":699},[178,153851,153852],{"class":184}," delete_student",[178,153854,153326],{"class":319},[178,153856,153857,153859,153861,153863,153865,153868],{"class":180,"line":18541},[178,153858,153688],{"class":319},[178,153860,330],{"class":699},[178,153862,62326],{"class":195},[178,153864,944],{"class":319},[178,153866,153867],{"class":188},"\"请输入要删除的学号:\"",[178,153869,863],{"class":319},[178,153871,153872,153875,153877],{"class":180,"line":18554},[178,153873,153874],{"class":319},"    student ",[178,153876,330],{"class":699},[178,153878,153879],{"class":319}," find_student(students, student_id)\n",[178,153881,153882],{"class":180,"line":18559},[178,153883,722],{"emptyLinePlaceholder":721},[178,153885,153886,153888,153890,153892,153894],{"class":180,"line":18573},[178,153887,922],{"class":699},[178,153889,153502],{"class":319},[178,153891,40659],{"class":699},[178,153893,40665],{"class":195},[178,153895,847],{"class":319},[178,153897,153898,153900,153902,153905],{"class":180,"line":18578},[178,153899,34183],{"class":195},[178,153901,944],{"class":319},[178,153903,153904],{"class":188},"\"学生不存在\"",[178,153906,863],{"class":319},[178,153908,153909],{"class":180,"line":18584},[178,153910,153726],{"class":699},[178,153912,153913],{"class":180,"line":18589},[178,153914,722],{"emptyLinePlaceholder":721},[178,153916,153917],{"class":180,"line":18603},[178,153918,153919],{"class":319},"    students.remove(student)\n",[178,153921,153922],{"class":180,"line":18608},[178,153923,153826],{"class":319},[178,153925,153926,153928,153930,153933],{"class":180,"line":18613},[178,153927,1022],{"class":195},[178,153929,944],{"class":319},[178,153931,153932],{"class":188},"\"删除成功\"",[178,153934,863],{"class":319},[178,153936,153937],{"class":180,"line":18627},[178,153938,722],{"emptyLinePlaceholder":721},[178,153940,153941],{"class":180,"line":18639},[178,153942,722],{"emptyLinePlaceholder":721},[178,153944,153945,153947,153950],{"class":180,"line":18644},[178,153946,835],{"class":699},[178,153948,153949],{"class":184}," update_student",[178,153951,153326],{"class":319},[178,153953,153954,153956,153958,153960,153962,153965],{"class":180,"line":18657},[178,153955,153688],{"class":319},[178,153957,330],{"class":699},[178,153959,62326],{"class":195},[178,153961,944],{"class":319},[178,153963,153964],{"class":188},"\"请输入要修改的学号:\"",[178,153966,863],{"class":319},[178,153968,153969,153971,153973],{"class":180,"line":18662},[178,153970,153874],{"class":319},[178,153972,330],{"class":699},[178,153974,153879],{"class":319},[178,153976,153977],{"class":180,"line":18667},[178,153978,722],{"emptyLinePlaceholder":721},[178,153980,153981,153983,153985,153987,153989],{"class":180,"line":18672},[178,153982,922],{"class":699},[178,153984,153502],{"class":319},[178,153986,40659],{"class":699},[178,153988,40665],{"class":195},[178,153990,847],{"class":319},[178,153992,153993,153995,153997,153999],{"class":180,"line":18685},[178,153994,34183],{"class":195},[178,153996,944],{"class":319},[178,153998,153904],{"class":188},[178,154000,863],{"class":319},[178,154002,154003],{"class":180,"line":18690},[178,154004,153726],{"class":699},[178,154006,154007],{"class":180,"line":34365},[178,154008,722],{"emptyLinePlaceholder":721},[178,154010,154011,154013,154015,154017,154019,154022],{"class":180,"line":34371},[178,154012,153735],{"class":319},[178,154014,330],{"class":699},[178,154016,62326],{"class":195},[178,154018,944],{"class":319},[178,154020,154021],{"class":188},"\"请输入新姓名:\"",[178,154023,863],{"class":319},[178,154025,154026,154028,154030,154032,154035],{"class":180,"line":34377},[178,154027,153751],{"class":319},[178,154029,330],{"class":699},[178,154031,153756],{"class":319},[178,154033,154034],{"class":188},"\"请输入新年龄:\"",[178,154036,863],{"class":319},[178,154038,154039,154041,154043,154045,154048],{"class":180,"line":34383},[178,154040,153766],{"class":319},[178,154042,330],{"class":699},[178,154044,153771],{"class":319},[178,154046,154047],{"class":188},"\"请输入新成绩:\"",[178,154049,863],{"class":319},[178,154051,154052],{"class":180,"line":34389},[178,154053,722],{"emptyLinePlaceholder":721},[178,154055,154056,154059,154061,154063,154065],{"class":180,"line":34400},[178,154057,154058],{"class":319},"    student[",[178,154060,333],{"class":188},[178,154062,6214],{"class":319},[178,154064,330],{"class":699},[178,154066,151160],{"class":319},[178,154068,154069,154071,154073,154075,154077],{"class":180,"line":34406},[178,154070,154058],{"class":319},[178,154072,70844],{"class":188},[178,154074,6214],{"class":319},[178,154076,330],{"class":699},[178,154078,151172],{"class":319},[178,154080,154081,154083,154085,154087,154089],{"class":180,"line":34426},[178,154082,154058],{"class":319},[178,154084,152837],{"class":188},[178,154086,6214],{"class":319},[178,154088,330],{"class":699},[178,154090,3385],{"class":319},[178,154092,154093],{"class":180,"line":34432},[178,154094,722],{"emptyLinePlaceholder":721},[178,154096,154097],{"class":180,"line":34443},[178,154098,153826],{"class":319},[178,154100,154101,154103,154105,154108],{"class":180,"line":34449},[178,154102,1022],{"class":195},[178,154104,944],{"class":319},[178,154106,154107],{"class":188},"\"修改成功\"",[178,154109,863],{"class":319},[178,154111,154112],{"class":180,"line":34455},[178,154113,722],{"emptyLinePlaceholder":721},[178,154115,154116],{"class":180,"line":34461},[178,154117,722],{"emptyLinePlaceholder":721},[178,154119,154120,154122,154125],{"class":180,"line":34467},[178,154121,835],{"class":699},[178,154123,154124],{"class":184}," query_student",[178,154126,153326],{"class":319},[178,154128,154129,154131,154133,154135,154137,154140],{"class":180,"line":34473},[178,154130,153688],{"class":319},[178,154132,330],{"class":699},[178,154134,62326],{"class":195},[178,154136,944],{"class":319},[178,154138,154139],{"class":188},"\"请输入要查询的学号:\"",[178,154141,863],{"class":319},[178,154143,154144,154146,154148],{"class":180,"line":34479},[178,154145,153874],{"class":319},[178,154147,330],{"class":699},[178,154149,153879],{"class":319},[178,154151,154152],{"class":180,"line":34485},[178,154153,722],{"emptyLinePlaceholder":721},[178,154155,154156,154158,154160,154162,154164],{"class":180,"line":34505},[178,154157,922],{"class":699},[178,154159,153502],{"class":319},[178,154161,40659],{"class":699},[178,154163,40665],{"class":195},[178,154165,847],{"class":319},[178,154167,154168,154170,154172,154174],{"class":180,"line":34511},[178,154169,34183],{"class":195},[178,154171,944],{"class":319},[178,154173,153904],{"class":188},[178,154175,863],{"class":319},[178,154177,154178],{"class":180,"line":34527},[178,154179,153726],{"class":699},[178,154181,154182],{"class":180,"line":34533},[178,154183,722],{"emptyLinePlaceholder":721},[178,154185,154186],{"class":180,"line":34547},[178,154187,154188],{"class":319},"    print_student(student)\n",[178,154190,154191],{"class":180,"line":34553},[178,154192,722],{"emptyLinePlaceholder":721},[178,154194,154195],{"class":180,"line":34568},[178,154196,722],{"emptyLinePlaceholder":721},[178,154198,154199,154201,154204],{"class":180,"line":34574},[178,154200,835],{"class":699},[178,154202,154203],{"class":184}," print_student",[178,154205,154206],{"class":319},"(student):\n",[178,154208,154209,154211],{"class":180,"line":34583},[178,154210,1022],{"class":195},[178,154212,152804],{"class":319},[178,154214,154215,154218,154220,154222,154225,154228,154230,154233],{"class":180,"line":34589},[178,154216,154217],{"class":699},"        f",[178,154219,2191],{"class":188},[178,154221,2836],{"class":195},[178,154223,154224],{"class":319},"student[",[178,154226,154227],{"class":188},"'student_id'",[178,154229,2879],{"class":319},[178,154231,154232],{"class":195},"}\\t",[178,154234,26885],{"class":188},[178,154236,154237,154239,154241,154243,154245,154248,154250,154252],{"class":180,"line":34598},[178,154238,154217],{"class":699},[178,154240,2191],{"class":188},[178,154242,2836],{"class":195},[178,154244,154224],{"class":319},[178,154246,154247],{"class":188},"'name'",[178,154249,2879],{"class":319},[178,154251,154232],{"class":195},[178,154253,26885],{"class":188},[178,154255,154256,154258,154260,154262,154264,154267,154269,154271],{"class":180,"line":34604},[178,154257,154217],{"class":699},[178,154259,2191],{"class":188},[178,154261,2836],{"class":195},[178,154263,154224],{"class":319},[178,154265,154266],{"class":188},"'age'",[178,154268,2879],{"class":319},[178,154270,154232],{"class":195},[178,154272,26885],{"class":188},[178,154274,154275,154277,154279,154281,154283,154286,154288,154290],{"class":180,"line":34610},[178,154276,154217],{"class":699},[178,154278,2191],{"class":188},[178,154280,2836],{"class":195},[178,154282,154224],{"class":319},[178,154284,154285],{"class":188},"'score'",[178,154287,2879],{"class":319},[178,154289,2885],{"class":195},[178,154291,26885],{"class":188},[178,154293,154294],{"class":180,"line":34619},[178,154295,154296],{"class":319},"    )\n",[178,154298,154299],{"class":180,"line":34625},[178,154300,722],{"emptyLinePlaceholder":721},[178,154302,154303],{"class":180,"line":34636},[178,154304,722],{"emptyLinePlaceholder":721},[178,154306,154307,154309,154312],{"class":180,"line":34642},[178,154308,835],{"class":699},[178,154310,154311],{"class":184}," show_all_students",[178,154313,153326],{"class":319},[178,154315,154316,154318,154320],{"class":180,"line":34661},[178,154317,922],{"class":699},[178,154319,40662],{"class":699},[178,154321,153507],{"class":319},[178,154323,154324,154326,154328,154331],{"class":180,"line":34667},[178,154325,34183],{"class":195},[178,154327,944],{"class":319},[178,154329,154330],{"class":188},"\"暂无学生\"",[178,154332,863],{"class":319},[178,154334,154335],{"class":180,"line":34678},[178,154336,153726],{"class":699},[178,154338,154339],{"class":180,"line":34684},[178,154340,722],{"emptyLinePlaceholder":721},[178,154342,154343,154345,154347,154350,154352,154355,154357,154360,154362,154365],{"class":180,"line":34704},[178,154344,1022],{"class":195},[178,154346,944],{"class":319},[178,154348,154349],{"class":188},"\"学号",[178,154351,3040],{"class":195},[178,154353,154354],{"class":188},"姓名",[178,154356,3040],{"class":195},[178,154358,154359],{"class":188},"年龄",[178,154361,3040],{"class":195},[178,154363,154364],{"class":188},"成绩\"",[178,154366,863],{"class":319},[178,154368,154369,154371,154373,154375],{"class":180,"line":34720},[178,154370,988],{"class":699},[178,154372,153502],{"class":319},[178,154374,994],{"class":699},[178,154376,153507],{"class":319},[178,154378,154379],{"class":180,"line":34726},[178,154380,154381],{"class":319},"        print_student(student)\n",[178,154383,154384],{"class":180,"line":34740},[178,154385,722],{"emptyLinePlaceholder":721},[178,154387,154388],{"class":180,"line":34746},[178,154389,722],{"emptyLinePlaceholder":721},[178,154391,154392,154394,154396],{"class":180,"line":34752},[178,154393,835],{"class":699},[178,154395,838],{"class":184},[178,154397,33687],{"class":319},[178,154399,154400,154403,154405],{"class":180,"line":34763},[178,154401,154402],{"class":319},"    students ",[178,154404,330],{"class":699},[178,154406,154407],{"class":319}," load_students()\n",[178,154409,154410],{"class":180,"line":34769},[178,154411,722],{"emptyLinePlaceholder":721},[178,154413,154414,154416,154418],{"class":180,"line":34775},[178,154415,4035],{"class":699},[178,154417,97007],{"class":195},[178,154419,847],{"class":319},[178,154421,154422],{"class":180,"line":34785},[178,154423,154424],{"class":319},"        show_menu()\n",[178,154426,154427,154430,154432,154434,154436,154439],{"class":180,"line":34791},[178,154428,154429],{"class":319},"        choice ",[178,154431,330],{"class":699},[178,154433,62326],{"class":195},[178,154435,944],{"class":319},[178,154437,154438],{"class":188},"\"请输入操作:\"",[178,154440,863],{"class":319},[178,154442,154443],{"class":180,"line":34802},[178,154444,722],{"emptyLinePlaceholder":721},[178,154446,154447,154449,154452,154454,154457],{"class":180,"line":34808},[178,154448,4280],{"class":699},[178,154450,154451],{"class":319}," choice ",[178,154453,4725],{"class":699},[178,154455,154456],{"class":188}," \"1\"",[178,154458,847],{"class":319},[178,154460,154461],{"class":180,"line":34818},[178,154462,154463],{"class":319},"            add_student(students)\n",[178,154465,154466,154469,154471,154473,154476],{"class":180,"line":34823},[178,154467,154468],{"class":699},"        elif",[178,154470,154451],{"class":319},[178,154472,4725],{"class":699},[178,154474,154475],{"class":188}," \"2\"",[178,154477,847],{"class":319},[178,154479,154480],{"class":180,"line":34829},[178,154481,154482],{"class":319},"            delete_student(students)\n",[178,154484,154485,154487,154489,154491,154494],{"class":180,"line":34878},[178,154486,154468],{"class":699},[178,154488,154451],{"class":319},[178,154490,4725],{"class":699},[178,154492,154493],{"class":188}," \"3\"",[178,154495,847],{"class":319},[178,154497,154498],{"class":180,"line":34925},[178,154499,154500],{"class":319},"            update_student(students)\n",[178,154502,154503,154505,154507,154509,154512],{"class":180,"line":34930},[178,154504,154468],{"class":699},[178,154506,154451],{"class":319},[178,154508,4725],{"class":699},[178,154510,154511],{"class":188}," \"4\"",[178,154513,847],{"class":319},[178,154515,154516],{"class":180,"line":34936},[178,154517,154518],{"class":319},"            query_student(students)\n",[178,154520,154521,154523,154525,154527,154530],{"class":180,"line":34955},[178,154522,154468],{"class":699},[178,154524,154451],{"class":319},[178,154526,4725],{"class":699},[178,154528,154529],{"class":188}," \"5\"",[178,154531,847],{"class":319},[178,154533,154534],{"class":180,"line":34961},[178,154535,154536],{"class":319},"            show_all_students(students)\n",[178,154538,154539,154541,154543,154545,154548],{"class":180,"line":34981},[178,154540,154468],{"class":699},[178,154542,154451],{"class":319},[178,154544,4725],{"class":699},[178,154546,154547],{"class":188}," \"0\"",[178,154549,847],{"class":319},[178,154551,154552,154554,154556,154559],{"class":180,"line":34987},[178,154553,36382],{"class":195},[178,154555,944],{"class":319},[178,154557,154558],{"class":188},"\"退出系统\"",[178,154560,863],{"class":319},[178,154562,154563],{"class":180,"line":34993},[178,154564,116463],{"class":699},[178,154566,154567,154569],{"class":180,"line":35003},[178,154568,4317],{"class":699},[178,154570,847],{"class":319},[178,154572,154573,154575,154577,154580],{"class":180,"line":35008},[178,154574,36382],{"class":195},[178,154576,944],{"class":319},[178,154578,154579],{"class":188},"\"输入错误\"",[178,154581,863],{"class":319},[178,154583,154584],{"class":180,"line":35014},[178,154585,722],{"emptyLinePlaceholder":721},[178,154587,154588],{"class":180,"line":35030},[178,154589,722],{"emptyLinePlaceholder":721},[178,154591,154592,154594,154596,154598,154600],{"class":180,"line":35075},[178,154593,1085],{"class":699},[178,154595,1088],{"class":195},[178,154597,1091],{"class":699},[178,154599,1094],{"class":188},[178,154601,847],{"class":319},[178,154603,154604],{"class":180,"line":35081},[178,154605,1102],{"class":319},[19,154607,154608],{},"这个项目串联了：",[26,154610,154611,154614,154617,154620,154623,154625],{},[29,154612,154613],{},"菜单循环。",[29,154615,154616],{},"函数封装。",[29,154618,154619],{},"列表字典。",[29,154621,154622],{},"JSON 读写。",[29,154624,153092],{},[29,154626,154627,297],{},[70,154628,154629],{},"if __name__ == \"__main__\"",[14,154631,154633],{"id":154632},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,154635,154636],{},"可以进一步拆成两个类：",[26,154638,154639,154644],{},[29,154640,154641,154643],{},[70,154642,150933],{},"：表示单个学生。",[29,154645,154646,154648],{},[70,154647,152959],{},"：负责学生增删改查和文件保存。",[19,154650,154651],{},"示意代码：",[154,154653,154655],{"className":690,"code":154654,"language":692,"meta":160,"style":160},"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",[70,154656,154657,154667,154671,154675,154679,154687,154694,154700,154706,154712,154716,154724,154730,154740,154750,154760,154770,154774,154778,154784,154792,154800,154808,154816,154824,154832],{"__ignoreMap":160},[178,154658,154659,154661,154663,154665],{"class":180,"line":181},[178,154660,32479],{"class":699},[178,154662,152517],{"class":319},[178,154664,700],{"class":699},[178,154666,152522],{"class":319},[178,154668,154669],{"class":180,"line":263},[178,154670,722],{"emptyLinePlaceholder":721},[178,154672,154673],{"class":180,"line":274},[178,154674,722],{"emptyLinePlaceholder":721},[178,154676,154677],{"class":180,"line":354},[178,154678,152535],{"class":184},[178,154680,154681,154683,154685],{"class":180,"line":364},[178,154682,16453],{"class":699},[178,154684,9667],{"class":184},[178,154686,847],{"class":319},[178,154688,154689,154692],{"class":180,"line":740},[178,154690,154691],{"class":319},"    student_id: ",[178,154693,152551],{"class":195},[178,154695,154696,154698],{"class":180,"line":746},[178,154697,152548],{"class":319},[178,154699,152551],{"class":195},[178,154701,154702,154704],{"class":180,"line":752},[178,154703,152556],{"class":319},[178,154705,152559],{"class":195},[178,154707,154708,154710],{"class":180,"line":757},[178,154709,152564],{"class":319},[178,154711,152567],{"class":195},[178,154713,154714],{"class":180,"line":763},[178,154715,722],{"emptyLinePlaceholder":721},[178,154717,154718,154720,154722],{"class":180,"line":769},[178,154719,32542],{"class":699},[178,154721,152715],{"class":184},[178,154723,32548],{"class":319},[178,154725,154726,154728],{"class":180,"line":774},[178,154727,16511],{"class":699},[178,154729,17330],{"class":319},[178,154731,154732,154734,154736,154738],{"class":180,"line":780},[178,154733,152728],{"class":188},[178,154735,53167],{"class":319},[178,154737,32564],{"class":195},[178,154739,152735],{"class":319},[178,154741,154742,154744,154746,154748],{"class":180,"line":786},[178,154743,152740],{"class":188},[178,154745,53167],{"class":319},[178,154747,32564],{"class":195},[178,154749,152747],{"class":319},[178,154751,154752,154754,154756,154758],{"class":180,"line":792},[178,154753,152752],{"class":188},[178,154755,53167],{"class":319},[178,154757,32564],{"class":195},[178,154759,152759],{"class":319},[178,154761,154762,154764,154766,154768],{"class":180,"line":798},[178,154763,152764],{"class":188},[178,154765,53167],{"class":319},[178,154767,32564],{"class":195},[178,154769,152771],{"class":319},[178,154771,154772],{"class":180,"line":804},[178,154773,4312],{"class":319},[178,154775,154776],{"class":180,"line":810},[178,154777,722],{"emptyLinePlaceholder":721},[178,154779,154780,154782],{"class":180,"line":816},[178,154781,152379],{"class":184},[178,154783,152382],{"class":195},[178,154785,154786,154788,154790],{"class":180,"line":822},[178,154787,32542],{"class":699},[178,154789,152792],{"class":184},[178,154791,152795],{"class":319},[178,154793,154794,154796,154798],{"class":180,"line":827},[178,154795,16511],{"class":699},[178,154797,152399],{"class":195},[178,154799,152804],{"class":319},[178,154801,154802,154804,154806],{"class":180,"line":832},[178,154803,152809],{"class":319},[178,154805,152812],{"class":188},[178,154807,89551],{"class":319},[178,154809,154810,154812,154814],{"class":180,"line":850},[178,154811,152809],{"class":319},[178,154813,333],{"class":188},[178,154815,89551],{"class":319},[178,154817,154818,154820,154822],{"class":180,"line":866},[178,154819,152809],{"class":319},[178,154821,70844],{"class":188},[178,154823,89551],{"class":319},[178,154825,154826,154828,154830],{"class":180,"line":877},[178,154827,152809],{"class":319},[178,154829,152837],{"class":188},[178,154831,89551],{"class":319},[178,154833,154834],{"class":180,"line":882},[178,154835,39858],{"class":319},[19,154837,154838],{},"管理器示意：",[154,154840,154842],{"className":690,"code":154841,"language":692,"meta":160,"style":160},"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",[70,154843,154844,154853,154861,154872,154876,154886,154899,154910,154917,154923,154927,154936,154945,154951,154958],{"__ignoreMap":160},[178,154845,154846,154848,154851],{"class":180,"line":181},[178,154847,16453],{"class":699},[178,154849,154850],{"class":184}," StudentManager",[178,154852,847],{"class":319},[178,154854,154855,154857,154859],{"class":180,"line":263},[178,154856,32542],{"class":699},[178,154858,32545],{"class":195},[178,154860,32548],{"class":319},[178,154862,154863,154865,154868,154870],{"class":180,"line":274},[178,154864,32586],{"class":195},[178,154866,154867],{"class":319},".students ",[178,154869,330],{"class":699},[178,154871,53566],{"class":319},[178,154873,154874],{"class":180,"line":354},[178,154875,722],{"emptyLinePlaceholder":721},[178,154877,154878,154880,154883],{"class":180,"line":364},[178,154879,32542],{"class":699},[178,154881,154882],{"class":184}," find_by_id",[178,154884,154885],{"class":319},"(self, student_id):\n",[178,154887,154888,154890,154892,154894,154896],{"class":180,"line":740},[178,154889,5176],{"class":699},[178,154891,153502],{"class":319},[178,154893,994],{"class":699},[178,154895,40605],{"class":195},[178,154897,154898],{"class":319},".students:\n",[178,154900,154901,154903,154906,154908],{"class":180,"line":746},[178,154902,6413],{"class":699},[178,154904,154905],{"class":319}," student.student_id ",[178,154907,4725],{"class":699},[178,154909,153523],{"class":319},[178,154911,154912,154915],{"class":180,"line":752},[178,154913,154914],{"class":699},"                return",[178,154916,153530],{"class":319},[178,154918,154919,154921],{"class":180,"line":757},[178,154920,16511],{"class":699},[178,154922,153537],{"class":195},[178,154924,154925],{"class":180,"line":763},[178,154926,722],{"emptyLinePlaceholder":721},[178,154928,154929,154931,154933],{"class":180,"line":769},[178,154930,32542],{"class":699},[178,154932,6978],{"class":184},[178,154934,154935],{"class":319},"(self, student):\n",[178,154937,154938,154940,154942],{"class":180,"line":774},[178,154939,4280],{"class":699},[178,154941,40605],{"class":195},[178,154943,154944],{"class":319},".find_by_id(student.student_id):\n",[178,154946,154947,154949],{"class":180,"line":780},[178,154948,17490],{"class":699},[178,154950,127172],{"class":195},[178,154952,154953,154955],{"class":180,"line":786},[178,154954,32586],{"class":195},[178,154956,154957],{"class":319},".students.append(student)\n",[178,154959,154960,154962],{"class":180,"line":792},[178,154961,16511],{"class":699},[178,154963,154964],{"class":195}," True\n",[19,154966,154967],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,154969,154971],{"id":154970},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[387,154973,154975],{"id":154974},"_1251-数据结构","12.5.1 数据结构",[154,154977,154979],{"className":690,"code":154978,"language":692,"meta":160,"style":160},"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",[70,154980,154981,154989,155020,155050,155079,155108],{"__ignoreMap":160},[178,154982,154983,154985,154987],{"class":180,"line":181},[178,154984,149830],{"class":319},[178,154986,330],{"class":699},[178,154988,57168],{"class":319},[178,154990,154991,154993,154995,154997,154999,155001,155004,155006,155009,155011,155013,155015,155018],{"class":180,"line":263},[178,154992,149750],{"class":319},[178,154994,149362],{"class":188},[178,154996,53167],{"class":319},[178,154998,149973],{"class":188},[178,155000,14196],{"class":319},[178,155002,155003],{"class":188},"\"category\"",[178,155005,53167],{"class":319},[178,155007,155008],{"class":188},"\"手机\"",[178,155010,14196],{"class":319},[178,155012,85799],{"class":188},[178,155014,53167],{"class":319},[178,155016,155017],{"class":195},"12000",[178,155019,6701],{"class":319},[178,155021,155022,155024,155026,155028,155030,155032,155034,155036,155039,155041,155043,155045,155048],{"class":180,"line":274},[178,155023,149750],{"class":319},[178,155025,149362],{"class":188},[178,155027,53167],{"class":319},[178,155029,149973],{"class":188},[178,155031,14196],{"class":319},[178,155033,155003],{"class":188},[178,155035,53167],{"class":319},[178,155037,155038],{"class":188},"\"电脑\"",[178,155040,14196],{"class":319},[178,155042,85799],{"class":188},[178,155044,53167],{"class":319},[178,155046,155047],{"class":195},"18000",[178,155049,6701],{"class":319},[178,155051,155052,155054,155056,155058,155060,155062,155064,155066,155068,155070,155072,155074,155077],{"class":180,"line":354},[178,155053,149750],{"class":319},[178,155055,149362],{"class":188},[178,155057,53167],{"class":319},[178,155059,149994],{"class":188},[178,155061,14196],{"class":319},[178,155063,155003],{"class":188},[178,155065,53167],{"class":319},[178,155067,155008],{"class":188},[178,155069,14196],{"class":319},[178,155071,85799],{"class":188},[178,155073,53167],{"class":319},[178,155075,155076],{"class":195},"15000",[178,155078,6701],{"class":319},[178,155080,155081,155083,155085,155087,155089,155091,155093,155095,155097,155099,155101,155103,155106],{"class":180,"line":364},[178,155082,149750],{"class":319},[178,155084,149362],{"class":188},[178,155086,53167],{"class":319},[178,155088,149994],{"class":188},[178,155090,14196],{"class":319},[178,155092,155003],{"class":188},[178,155094,53167],{"class":319},[178,155096,155038],{"class":188},[178,155098,14196],{"class":319},[178,155100,85799],{"class":188},[178,155102,53167],{"class":319},[178,155104,155105],{"class":195},"16000",[178,155107,6701],{"class":319},[178,155109,155110],{"class":180,"line":740},[178,155111,34978],{"class":319},[387,155113,155115],{"id":155114},"_1252-按日期统计","12.5.2 按日期统计",[154,155117,155119],{"className":690,"code":155118,"language":692,"meta":160,"style":160},"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",[70,155120,155121,155130,155134,155145,155159,155172,155191,155195],{"__ignoreMap":160},[178,155122,155123,155126,155128],{"class":180,"line":181},[178,155124,155125],{"class":319},"daily_total ",[178,155127,330],{"class":699},[178,155129,89583],{"class":319},[178,155131,155132],{"class":180,"line":263},[178,155133,722],{"emptyLinePlaceholder":721},[178,155135,155136,155138,155140,155142],{"class":180,"line":274},[178,155137,1474],{"class":699},[178,155139,149574],{"class":319},[178,155141,994],{"class":699},[178,155143,155144],{"class":319}," sales:\n",[178,155146,155147,155150,155152,155155,155157],{"class":180,"line":354},[178,155148,155149],{"class":319},"    date ",[178,155151,330],{"class":699},[178,155153,155154],{"class":319}," item[",[178,155156,149362],{"class":188},[178,155158,34978],{"class":319},[178,155160,155161,155164,155166,155168,155170],{"class":180,"line":364},[178,155162,155163],{"class":319},"    amount ",[178,155165,330],{"class":699},[178,155167,155154],{"class":319},[178,155169,85799],{"class":188},[178,155171,34978],{"class":319},[178,155173,155174,155177,155179,155182,155184,155186,155188],{"class":180,"line":740},[178,155175,155176],{"class":319},"    daily_total[date] ",[178,155178,330],{"class":699},[178,155180,155181],{"class":319}," daily_total.get(date, ",[178,155183,2133],{"class":195},[178,155185,15474],{"class":319},[178,155187,2421],{"class":699},[178,155189,155190],{"class":319}," amount\n",[178,155192,155193],{"class":180,"line":746},[178,155194,722],{"emptyLinePlaceholder":721},[178,155196,155197,155199],{"class":180,"line":752},[178,155198,1504],{"class":195},[178,155200,155201],{"class":319},"(daily_total)\n",[387,155203,155205],{"id":155204},"_1253-按类别统计","12.5.3 按类别统计",[154,155207,155209],{"className":690,"code":155208,"language":692,"meta":160,"style":160},"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",[70,155210,155211,155220,155224,155234,155247,155259,155277,155281],{"__ignoreMap":160},[178,155212,155213,155216,155218],{"class":180,"line":181},[178,155214,155215],{"class":319},"category_total ",[178,155217,330],{"class":699},[178,155219,89583],{"class":319},[178,155221,155222],{"class":180,"line":263},[178,155223,722],{"emptyLinePlaceholder":721},[178,155225,155226,155228,155230,155232],{"class":180,"line":274},[178,155227,1474],{"class":699},[178,155229,149574],{"class":319},[178,155231,994],{"class":699},[178,155233,155144],{"class":319},[178,155235,155236,155239,155241,155243,155245],{"class":180,"line":354},[178,155237,155238],{"class":319},"    category ",[178,155240,330],{"class":699},[178,155242,155154],{"class":319},[178,155244,155003],{"class":188},[178,155246,34978],{"class":319},[178,155248,155249,155251,155253,155255,155257],{"class":180,"line":364},[178,155250,155163],{"class":319},[178,155252,330],{"class":699},[178,155254,155154],{"class":319},[178,155256,85799],{"class":188},[178,155258,34978],{"class":319},[178,155260,155261,155264,155266,155269,155271,155273,155275],{"class":180,"line":740},[178,155262,155263],{"class":319},"    category_total[category] ",[178,155265,330],{"class":699},[178,155267,155268],{"class":319}," category_total.get(category, ",[178,155270,2133],{"class":195},[178,155272,15474],{"class":319},[178,155274,2421],{"class":699},[178,155276,155190],{"class":319},[178,155278,155279],{"class":180,"line":746},[178,155280,722],{"emptyLinePlaceholder":721},[178,155282,155283,155285],{"class":180,"line":752},[178,155284,1504],{"class":195},[178,155286,155287],{"class":319},"(category_total)\n",[387,155289,155291],{"id":155290},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[154,155293,155295],{"className":690,"code":155294,"language":692,"meta":160,"style":160},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[70,155296,155297,155322],{"__ignoreMap":160},[178,155298,155299,155302,155304,155306,155309,155312,155315,155318,155320],{"class":180,"line":181},[178,155300,155301],{"class":319},"top_date, top_amount ",[178,155303,330],{"class":699},[178,155305,7720],{"class":195},[178,155307,155308],{"class":319},"(daily_total.items(), ",[178,155310,155311],{"class":6985},"key",[178,155313,155314],{"class":699},"=lambda",[178,155316,155317],{"class":319}," item: item[",[178,155319,1665],{"class":195},[178,155321,6428],{"class":319},[178,155323,155324,155326],{"class":180,"line":263},[178,155325,1504],{"class":195},[178,155327,155328],{"class":319},"(top_date, top_amount)\n",[14,155330,155332],{"id":155331},"_126-绘制柱状图","12.6 绘制柱状图",[154,155334,155336],{"className":690,"code":155335,"language":692,"meta":160,"style":160},"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",[70,155337,155338,155352,155363,155367,155375,155387,155399,155410,155414,155418,155428,155439,155453,155458,155475,155492,155508,155512],{"__ignoreMap":160},[178,155339,155340,155342,155344,155346,155348,155350],{"class":180,"line":181},[178,155341,32479],{"class":699},[178,155343,148744],{"class":319},[178,155345,700],{"class":699},[178,155347,148749],{"class":319},[178,155349,713],{"class":699},[178,155351,148754],{"class":319},[178,155353,155354,155356,155358,155360],{"class":180,"line":263},[178,155355,32479],{"class":699},[178,155357,148603],{"class":319},[178,155359,700],{"class":699},[178,155361,155362],{"class":319}," Bar\n",[178,155364,155365],{"class":180,"line":274},[178,155366,722],{"emptyLinePlaceholder":721},[178,155368,155369,155371,155373],{"class":180,"line":354},[178,155370,155215],{"class":319},[178,155372,330],{"class":699},[178,155374,17330],{"class":319},[178,155376,155377,155380,155382,155385],{"class":180,"line":364},[178,155378,155379],{"class":188},"    \"手机\"",[178,155381,53167],{"class":319},[178,155383,155384],{"class":195},"27000",[178,155386,33202],{"class":319},[178,155388,155389,155392,155394,155397],{"class":180,"line":740},[178,155390,155391],{"class":188},"    \"电脑\"",[178,155393,53167],{"class":319},[178,155395,155396],{"class":195},"34000",[178,155398,33202],{"class":319},[178,155400,155401,155404,155406,155408],{"class":180,"line":746},[178,155402,155403],{"class":188},"    \"耳机\"",[178,155405,53167],{"class":319},[178,155407,125764],{"class":195},[178,155409,33202],{"class":319},[178,155411,155412],{"class":180,"line":752},[178,155413,3371],{"class":319},[178,155415,155416],{"class":180,"line":757},[178,155417,722],{"emptyLinePlaceholder":721},[178,155419,155420,155423,155425],{"class":180,"line":763},[178,155421,155422],{"class":319},"bar ",[178,155424,330],{"class":699},[178,155426,155427],{"class":319}," Bar()\n",[178,155429,155430,155433,155436],{"class":180,"line":769},[178,155431,155432],{"class":319},"bar.add_xaxis(",[178,155434,155435],{"class":195},"list",[178,155437,155438],{"class":319},"(category_total.keys()))\n",[178,155440,155441,155444,155446,155448,155450],{"class":180,"line":774},[178,155442,155443],{"class":319},"bar.add_yaxis(",[178,155445,148660],{"class":188},[178,155447,14196],{"class":319},[178,155449,155435],{"class":195},[178,155451,155452],{"class":319},"(category_total.values()))\n",[178,155454,155455],{"class":180,"line":780},[178,155456,155457],{"class":319},"bar.set_global_opts(\n",[178,155459,155460,155462,155464,155466,155468,155470,155473],{"class":180,"line":786},[178,155461,148838],{"class":6985},[178,155463,330],{"class":699},[178,155465,148843],{"class":319},[178,155467,53137],{"class":6985},[178,155469,330],{"class":699},[178,155471,155472],{"class":188},"\"品类销售额\"",[178,155474,39779],{"class":319},[178,155476,155477,155479,155481,155483,155485,155487,155490],{"class":180,"line":792},[178,155478,148857],{"class":6985},[178,155480,330],{"class":699},[178,155482,148862],{"class":319},[178,155484,81529],{"class":6985},[178,155486,330],{"class":699},[178,155488,155489],{"class":188},"\"品类\"",[178,155491,39779],{"class":319},[178,155493,155494,155496,155498,155500,155502,155504,155506],{"class":180,"line":798},[178,155495,148876],{"class":6985},[178,155497,330],{"class":699},[178,155499,148862],{"class":319},[178,155501,81529],{"class":6985},[178,155503,330],{"class":699},[178,155505,148660],{"class":188},[178,155507,39779],{"class":319},[178,155509,155510],{"class":180,"line":804},[178,155511,863],{"class":319},[178,155513,155514,155517,155520],{"class":180,"line":810},[178,155515,155516],{"class":319},"bar.render(",[178,155518,155519],{"class":188},"\"category_sales.html\"",[178,155521,863],{"class":319},[14,155523,155525],{"id":155524},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,155527,155528],{},"时间线适合展示不同日期、月份、年份的数据变化。",[154,155530,155532],{"className":690,"code":155531,"language":692,"meta":160,"style":160},"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",[70,155533,155534,155548,155559,155563,155571,155595,155618,155643,155647,155651,155661,155665,155676,155685,155695,155709,155740,155745,155749],{"__ignoreMap":160},[178,155535,155536,155538,155540,155542,155544,155546],{"class":180,"line":181},[178,155537,32479],{"class":699},[178,155539,148744],{"class":319},[178,155541,700],{"class":699},[178,155543,148749],{"class":319},[178,155545,713],{"class":699},[178,155547,148754],{"class":319},[178,155549,155550,155552,155554,155556],{"class":180,"line":263},[178,155551,32479],{"class":699},[178,155553,148603],{"class":319},[178,155555,700],{"class":699},[178,155557,155558],{"class":319}," Bar, Timeline\n",[178,155560,155561],{"class":180,"line":274},[178,155562,722],{"emptyLinePlaceholder":721},[178,155564,155565,155567,155569],{"class":180,"line":354},[178,155566,103315],{"class":319},[178,155568,330],{"class":699},[178,155570,17330],{"class":319},[178,155572,155573,155576,155579,155581,155583,155585,155587,155589,155591,155593],{"class":180,"line":364},[178,155574,155575],{"class":188},"    \"2024-10-01\"",[178,155577,155578],{"class":319},": {",[178,155580,155008],{"class":188},[178,155582,53167],{"class":319},[178,155584,155017],{"class":195},[178,155586,14196],{"class":319},[178,155588,155038],{"class":188},[178,155590,53167],{"class":319},[178,155592,155047],{"class":195},[178,155594,6701],{"class":319},[178,155596,155597,155600,155602,155604,155606,155608,155610,155612,155614,155616],{"class":180,"line":740},[178,155598,155599],{"class":188},"    \"2024-10-02\"",[178,155601,155578],{"class":319},[178,155603,155008],{"class":188},[178,155605,53167],{"class":319},[178,155607,155076],{"class":195},[178,155609,14196],{"class":319},[178,155611,155038],{"class":188},[178,155613,53167],{"class":319},[178,155615,155105],{"class":195},[178,155617,6701],{"class":319},[178,155619,155620,155623,155625,155627,155629,155632,155634,155636,155638,155641],{"class":180,"line":746},[178,155621,155622],{"class":188},"    \"2024-10-03\"",[178,155624,155578],{"class":319},[178,155626,155008],{"class":188},[178,155628,53167],{"class":319},[178,155630,155631],{"class":195},"17000",[178,155633,14196],{"class":319},[178,155635,155038],{"class":188},[178,155637,53167],{"class":319},[178,155639,155640],{"class":195},"19000",[178,155642,6701],{"class":319},[178,155644,155645],{"class":180,"line":752},[178,155646,3371],{"class":319},[178,155648,155649],{"class":180,"line":757},[178,155650,722],{"emptyLinePlaceholder":721},[178,155652,155653,155656,155658],{"class":180,"line":763},[178,155654,155655],{"class":319},"timeline ",[178,155657,330],{"class":699},[178,155659,155660],{"class":319}," Timeline()\n",[178,155662,155663],{"class":180,"line":769},[178,155664,722],{"emptyLinePlaceholder":721},[178,155666,155667,155669,155672,155674],{"class":180,"line":774},[178,155668,1474],{"class":699},[178,155670,155671],{"class":319}," date, category_data ",[178,155673,994],{"class":699},[178,155675,150513],{"class":319},[178,155677,155678,155681,155683],{"class":180,"line":780},[178,155679,155680],{"class":319},"    bar ",[178,155682,330],{"class":699},[178,155684,155427],{"class":319},[178,155686,155687,155690,155692],{"class":180,"line":786},[178,155688,155689],{"class":319},"    bar.add_xaxis(",[178,155691,155435],{"class":195},[178,155693,155694],{"class":319},"(category_data.keys()))\n",[178,155696,155697,155700,155702,155704,155706],{"class":180,"line":792},[178,155698,155699],{"class":319},"    bar.add_yaxis(",[178,155701,148660],{"class":188},[178,155703,14196],{"class":319},[178,155705,155435],{"class":195},[178,155707,155708],{"class":319},"(category_data.values()))\n",[178,155710,155711,155714,155717,155719,155721,155723,155725,155727,155729,155731,155733,155735,155738],{"class":180,"line":798},[178,155712,155713],{"class":319},"    bar.set_global_opts(",[178,155715,155716],{"class":6985},"title_opts",[178,155718,330],{"class":699},[178,155720,148843],{"class":319},[178,155722,53137],{"class":6985},[178,155724,330],{"class":699},[178,155726,2002],{"class":699},[178,155728,2191],{"class":188},[178,155730,2836],{"class":195},[178,155732,75646],{"class":319},[178,155734,2885],{"class":195},[178,155736,155737],{"class":188},"销售额\"",[178,155739,32239],{"class":319},[178,155741,155742],{"class":180,"line":804},[178,155743,155744],{"class":319},"    timeline.add(bar, date)\n",[178,155746,155747],{"class":180,"line":810},[178,155748,722],{"emptyLinePlaceholder":721},[178,155750,155751,155754,155757],{"class":180,"line":816},[178,155752,155753],{"class":319},"timeline.render(",[178,155755,155756],{"class":188},"\"timeline_sales.html\"",[178,155758,863],{"class":319},[14,155760,155762],{"id":155761},"_128-绘制地图","12.8 绘制地图",[19,155764,155765],{},"地图适合展示地区数据。",[154,155767,155769],{"className":690,"code":155768,"language":692,"meta":160,"style":160},"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",[70,155770,155771,155785,155796,155800,155808,155821,155833,155846,155859,155863,155867,155877,155892,155897,155914,155933,155937],{"__ignoreMap":160},[178,155772,155773,155775,155777,155779,155781,155783],{"class":180,"line":181},[178,155774,32479],{"class":699},[178,155776,148744],{"class":319},[178,155778,700],{"class":699},[178,155780,148749],{"class":319},[178,155782,713],{"class":699},[178,155784,148754],{"class":319},[178,155786,155787,155789,155791,155793],{"class":180,"line":263},[178,155788,32479],{"class":699},[178,155790,148603],{"class":319},[178,155792,700],{"class":699},[178,155794,155795],{"class":319}," Map\n",[178,155797,155798],{"class":180,"line":274},[178,155799,722],{"emptyLinePlaceholder":721},[178,155801,155802,155804,155806],{"class":180,"line":354},[178,155803,103315],{"class":319},[178,155805,330],{"class":699},[178,155807,57168],{"class":319},[178,155809,155810,155813,155815,155817,155819],{"class":180,"line":364},[178,155811,155812],{"class":319},"    (",[178,155814,70989],{"class":188},[178,155816,14196],{"class":319},[178,155818,2757],{"class":195},[178,155820,39779],{"class":319},[178,155822,155823,155825,155827,155829,155831],{"class":180,"line":740},[178,155824,155812],{"class":319},[178,155826,71009],{"class":188},[178,155828,14196],{"class":319},[178,155830,148677],{"class":195},[178,155832,39779],{"class":319},[178,155834,155835,155837,155840,155842,155844],{"class":180,"line":746},[178,155836,155812],{"class":319},[178,155838,155839],{"class":188},"\"广东\"",[178,155841,14196],{"class":319},[178,155843,1002],{"class":195},[178,155845,39779],{"class":319},[178,155847,155848,155850,155853,155855,155857],{"class":180,"line":752},[178,155849,155812],{"class":319},[178,155851,155852],{"class":188},"\"浙江\"",[178,155854,14196],{"class":319},[178,155856,148682],{"class":195},[178,155858,39779],{"class":319},[178,155860,155861],{"class":180,"line":757},[178,155862,34978],{"class":319},[178,155864,155865],{"class":180,"line":763},[178,155866,722],{"emptyLinePlaceholder":721},[178,155868,155869,155872,155874],{"class":180,"line":769},[178,155870,155871],{"class":319},"map_chart ",[178,155873,330],{"class":699},[178,155875,155876],{"class":319}," Map()\n",[178,155878,155879,155882,155884,155887,155890],{"class":180,"line":774},[178,155880,155881],{"class":319},"map_chart.add(",[178,155883,148660],{"class":188},[178,155885,155886],{"class":319},", data, ",[178,155888,155889],{"class":188},"\"china\"",[178,155891,863],{"class":319},[178,155893,155894],{"class":180,"line":780},[178,155895,155896],{"class":319},"map_chart.set_global_opts(\n",[178,155898,155899,155901,155903,155905,155907,155909,155912],{"class":180,"line":786},[178,155900,148838],{"class":6985},[178,155902,330],{"class":699},[178,155904,148843],{"class":319},[178,155906,53137],{"class":6985},[178,155908,330],{"class":699},[178,155910,155911],{"class":188},"\"地区销售额\"",[178,155913,39779],{"class":319},[178,155915,155916,155919,155921,155924,155927,155929,155931],{"class":180,"line":792},[178,155917,155918],{"class":6985},"    visualmap_opts",[178,155920,330],{"class":699},[178,155922,155923],{"class":319},"opts.VisualMapOpts(",[178,155925,155926],{"class":6985},"max_",[178,155928,330],{"class":699},[178,155930,1002],{"class":195},[178,155932,39779],{"class":319},[178,155934,155935],{"class":180,"line":798},[178,155936,863],{"class":319},[178,155938,155939,155942,155945],{"class":180,"line":804},[178,155940,155941],{"class":319},"map_chart.render(",[178,155943,155944],{"class":188},"\"map_sales.html\"",[178,155946,863],{"class":319},[19,155948,155949],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,155951,155953],{"id":155952},"_129-项目拆分建议","12.9 项目拆分建议",[19,155955,155956],{},"当代码超过一个文件时，可以这样组织：",[154,155958,155961],{"className":155959,"code":155960,"language":159,"meta":160},[157],"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",[70,155962,155960],{"__ignoreMap":160},[19,155964,155965],{},"职责：",[26,155967,155968,155974,155980,155986],{},[29,155969,155970,155973],{},[70,155971,155972],{},"main.py","：程序入口。",[29,155975,155976,155979],{},[70,155977,155978],{},"file_utils.py","：读写 JSON。",[29,155981,155982,155985],{},[70,155983,155984],{},"sales_service.py","：统计销售数据。",[29,155987,155988,155991],{},[70,155989,155990],{},"chart_builder.py","：生成图表。",[14,155993,155995],{"id":155994},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,155997,155998],{},"语法基础：",[26,156000,156001,156004,156007,156010],{},[29,156002,156003],{},"会写变量、注释、输入输出。",[29,156005,156006],{},"会使用 int、float、str、bool。",[29,156008,156009],{},"会做类型转换。",[29,156011,156012],{},"会使用 f-string 格式化输出。",[19,156014,156015],{},"流程控制：",[26,156017,156018,156024,156030,156038],{},[29,156019,156020,156021,297],{},"会写 ",[70,156022,156023],{},"if elif else",[29,156025,156020,156026,404,156028,297],{},[70,156027,110028],{},[70,156029,1474],{},[29,156031,156032,156033,404,156035,297],{},"理解 ",[70,156034,3837],{},[70,156036,156037],{},"continue",[29,156039,156040],{},"能写嵌套循环。",[19,156042,156043],{},"函数：",[26,156045,156046,156049,156052,156055],{},[29,156047,156048],{},"会定义和调用函数。",[29,156050,156051],{},"理解参数和返回值。",[29,156053,156054],{},"知道局部变量和全局变量。",[29,156056,156057],{},"会使用默认参数、关键字参数、不定长参数。",[19,156059,156060],{},"容器：",[26,156062,156063,156066,156069,156072,156075],{},[29,156064,156065],{},"会使用列表增删改查。",[29,156067,156068],{},"会遍历列表、字典。",[29,156070,156071],{},"会使用切片。",[29,156073,156074],{},"会用集合去重。",[29,156076,156077],{},"会处理列表嵌套字典。",[19,156079,156080],{},"文件和模块：",[26,156082,156083,156086,156089,156092,156095],{},[29,156084,156085],{},"会读写文本文件。",[29,156087,156088],{},"会读写 JSON。",[29,156090,156091],{},"会捕获常见异常。",[29,156093,156094],{},"会导入模块和第三方包。",[29,156096,156097],{},"会创建简单包结构。",[19,156099,156100],{},"项目能力：",[26,156102,156103,156106,156109,156112,156115],{},[29,156104,156105],{},"能把代码拆成函数。",[29,156107,156108],{},"能把数据保存到文件。",[29,156110,156111],{},"能处理用户输入错误。",[29,156113,156114],{},"能写一个完整菜单程序。",[29,156116,156117],{},"能用 pyecharts 生成图表。",[14,156119,156121],{"id":156120},"_1211-推荐练习顺序","12.11 推荐练习顺序",[26,156123,156124,156127,156130,156133,156136,156139,156142,156145],{},[29,156125,156126],{},"猜数字游戏。",[29,156128,156129],{},"ATM 菜单程序。",[29,156131,156132],{},"学生成绩统计。",[29,156134,156135],{},"学生管理系统函数版。",[29,156137,156138],{},"学生管理系统文件持久化版。",[29,156140,156141],{},"学生管理系统面向对象版。",[29,156143,156144],{},"销售数据统计。",[29,156146,156147],{},"销售数据可视化。",[14,156149,156151],{"id":156150},"_1212-常见学习误区","12.12 常见学习误区",[26,156153,156154,156157,156160,156163,156166,156169,156172],{},[29,156155,156156],{},"只看视频不敲代码。",[29,156158,156159],{},"一报错就复制错误去搜，不先读报错位置。",[29,156161,156162],{},"变量名随便写，后续自己看不懂。",[29,156164,156165],{},"所有代码都写在一个文件一个函数里。",[29,156167,156168],{},"不保存练习代码，复习时没有材料。",[29,156170,156171],{},"还没掌握列表字典就急着学框架。",[29,156173,156174],{},"不会读官方文档，只依赖教程。",[14,156176,156178],{"id":156177},"_1213-如何读报错","12.13 如何读报错",[19,156180,156181],{},"报错通常从下往上看最后几行。",[19,156183,16893],{},[154,156185,156188],{"className":156186,"code":156187,"language":159,"meta":160},[157],"ValueError: invalid literal for int() with base 10: 'abc'\n",[70,156189,156187],{"__ignoreMap":160},[19,156191,26353],{},[26,156193,156194,156200,156210],{},[29,156195,156196,156197,297],{},"异常类型是 ",[70,156198,156199],{},"ValueError",[29,156201,108710,156202,156205,156206,156209],{},[70,156203,156204],{},"int()"," 无法把 ",[70,156207,156208],{},"'abc'"," 转成整数。",[29,156211,156212],{},"应该检查输入内容或增加异常处理。",[19,156214,156215],{},"再看文件名和行号：",[154,156217,156220],{"className":156218,"code":156219,"language":159,"meta":160},[157],"File \"main.py\", line 10, in \u003Cmodule>\n",[70,156221,156219],{"__ignoreMap":160},[19,156223,156224,156225,156227],{},"表示错误发生在 ",[70,156226,155972],{}," 第 10 行。",[14,156229,156231],{"id":156230},"_1214-后续学习方向","12.14 后续学习方向",[19,156233,156234],{},"Python 基础完成后，可以按兴趣选择方向：",[26,156236,156237,156249,156258,156270,156281,156290,156300],{},[29,156238,156239,156240,1258,156243,1258,156246,297],{},"自动化办公：",[70,156241,156242],{},"openpyxl",[70,156244,156245],{},"python-docx",[70,156247,156248],{},"pdfplumber",[29,156250,156251,156252,1258,156254,1258,156256,297],{},"数据分析：",[70,156253,102339],{},[70,156255,147550],{},[70,156257,147558],{},[29,156259,156260,156261,1258,156264,1258,156267,297],{},"Web 后端：",[70,156262,156263],{},"Flask",[70,156265,156266],{},"FastAPI",[70,156268,156269],{},"Django",[29,156271,156272,156273,1258,156275,1258,156278,297],{},"爬虫：",[70,156274,147535],{},[70,156276,156277],{},"BeautifulSoup",[70,156279,156280],{},"Scrapy",[29,156282,156283,156284,1258,156286,156289],{},"测试开发：",[70,156285,147582],{},[70,156287,156288],{},"selenium","、接口测试。",[29,156291,156292,156293,1258,156295,1258,156297,297],{},"人工智能：",[70,156294,102339],{},[70,156296,147550],{},[70,156298,156299],{},"pytorch",[29,156301,156302,156303,1258,156305,1258,156308,297],{},"运维脚本：",[70,156304,147151],{},[70,156306,156307],{},"subprocess",[70,156309,156310],{},"paramiko",[19,156312,156313],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,156315,156317],{"id":156316},"_1215-结课练习","12.15 结课练习",[26,156319,156320,156323,156326,156329,156332,156335,156338,156341],{},[29,156321,156322],{},"完成函数版学生管理系统。",[29,156324,156325],{},"给学生管理系统增加 JSON 持久化。",[29,156327,156328],{},"给学生管理系统增加异常处理。",[29,156330,156331],{},"把学生管理系统改成面向对象版。",[29,156333,156334],{},"使用 pyecharts 绘制学生成绩柱状图。",[29,156336,156337],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[29,156339,156340],{},"按品类统计销售额并绘制柱状图。",[29,156342,156343],{},"写一份自己的 Python 学习路线图。",[1853,156345,156346],{},"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":160,"searchDepth":263,"depth":263,"links":156348},[156349,156350,156353,156354,156355,156361,156362,156363,156364,156365,156366,156367,156368,156369,156370],{"id":153065,"depth":263,"text":153066},{"id":153115,"depth":263,"text":153116,"children":156351},[156352],{"id":153119,"depth":274,"text":153120},{"id":153158,"depth":263,"text":153159},{"id":154632,"depth":263,"text":154633},{"id":154970,"depth":263,"text":154971,"children":156356},[156357,156358,156359,156360],{"id":154974,"depth":274,"text":154975},{"id":155114,"depth":274,"text":155115},{"id":155204,"depth":274,"text":155205},{"id":155290,"depth":274,"text":155291},{"id":155331,"depth":263,"text":155332},{"id":155524,"depth":263,"text":155525},{"id":155761,"depth":263,"text":155762},{"id":155952,"depth":263,"text":155953},{"id":155994,"depth":263,"text":155995},{"id":156120,"depth":263,"text":156121},{"id":156150,"depth":263,"text":156151},{"id":156177,"depth":263,"text":156178},{"id":156230,"depth":263,"text":156231},{"id":156316,"depth":263,"text":156317},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153057,"description":25135},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156377,"title":156378,"body":156379,"description":25135,"extension":1880,"meta":158848,"navigation":721,"path":158849,"seo":158850,"stem":158851,"__hash__":158852},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156380,"toc":158823},[156381,156384,156388,156391,156394,156414,156417,156440,156443,156446,156468,156471,156493,156497,156500,156540,156543,156664,156668,156671,156711,156714,156738,156741,156745,156748,156762,156795,156798,156833,156836,156859,156862,156895,156898,156900,156906,156981,156984,156990,157007,157047,157051,157054,157100,157102,157140,157143,157178,157181,157216,157219,157251,157254,157273,157277,157281,157394,157396,157471,157475,157521,157524,157550,157559,157563,157566,157629,157637,157665,157669,157709,157774,157778,157781,157820,157823,157868,157871,157932,157936,157963,157966,157994,157997,158001,158005,158070,158073,158111,158114,158146,158150,158249,158253,158256,158329,158332,158380,158384,158390,158430,158433,158480,158483,158532,158536,158538,158552,158554,158735,158739,158766,158786,158793,158797,158814,158820],[10,156382,156378],{"id":156383},"_2-基础语法变量与字符串",[14,156385,156387],{"id":156386},"_21-注释","2.1 注释",[19,156389,156390],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,156392,156393],{},"单行注释：",[154,156395,156397],{"className":690,"code":156396,"language":692,"meta":160,"style":160},"# 这是单行注释\nprint(\"hello\")\n",[70,156398,156399,156404],{"__ignoreMap":160},[178,156400,156401],{"class":180,"line":181},[178,156402,156403],{"class":2008},"# 这是单行注释\n",[178,156405,156406,156408,156410,156412],{"class":180,"line":263},[178,156407,1504],{"class":195},[178,156409,944],{"class":319},[178,156411,7613],{"class":188},[178,156413,863],{"class":319},[19,156415,156416],{},"多行说明常用三引号：",[154,156418,156420],{"className":690,"code":156419,"language":692,"meta":160,"style":160},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[70,156421,156422,156426,156431,156436],{"__ignoreMap":160},[178,156423,156424],{"class":180,"line":181},[178,156425,819],{"class":188},[178,156427,156428],{"class":180,"line":263},[178,156429,156430],{"class":188},"这是多行说明。\n",[178,156432,156433],{"class":180,"line":274},[178,156434,156435],{"class":188},"常用于文件顶部说明、函数说明等。\n",[178,156437,156438],{"class":180,"line":354},[178,156439,819],{"class":188},[19,156441,156442],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,156444,156445],{},"不好：",[154,156447,156449],{"className":690,"code":156448,"language":692,"meta":160,"style":160},"# age 加 1\nage = age + 1\n",[70,156450,156451,156456],{"__ignoreMap":160},[178,156452,156453],{"class":180,"line":181},[178,156454,156455],{"class":2008},"# age 加 1\n",[178,156457,156458,156460,156462,156464,156466],{"class":180,"line":263},[178,156459,147911],{"class":319},[178,156461,330],{"class":699},[178,156463,17465],{"class":319},[178,156465,2421],{"class":699},[178,156467,57420],{"class":195},[19,156469,156470],{},"较好：",[154,156472,156474],{"className":690,"code":156473,"language":692,"meta":160,"style":160},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[70,156475,156476,156481],{"__ignoreMap":160},[178,156477,156478],{"class":180,"line":181},[178,156479,156480],{"class":2008},"# 用户过完生日后，年龄增加一岁\n",[178,156482,156483,156485,156487,156489,156491],{"class":180,"line":263},[178,156484,147911],{"class":319},[178,156486,330],{"class":699},[178,156488,17465],{"class":319},[178,156490,2421],{"class":699},[178,156492,57420],{"class":195},[14,156494,156496],{"id":156495},"_22-字面量","2.2 字面量",[19,156498,156499],{},"字面量就是代码中直接写出来的数据。",[154,156501,156503],{"className":690,"code":156502,"language":692,"meta":160,"style":160},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[70,156504,156505,156512,156519,156526,156533],{"__ignoreMap":160},[178,156506,156507,156509],{"class":180,"line":181},[178,156508,2251],{"class":195},[178,156510,156511],{"class":2008},"          # 整数\n",[178,156513,156514,156516],{"class":180,"line":263},[178,156515,1999],{"class":195},[178,156517,156518],{"class":2008},"         # 小数\n",[178,156520,156521,156523],{"class":180,"line":274},[178,156522,7613],{"class":188},[178,156524,156525],{"class":2008},"      # 字符串\n",[178,156527,156528,156530],{"class":180,"line":354},[178,156529,33212],{"class":195},[178,156531,156532],{"class":2008},"         # 布尔值\n",[178,156534,156535,156537],{"class":180,"line":364},[178,156536,844],{"class":195},[178,156538,156539],{"class":2008},"         # 空值\n",[19,156541,156542],{},"常见字面量类型：",[45,156544,156545,156555],{},[48,156546,156547],{},[51,156548,156549,156551,156553],{},[54,156550,25495],{},[54,156552,29241],{},[54,156554,27621],{},[62,156556,156557,156568,156579,156590,156602,156614,156626,156639,156651],{},[51,156558,156559,156561,156565],{},[67,156560,1956],{},[67,156562,156563],{},[70,156564,2251],{},[67,156566,156567],{},"整数",[51,156569,156570,156572,156576],{},[67,156571,1991],{},[67,156573,156574],{},[70,156575,1999],{},[67,156577,156578],{},"浮点数",[51,156580,156581,156583,156587],{},[67,156582,3109],{},[67,156584,156585],{},[70,156586,7613],{},[67,156588,156589],{},"字符串",[51,156591,156592,156594,156600],{},[67,156593,3161],{},[67,156595,156596,1258,156598],{},[70,156597,33212],{},[70,156599,35719],{},[67,156601,67735],{},[51,156603,156604,156607,156611],{},[67,156605,156606],{},"NoneType",[67,156608,156609],{},[70,156610,844],{},[67,156612,156613],{},"空值",[51,156615,156616,156618,156623],{},[67,156617,155435],{},[67,156619,156620],{},[70,156621,156622],{},"[1, 2, 3]",[67,156624,156625],{},"列表",[51,156627,156628,156631,156636],{},[67,156629,156630],{},"tuple",[67,156632,156633],{},[70,156634,156635],{},"(1, 2, 3)",[67,156637,156638],{},"元组",[51,156640,156641,156643,156648],{},[67,156642,115911],{},[67,156644,156645],{},[70,156646,156647],{},"{\"name\": \"张三\"}",[67,156649,156650],{},"字典",[51,156652,156653,156656,156661],{},[67,156654,156655],{},"set",[67,156657,156658],{},[70,156659,156660],{},"{1, 2, 3}",[67,156662,156663],{},"集合",[14,156665,156667],{"id":156666},"_23-变量","2.3 变量",[19,156669,156670],{},"变量是保存数据的名字。",[154,156672,156674],{"className":690,"code":156673,"language":692,"meta":160,"style":160},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[70,156675,156676,156684,156692,156702],{"__ignoreMap":160},[178,156677,156678,156680,156682],{"class":180,"line":181},[178,156679,147901],{"class":319},[178,156681,330],{"class":699},[178,156683,150718],{"class":188},[178,156685,156686,156688,156690],{"class":180,"line":263},[178,156687,147911],{"class":319},[178,156689,330],{"class":699},[178,156691,147916],{"class":195},[178,156693,156694,156697,156699],{"class":180,"line":274},[178,156695,156696],{"class":319},"height ",[178,156698,330],{"class":699},[178,156700,156701],{"class":195}," 1.75\n",[178,156703,156704,156707,156709],{"class":180,"line":354},[178,156705,156706],{"class":319},"is_student ",[178,156708,330],{"class":699},[178,156710,154964],{"class":195},[19,156712,156713],{},"Python 的变量不需要提前声明类型：",[154,156715,156717],{"className":690,"code":156716,"language":692,"meta":160,"style":160},"score = 100\nscore = \"满分\"\n",[70,156718,156719,156729],{"__ignoreMap":160},[178,156720,156721,156724,156726],{"class":180,"line":181},[178,156722,156723],{"class":319},"score ",[178,156725,330],{"class":699},[178,156727,156728],{"class":195}," 100\n",[178,156730,156731,156733,156735],{"class":180,"line":263},[178,156732,156723],{"class":319},[178,156734,330],{"class":699},[178,156736,156737],{"class":188}," \"满分\"\n",[19,156739,156740],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,156742,156744],{"id":156743},"_24-变量命名规则","2.4 变量命名规则",[19,156746,156747],{},"硬性规则：",[26,156749,156750,156753,156756,156759],{},[29,156751,156752],{},"只能由字母、数字、下划线组成。",[29,156754,156755],{},"不能以数字开头。",[29,156757,156758],{},"不能使用 Python 关键字。",[29,156760,156761],{},"区分大小写。",[154,156763,156765],{"className":690,"code":156764,"language":692,"meta":160,"style":160},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[70,156766,156767,156776,156785],{"__ignoreMap":160},[178,156768,156769,156772,156774],{"class":180,"line":181},[178,156770,156771],{"class":319},"user_name ",[178,156773,330],{"class":699},[178,156775,147906],{"class":188},[178,156777,156778,156781,156783],{"class":180,"line":263},[178,156779,156780],{"class":319},"age2 ",[178,156782,330],{"class":699},[178,156784,147916],{"class":195},[178,156786,156787,156790,156792],{"class":180,"line":274},[178,156788,156789],{"class":319},"_token ",[178,156791,330],{"class":699},[178,156793,156794],{"class":188}," \"abc\"\n",[19,156796,156797],{},"错误写法：",[154,156799,156801],{"className":690,"code":156800,"language":692,"meta":160,"style":160},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[70,156802,156803,156812,156824],{"__ignoreMap":160},[178,156804,156805,156808,156810],{"class":180,"line":181},[178,156806,156807],{"class":79123},"2age",[178,156809,734],{"class":699},[178,156811,147916],{"class":195},[178,156813,156814,156816,156818,156820,156822],{"class":180,"line":263},[178,156815,132949],{"class":319},[178,156817,2472],{"class":699},[178,156819,147901],{"class":319},[178,156821,330],{"class":699},[178,156823,147906],{"class":188},[178,156825,156826,156828,156830],{"class":180,"line":274},[178,156827,16453],{"class":699},[178,156829,734],{"class":699},[178,156831,156832],{"class":188}," \"一班\"\n",[19,156834,156835],{},"查看关键字：",[154,156837,156839],{"className":690,"code":156838,"language":692,"meta":160,"style":160},"import keyword\n\nprint(keyword.kwlist)\n",[70,156840,156841,156848,156852],{"__ignoreMap":160},[178,156842,156843,156845],{"class":180,"line":181},[178,156844,700],{"class":699},[178,156846,156847],{"class":319}," keyword\n",[178,156849,156850],{"class":180,"line":263},[178,156851,722],{"emptyLinePlaceholder":721},[178,156853,156854,156856],{"class":180,"line":274},[178,156855,1504],{"class":195},[178,156857,156858],{"class":319},"(keyword.kwlist)\n",[19,156860,156861],{},"推荐命名风格：",[154,156863,156865],{"className":690,"code":156864,"language":692,"meta":160,"style":160},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[70,156866,156867,156876,156886],{"__ignoreMap":160},[178,156868,156869,156872,156874],{"class":180,"line":181},[178,156870,156871],{"class":319},"student_name ",[178,156873,330],{"class":699},[178,156875,150718],{"class":188},[178,156877,156878,156881,156883],{"class":180,"line":263},[178,156879,156880],{"class":319},"total_price ",[178,156882,330],{"class":699},[178,156884,156885],{"class":195}," 99.8\n",[178,156887,156888,156891,156893],{"class":180,"line":274},[178,156889,156890],{"class":319},"is_finished ",[178,156892,330],{"class":699},[178,156894,127172],{"class":195},[19,156896,156897],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,156899,52464],{"id":52463},[19,156901,105731,156902,156905],{},[70,156903,156904],{},"type()"," 查看数据类型：",[154,156907,156909],{"className":690,"code":156908,"language":692,"meta":160,"style":160},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[70,156910,156911,156925,156939,156953,156967],{"__ignoreMap":160},[178,156912,156913,156915,156917,156919,156921,156923],{"class":180,"line":181},[178,156914,1504],{"class":195},[178,156916,944],{"class":319},[178,156918,550],{"class":195},[178,156920,944],{"class":319},[178,156922,2251],{"class":195},[178,156924,32239],{"class":319},[178,156926,156927,156929,156931,156933,156935,156937],{"class":180,"line":263},[178,156928,1504],{"class":195},[178,156930,944],{"class":319},[178,156932,550],{"class":195},[178,156934,944],{"class":319},[178,156936,1999],{"class":195},[178,156938,32239],{"class":319},[178,156940,156941,156943,156945,156947,156949,156951],{"class":180,"line":274},[178,156942,1504],{"class":195},[178,156944,944],{"class":319},[178,156946,550],{"class":195},[178,156948,944],{"class":319},[178,156950,7613],{"class":188},[178,156952,32239],{"class":319},[178,156954,156955,156957,156959,156961,156963,156965],{"class":180,"line":354},[178,156956,1504],{"class":195},[178,156958,944],{"class":319},[178,156960,550],{"class":195},[178,156962,944],{"class":319},[178,156964,33212],{"class":195},[178,156966,32239],{"class":319},[178,156968,156969,156971,156973,156975,156977,156979],{"class":180,"line":364},[178,156970,1504],{"class":195},[178,156972,944],{"class":319},[178,156974,550],{"class":195},[178,156976,944],{"class":319},[178,156978,844],{"class":195},[178,156980,32239],{"class":319},[19,156982,156983],{},"输出类似：",[154,156985,156988],{"className":156986,"code":156987,"language":159,"meta":160},[157],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[70,156989,156987],{"__ignoreMap":160},[19,156991,10786,156992,108648,156994,156996,156997,156999,157000,23258,157002,156999,157004,157006],{},[70,156993,3161],{},[70,156995,1956],{}," 的子类，",[70,156998,33212],{}," 可以当作 ",[70,157001,1665],{},[70,157003,35719],{},[70,157005,2133],{},"，但业务代码中不要滥用。",[154,157008,157010],{"className":690,"code":157009,"language":692,"meta":160,"style":160},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[70,157011,157012,157030],{"__ignoreMap":160},[178,157013,157014,157016,157018,157020,157022,157024,157027],{"class":180,"line":181},[178,157015,1504],{"class":195},[178,157017,944],{"class":319},[178,157019,33212],{"class":195},[178,157021,47298],{"class":699},[178,157023,26870],{"class":195},[178,157025,157026],{"class":319},")   ",[178,157028,157029],{"class":2008},"# 2\n",[178,157031,157032,157034,157036,157038,157040,157042,157044],{"class":180,"line":263},[178,157033,1504],{"class":195},[178,157035,944],{"class":319},[178,157037,35719],{"class":195},[178,157039,47298],{"class":699},[178,157041,26870],{"class":195},[178,157043,47540],{"class":319},[178,157045,157046],{"class":2008},"# 1\n",[14,157048,157050],{"id":157049},"_26-类型转换","2.6 类型转换",[19,157052,157053],{},"常用转换函数：",[154,157055,157057],{"className":690,"code":157056,"language":692,"meta":160,"style":160},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[70,157058,157059,157069,157080,157090],{"__ignoreMap":160},[178,157060,157061,157063,157065,157067],{"class":180,"line":181},[178,157062,1956],{"class":195},[178,157064,944],{"class":319},[178,157066,56037],{"class":188},[178,157068,863],{"class":319},[178,157070,157071,157073,157075,157078],{"class":180,"line":263},[178,157072,1991],{"class":195},[178,157074,944],{"class":319},[178,157076,157077],{"class":188},"\"3.14\"",[178,157079,863],{"class":319},[178,157081,157082,157084,157086,157088],{"class":180,"line":274},[178,157083,3109],{"class":195},[178,157085,944],{"class":319},[178,157087,2251],{"class":195},[178,157089,863],{"class":319},[178,157091,157092,157094,157096,157098],{"class":180,"line":354},[178,157093,3161],{"class":195},[178,157095,944],{"class":319},[178,157097,1665],{"class":195},[178,157099,863],{"class":319},[19,157101,16893],{},[154,157103,157105],{"className":690,"code":157104,"language":692,"meta":160,"style":160},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[70,157106,157107,157116,157127],{"__ignoreMap":160},[178,157108,157109,157111,157113],{"class":180,"line":181},[178,157110,147911],{"class":319},[178,157112,330],{"class":699},[178,157114,157115],{"class":188}," \"18\"\n",[178,157117,157118,157120,157122,157124],{"class":180,"line":263},[178,157119,147911],{"class":319},[178,157121,330],{"class":699},[178,157123,4166],{"class":195},[178,157125,157126],{"class":319},"(age)\n",[178,157128,157129,157131,157134,157136,157138],{"class":180,"line":274},[178,157130,1504],{"class":195},[178,157132,157133],{"class":319},"(age ",[178,157135,2421],{"class":699},[178,157137,26870],{"class":195},[178,157139,863],{"class":319},[19,157141,157142],{},"输入得到的内容永远是字符串：",[154,157144,157146],{"className":690,"code":157145,"language":692,"meta":160,"style":160},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[70,157147,157148,157164],{"__ignoreMap":160},[178,157149,157150,157153,157155,157157,157159,157162],{"class":180,"line":181},[178,157151,157152],{"class":319},"num ",[178,157154,330],{"class":699},[178,157156,62326],{"class":195},[178,157158,944],{"class":319},[178,157160,157161],{"class":188},"\"请输入数字:\"",[178,157163,863],{"class":319},[178,157165,157166,157168,157170,157172,157175],{"class":180,"line":263},[178,157167,1504],{"class":195},[178,157169,944],{"class":319},[178,157171,550],{"class":195},[178,157173,157174],{"class":319},"(num))  ",[178,157176,157177],{"class":2008},"# str\n",[19,157179,157180],{},"如果要做数学运算，必须转换：",[154,157182,157184],{"className":690,"code":157183,"language":692,"meta":160,"style":160},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[70,157185,157186,157204],{"__ignoreMap":160},[178,157187,157188,157190,157192,157194,157196,157198,157200,157202],{"class":180,"line":181},[178,157189,157152],{"class":319},[178,157191,330],{"class":699},[178,157193,4166],{"class":195},[178,157195,944],{"class":319},[178,157197,55543],{"class":195},[178,157199,944],{"class":319},[178,157201,157161],{"class":188},[178,157203,32239],{"class":319},[178,157205,157206,157208,157210,157212,157214],{"class":180,"line":263},[178,157207,1504],{"class":195},[178,157209,47351],{"class":319},[178,157211,2421],{"class":699},[178,157213,3822],{"class":195},[178,157215,863],{"class":319},[19,157217,157218],{},"常见错误：",[154,157220,157222],{"className":690,"code":157221,"language":692,"meta":160,"style":160},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[70,157223,157224,157237],{"__ignoreMap":160},[178,157225,157226,157228,157230,157232,157234],{"class":180,"line":181},[178,157227,1956],{"class":195},[178,157229,944],{"class":319},[178,157231,157077],{"class":188},[178,157233,157026],{"class":319},[178,157235,157236],{"class":2008},"# 错误\n",[178,157238,157239,157241,157243,157246,157249],{"class":180,"line":263},[178,157240,1956],{"class":195},[178,157242,944],{"class":319},[178,157244,157245],{"class":188},"\"abc\"",[178,157247,157248],{"class":319},")    ",[178,157250,157236],{"class":2008},[19,157252,157253],{},"正确写法：",[154,157255,157257],{"className":690,"code":157256,"language":692,"meta":160,"style":160},"num = float(\"3.14\")\n",[70,157258,157259],{"__ignoreMap":160},[178,157260,157261,157263,157265,157267,157269,157271],{"class":180,"line":181},[178,157262,157152],{"class":319},[178,157264,330],{"class":699},[178,157266,111162],{"class":195},[178,157268,944],{"class":319},[178,157270,157077],{"class":188},[178,157272,863],{"class":319},[14,157274,157276],{"id":157275},"_27-运算符","2.7 运算符",[387,157278,157280],{"id":157279},"_271-算术运算符","2.7.1 算术运算符",[45,157282,157283,157294],{},[48,157284,157285],{},[51,157286,157287,157290,157292],{},[54,157288,157289],{},"运算符",[54,157291,27621],{},[54,157293,29241],{},[62,157295,157296,157310,157324,157338,157352,157366,157380],{},[51,157297,157298,157302,157305],{},[67,157299,157300],{},[70,157301,2421],{},[67,157303,157304],{},"加法",[67,157306,157307],{},[70,157308,157309],{},"1 + 2",[51,157311,157312,157316,157319],{},[67,157313,157314],{},[70,157315,2472],{},[67,157317,157318],{},"减法",[67,157320,157321],{},[70,157322,157323],{},"5 - 3",[51,157325,157326,157330,157333],{},[67,157327,157328],{},[70,157329,2395],{},[67,157331,157332],{},"乘法",[67,157334,157335],{},[70,157336,157337],{},"2 * 3",[51,157339,157340,157344,157347],{},[67,157341,157342],{},[70,157343,2524],{},[67,157345,157346],{},"除法，结果是浮点数",[67,157348,157349],{},[70,157350,157351],{},"5 \u002F 2",[51,157353,157354,157358,157361],{},[67,157355,157356],{},[70,157357,35061],{},[67,157359,157360],{},"整除",[67,157362,157363],{},[70,157364,157365],{},"5 \u002F\u002F 2",[51,157367,157368,157372,157375],{},[67,157369,157370],{},[70,157371,2268],{},[67,157373,157374],{},"取余",[67,157376,157377],{},[70,157378,157379],{},"5 % 2",[51,157381,157382,157386,157389],{},[67,157383,157384],{},[70,157385,12422],{},[67,157387,157388],{},"幂运算",[67,157390,157391],{},[70,157392,157393],{},"2 ** 3",[19,157395,16893],{},[154,157397,157399],{"className":690,"code":157398,"language":692,"meta":160,"style":160},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[70,157400,157401,157419,157436,157453],{"__ignoreMap":160},[178,157402,157403,157405,157407,157409,157412,157414,157416],{"class":180,"line":181},[178,157404,1504],{"class":195},[178,157406,944],{"class":319},[178,157408,2259],{"class":195},[178,157410,157411],{"class":699}," \u002F",[178,157413,16514],{"class":195},[178,157415,157026],{"class":319},[178,157417,157418],{"class":2008},"# 2.5\n",[178,157420,157421,157423,157425,157427,157430,157432,157434],{"class":180,"line":263},[178,157422,1504],{"class":195},[178,157424,944],{"class":319},[178,157426,2259],{"class":195},[178,157428,157429],{"class":699}," \u002F\u002F",[178,157431,16514],{"class":195},[178,157433,47540],{"class":319},[178,157435,157029],{"class":2008},[178,157437,157438,157440,157442,157444,157447,157449,157451],{"class":180,"line":274},[178,157439,1504],{"class":195},[178,157441,944],{"class":319},[178,157443,2259],{"class":195},[178,157445,157446],{"class":699}," %",[178,157448,16514],{"class":195},[178,157450,157026],{"class":319},[178,157452,157046],{"class":2008},[178,157454,157455,157457,157459,157461,157464,157466,157468],{"class":180,"line":354},[178,157456,1504],{"class":195},[178,157458,944],{"class":319},[178,157460,1669],{"class":195},[178,157462,157463],{"class":699}," **",[178,157465,79790],{"class":195},[178,157467,47540],{"class":319},[178,157469,157470],{"class":2008},"# 8\n",[387,157472,157474],{"id":157473},"_272-赋值运算符","2.7.2 赋值运算符",[154,157476,157478],{"className":690,"code":157477,"language":692,"meta":160,"style":160},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[70,157479,157480,157488,157496,157504,157512],{"__ignoreMap":160},[178,157481,157482,157484,157486],{"class":180,"line":181},[178,157483,157152],{"class":319},[178,157485,330],{"class":699},[178,157487,60149],{"class":195},[178,157489,157490,157492,157494],{"class":180,"line":263},[178,157491,157152],{"class":319},[178,157493,11238],{"class":699},[178,157495,56148],{"class":195},[178,157497,157498,157500,157502],{"class":180,"line":274},[178,157499,157152],{"class":319},[178,157501,151617],{"class":699},[178,157503,49455],{"class":195},[178,157505,157506,157508,157510],{"class":180,"line":354},[178,157507,157152],{"class":319},[178,157509,138513],{"class":699},[178,157511,121401],{"class":195},[178,157513,157514,157516,157519],{"class":180,"line":364},[178,157515,157152],{"class":319},[178,157517,157518],{"class":699},"\u002F=",[178,157520,49455],{"class":195},[19,157522,157523],{},"等价关系：",[154,157525,157527],{"className":690,"code":157526,"language":692,"meta":160,"style":160},"num += 1\nnum = num + 1\n",[70,157528,157529,157537],{"__ignoreMap":160},[178,157530,157531,157533,157535],{"class":180,"line":181},[178,157532,157152],{"class":319},[178,157534,11238],{"class":699},[178,157536,57420],{"class":195},[178,157538,157539,157541,157543,157546,157548],{"class":180,"line":263},[178,157540,157152],{"class":319},[178,157542,330],{"class":699},[178,157544,157545],{"class":319}," num ",[178,157547,2421],{"class":699},[178,157549,57420],{"class":195},[19,157551,157552,157553,404,157556,297],{},"Python 没有 ",[70,157554,157555],{},"num++",[70,157557,157558],{},"num--",[387,157560,157562],{"id":157561},"_273-比较运算符","2.7.3 比较运算符",[19,157564,157565],{},"比较运算结果是布尔值。",[154,157567,157569],{"className":690,"code":157568,"language":692,"meta":160,"style":160},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[70,157570,157571,157585,157600,157614],{"__ignoreMap":160},[178,157572,157573,157575,157577,157579,157581,157583],{"class":180,"line":181},[178,157574,1504],{"class":195},[178,157576,944],{"class":319},[178,157578,2386],{"class":195},[178,157580,27973],{"class":699},[178,157582,3932],{"class":195},[178,157584,863],{"class":319},[178,157586,157587,157589,157591,157593,157596,157598],{"class":180,"line":263},[178,157588,1504],{"class":195},[178,157590,944],{"class":319},[178,157592,2386],{"class":195},[178,157594,157595],{"class":699}," >=",[178,157597,3822],{"class":195},[178,157599,863],{"class":319},[178,157601,157602,157604,157606,157608,157610,157612],{"class":180,"line":274},[178,157603,1504],{"class":195},[178,157605,944],{"class":319},[178,157607,2386],{"class":195},[178,157609,1091],{"class":699},[178,157611,3867],{"class":195},[178,157613,863],{"class":319},[178,157615,157616,157618,157620,157622,157625,157627],{"class":180,"line":354},[178,157617,1504],{"class":195},[178,157619,944],{"class":319},[178,157621,2386],{"class":195},[178,157623,157624],{"class":699}," !=",[178,157626,3867],{"class":195},[178,157628,863],{"class":319},[19,157630,157631,157632,157634,157635,297],{},"注意：判断相等用 ",[70,157633,4725],{},"，赋值用 ",[70,157636,330],{},[154,157638,157640],{"className":690,"code":157639,"language":692,"meta":160,"style":160},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[70,157641,157642,157654],{"__ignoreMap":160},[178,157643,157644,157646,157648,157651],{"class":180,"line":181},[178,157645,147911],{"class":319},[178,157647,330],{"class":699},[178,157649,157650],{"class":195}," 18",[178,157652,157653],{"class":2008},"       # 赋值\n",[178,157655,157656,157658,157660,157662],{"class":180,"line":263},[178,157657,147911],{"class":319},[178,157659,4725],{"class":699},[178,157661,157650],{"class":195},[178,157663,157664],{"class":2008},"      # 判断是否相等\n",[387,157666,157668],{"id":157667},"_274-逻辑运算符","2.7.4 逻辑运算符",[45,157670,157671,157679],{},[48,157672,157673],{},[51,157674,157675,157677],{},[54,157676,157289],{},[54,157678,27621],{},[62,157680,157681,157690,157699],{},[51,157682,157683,157687],{},[67,157684,157685],{},[70,157686,32204],{},[67,157688,157689],{},"并且",[51,157691,157692,157696],{},[67,157693,157694],{},[70,157695,116455],{},[67,157697,157698],{},"或者",[51,157700,157701,157706],{},[67,157702,157703],{},[70,157704,157705],{},"not",[67,157707,157708],{},"取反",[154,157710,157712],{"className":690,"code":157711,"language":692,"meta":160,"style":160},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[70,157713,157714,157722,157731,157735,157750,157764],{"__ignoreMap":160},[178,157715,157716,157718,157720],{"class":180,"line":181},[178,157717,147911],{"class":319},[178,157719,330],{"class":699},[178,157721,89780],{"class":195},[178,157723,157724,157727,157729],{"class":180,"line":263},[178,157725,157726],{"class":319},"has_ticket ",[178,157728,330],{"class":699},[178,157730,154964],{"class":195},[178,157732,157733],{"class":180,"line":274},[178,157734,722],{"emptyLinePlaceholder":721},[178,157736,157737,157739,157741,157743,157745,157747],{"class":180,"line":354},[178,157738,1504],{"class":195},[178,157740,157133],{"class":319},[178,157742,3505],{"class":699},[178,157744,157650],{"class":195},[178,157746,121794],{"class":699},[178,157748,157749],{"class":319}," has_ticket)\n",[178,157751,157752,157754,157756,157758,157760,157762],{"class":180,"line":364},[178,157753,1504],{"class":195},[178,157755,157133],{"class":319},[178,157757,320],{"class":699},[178,157759,157650],{"class":195},[178,157761,115566],{"class":699},[178,157763,157749],{"class":319},[178,157765,157766,157768,157770,157772],{"class":180,"line":740},[178,157767,1504],{"class":195},[178,157769,944],{"class":319},[178,157771,157705],{"class":699},[178,157773,157749],{"class":319},[14,157775,157777],{"id":157776},"_28-字符串定义","2.8 字符串定义",[19,157779,157780],{},"三种常见写法：",[154,157782,157784],{"className":690,"code":157783,"language":692,"meta":160,"style":160},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[70,157785,157786,157796,157805,157815],{"__ignoreMap":160},[178,157787,157788,157791,157793],{"class":180,"line":181},[178,157789,157790],{"class":319},"name1 ",[178,157792,330],{"class":699},[178,157794,157795],{"class":188}," '小明'\n",[178,157797,157798,157801,157803],{"class":180,"line":263},[178,157799,157800],{"class":319},"name2 ",[178,157802,330],{"class":699},[178,157804,150718],{"class":188},[178,157806,157807,157810,157812],{"class":180,"line":274},[178,157808,157809],{"class":319},"text ",[178,157811,330],{"class":699},[178,157813,157814],{"class":188}," \"\"\"这是多行字符串\n",[178,157816,157817],{"class":180,"line":354},[178,157818,157819],{"class":188},"可以换行\"\"\"\n",[19,157821,157822],{},"字符串中包含引号：",[154,157824,157826],{"className":690,"code":157825,"language":692,"meta":160,"style":160},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[70,157827,157828,157838,157848],{"__ignoreMap":160},[178,157829,157830,157833,157835],{"class":180,"line":181},[178,157831,157832],{"class":319},"msg ",[178,157834,330],{"class":699},[178,157836,157837],{"class":188}," \"他说:'你好'\"\n",[178,157839,157840,157843,157845],{"class":180,"line":263},[178,157841,157842],{"class":319},"msg2 ",[178,157844,330],{"class":699},[178,157846,157847],{"class":188}," '他说:\"你好\"'\n",[178,157849,157850,157853,157855,157858,157861,157864,157866],{"class":180,"line":274},[178,157851,157852],{"class":319},"msg3 ",[178,157854,330],{"class":699},[178,157856,157857],{"class":188}," \"他说:",[178,157859,157860],{"class":195},"\\\"",[178,157862,157863],{"class":188},"你好",[178,157865,157860],{"class":195},[178,157867,26885],{"class":188},[19,157869,157870],{},"常见转义字符：",[45,157872,157873,157882],{},[48,157874,157875],{},[51,157876,157877,157880],{},[54,157878,157879],{},"写法",[54,157881,573],{},[62,157883,157884,157894,157903,157913,157922],{},[51,157885,157886,157891],{},[67,157887,157888],{},[70,157889,157890],{},"\\n",[67,157892,157893],{},"换行",[51,157895,157896,157900],{},[67,157897,157898],{},[70,157899,3040],{},[67,157901,157902],{},"制表符",[51,157904,157905,157910],{},[67,157906,157907],{},[70,157908,157909],{},"\\\\",[67,157911,157912],{},"反斜杠",[51,157914,157915,157919],{},[67,157916,157917],{},[70,157918,157860],{},[67,157920,157921],{},"双引号",[51,157923,157924,157929],{},[67,157925,157926],{},[70,157927,157928],{},"\\'",[67,157930,157931],{},"单引号",[14,157933,157935],{"id":157934},"_29-字符串拼接","2.9 字符串拼接",[154,157937,157939],{"className":690,"code":157938,"language":692,"meta":160,"style":160},"name = \"小明\"\nprint(\"你好，\" + name)\n",[70,157940,157941,157949],{"__ignoreMap":160},[178,157942,157943,157945,157947],{"class":180,"line":181},[178,157944,147901],{"class":319},[178,157946,330],{"class":699},[178,157948,150718],{"class":188},[178,157950,157951,157953,157955,157958,157960],{"class":180,"line":263},[178,157952,1504],{"class":195},[178,157954,944],{"class":319},[178,157956,157957],{"class":188},"\"你好，\"",[178,157959,47298],{"class":699},[178,157961,157962],{"class":319}," name)\n",[19,157964,157965],{},"字符串只能和字符串拼接：",[154,157967,157969],{"className":690,"code":157968,"language":692,"meta":160,"style":160},"age = 18\nprint(\"年龄:\" + str(age))\n",[70,157970,157971,157979],{"__ignoreMap":160},[178,157972,157973,157975,157977],{"class":180,"line":181},[178,157974,147911],{"class":319},[178,157976,330],{"class":699},[178,157978,147916],{"class":195},[178,157980,157981,157983,157985,157987,157989,157991],{"class":180,"line":263},[178,157982,1504],{"class":195},[178,157984,944],{"class":319},[178,157986,147882],{"class":188},[178,157988,47298],{"class":699},[178,157990,75639],{"class":195},[178,157992,157993],{"class":319},"(age))\n",[19,157995,157996],{},"更推荐使用格式化字符串。",[14,157998,158000],{"id":157999},"_210-字符串格式化","2.10 字符串格式化",[387,158002,158004],{"id":158003},"_2101-百分号格式化","2.10.1 百分号格式化",[154,158006,158008],{"className":690,"code":158007,"language":692,"meta":160,"style":160},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[70,158009,158010,158018,158026,158035,158039],{"__ignoreMap":160},[178,158011,158012,158014,158016],{"class":180,"line":181},[178,158013,147901],{"class":319},[178,158015,330],{"class":699},[178,158017,150718],{"class":188},[178,158019,158020,158022,158024],{"class":180,"line":263},[178,158021,147911],{"class":319},[178,158023,330],{"class":699},[178,158025,147916],{"class":195},[178,158027,158028,158030,158032],{"class":180,"line":274},[178,158029,156723],{"class":319},[178,158031,330],{"class":699},[178,158033,158034],{"class":195}," 95.5\n",[178,158036,158037],{"class":180,"line":354},[178,158038,722],{"emptyLinePlaceholder":721},[178,158040,158041,158043,158045,158048,158051,158054,158057,158060,158063,158065,158067],{"class":180,"line":364},[178,158042,1504],{"class":195},[178,158044,944],{"class":319},[178,158046,158047],{"class":188},"\"姓名:",[178,158049,158050],{"class":195},"%s",[178,158052,158053],{"class":188}," 年龄:",[178,158055,158056],{"class":195},"%d",[178,158058,158059],{"class":188}," 分数:",[178,158061,158062],{"class":195},"%.1f",[178,158064,2191],{"class":188},[178,158066,157446],{"class":699},[178,158068,158069],{"class":319}," (name, age, score))\n",[19,158071,158072],{},"常用占位符：",[45,158074,158075,158084],{},[48,158076,158077],{},[51,158078,158079,158082],{},[54,158080,158081],{},"占位符",[54,158083,27621],{},[62,158085,158086,158094,158102],{},[51,158087,158088,158092],{},[67,158089,158090],{},[70,158091,158050],{},[67,158093,156589],{},[51,158095,158096,158100],{},[67,158097,158098],{},[70,158099,158056],{},[67,158101,156567],{},[51,158103,158104,158109],{},[67,158105,158106],{},[70,158107,158108],{},"%f",[67,158110,156578],{},[19,158112,158113],{},"精度控制：",[154,158115,158117],{"className":690,"code":158116,"language":692,"meta":160,"style":160},"price = 12.3456\nprint(\"%.2f\" % price)\n",[70,158118,158119,158128],{"__ignoreMap":160},[178,158120,158121,158123,158125],{"class":180,"line":181},[178,158122,148046],{"class":319},[178,158124,330],{"class":699},[178,158126,158127],{"class":195}," 12.3456\n",[178,158129,158130,158132,158134,158136,158139,158141,158143],{"class":180,"line":263},[178,158131,1504],{"class":195},[178,158133,944],{"class":319},[178,158135,2191],{"class":188},[178,158137,158138],{"class":195},"%.2f",[178,158140,2191],{"class":188},[178,158142,157446],{"class":699},[178,158144,158145],{"class":319}," price)\n",[387,158147,158149],{"id":158148},"_2102-format方法","2.10.2 format方法",[154,158151,158153],{"className":690,"code":158152,"language":692,"meta":160,"style":160},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[70,158154,158155,158163,158171,158175,158194,158214],{"__ignoreMap":160},[178,158156,158157,158159,158161],{"class":180,"line":181},[178,158158,147901],{"class":319},[178,158160,330],{"class":699},[178,158162,150718],{"class":188},[178,158164,158165,158167,158169],{"class":180,"line":263},[178,158166,147911],{"class":319},[178,158168,330],{"class":699},[178,158170,147916],{"class":195},[178,158172,158173],{"class":180,"line":274},[178,158174,722],{"emptyLinePlaceholder":721},[178,158176,158177,158179,158181,158183,158185,158187,158189,158191],{"class":180,"line":354},[178,158178,1504],{"class":195},[178,158180,944],{"class":319},[178,158182,158047],{"class":188},[178,158184,34191],{"class":195},[178,158186,158053],{"class":188},[178,158188,34191],{"class":195},[178,158190,2191],{"class":188},[178,158192,158193],{"class":319},".format(name, age))\n",[178,158195,158196,158198,158200,158202,158205,158207,158210,158212],{"class":180,"line":364},[178,158197,1504],{"class":195},[178,158199,944],{"class":319},[178,158201,158047],{"class":188},[178,158203,158204],{"class":195},"{0}",[178,158206,158053],{"class":188},[178,158208,158209],{"class":195},"{1}",[178,158211,2191],{"class":188},[178,158213,158193],{"class":319},[178,158215,158216,158218,158220,158222,158225,158227,158230,158232,158235,158237,158239,158242,158244,158246],{"class":180,"line":740},[178,158217,1504],{"class":195},[178,158219,944],{"class":319},[178,158221,158047],{"class":188},[178,158223,158224],{"class":195},"{name}",[178,158226,158053],{"class":188},[178,158228,158229],{"class":195},"{age}",[178,158231,2191],{"class":188},[178,158233,158234],{"class":319},".format(",[178,158236,81529],{"class":6985},[178,158238,330],{"class":699},[178,158240,158241],{"class":319},"name, ",[178,158243,71941],{"class":6985},[178,158245,330],{"class":699},[178,158247,158248],{"class":319},"age))\n",[387,158250,158252],{"id":158251},"_2103-f-string","2.10.3 f-string",[19,158254,158255],{},"推荐写法：",[154,158257,158259],{"className":690,"code":158258,"language":692,"meta":160,"style":160},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[70,158260,158261,158269,158277,158285,158289],{"__ignoreMap":160},[178,158262,158263,158265,158267],{"class":180,"line":181},[178,158264,147901],{"class":319},[178,158266,330],{"class":699},[178,158268,150718],{"class":188},[178,158270,158271,158273,158275],{"class":180,"line":263},[178,158272,147911],{"class":319},[178,158274,330],{"class":699},[178,158276,147916],{"class":195},[178,158278,158279,158281,158283],{"class":180,"line":274},[178,158280,156723],{"class":319},[178,158282,330],{"class":699},[178,158284,158034],{"class":195},[178,158286,158287],{"class":180,"line":354},[178,158288,722],{"emptyLinePlaceholder":721},[178,158290,158291,158293,158295,158297,158299,158301,158303,158305,158307,158309,158311,158313,158315,158317,158320,158323,158325,158327],{"class":180,"line":364},[178,158292,1504],{"class":195},[178,158294,944],{"class":319},[178,158296,2002],{"class":699},[178,158298,158047],{"class":188},[178,158300,2836],{"class":195},[178,158302,81529],{"class":319},[178,158304,2885],{"class":195},[178,158306,158053],{"class":188},[178,158308,2836],{"class":195},[178,158310,71941],{"class":319},[178,158312,2885],{"class":195},[178,158314,158059],{"class":188},[178,158316,2836],{"class":195},[178,158318,158319],{"class":319},"score",[178,158321,158322],{"class":699},":.1f",[178,158324,2885],{"class":195},[178,158326,2191],{"class":188},[178,158328,863],{"class":319},[19,158330,158331],{},"表达式也可以放进去：",[154,158333,158335],{"className":690,"code":158334,"language":692,"meta":160,"style":160},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[70,158336,158337,158345,158353],{"__ignoreMap":160},[178,158338,158339,158341,158343],{"class":180,"line":181},[178,158340,148046],{"class":319},[178,158342,330],{"class":699},[178,158344,148051],{"class":195},[178,158346,158347,158349,158351],{"class":180,"line":263},[178,158348,148056],{"class":319},[178,158350,330],{"class":699},[178,158352,56148],{"class":195},[178,158354,158355,158357,158359,158361,158364,158366,158368,158370,158373,158375,158378],{"class":180,"line":274},[178,158356,1504],{"class":195},[178,158358,944],{"class":319},[178,158360,2002],{"class":699},[178,158362,158363],{"class":188},"\"总价:",[178,158365,2836],{"class":195},[178,158367,148046],{"class":319},[178,158369,2395],{"class":699},[178,158371,158372],{"class":319}," count",[178,158374,2885],{"class":195},[178,158376,158377],{"class":188},"元\"",[178,158379,863],{"class":319},[14,158381,158383],{"id":158382},"_211-input输入","2.11 input输入",[19,158385,158386,158389],{},[70,158387,158388],{},"input()"," 会暂停程序，等待用户输入。",[154,158391,158393],{"className":690,"code":158392,"language":692,"meta":160,"style":160},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[70,158394,158395,158409],{"__ignoreMap":160},[178,158396,158397,158399,158401,158403,158405,158407],{"class":180,"line":181},[178,158398,147901],{"class":319},[178,158400,330],{"class":699},[178,158402,62326],{"class":195},[178,158404,944],{"class":319},[178,158406,153744],{"class":188},[178,158408,863],{"class":319},[178,158410,158411,158413,158415,158417,158420,158422,158424,158426,158428],{"class":180,"line":263},[178,158412,1504],{"class":195},[178,158414,944],{"class":319},[178,158416,2002],{"class":699},[178,158418,158419],{"class":188},"\"你好，",[178,158421,2836],{"class":195},[178,158423,81529],{"class":319},[178,158425,2885],{"class":195},[178,158427,2191],{"class":188},[178,158429,863],{"class":319},[19,158431,158432],{},"输入整数：",[154,158434,158436],{"className":690,"code":158435,"language":692,"meta":160,"style":160},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[70,158437,158438,158456],{"__ignoreMap":160},[178,158439,158440,158442,158444,158446,158448,158450,158452,158454],{"class":180,"line":181},[178,158441,147911],{"class":319},[178,158443,330],{"class":699},[178,158445,4166],{"class":195},[178,158447,944],{"class":319},[178,158449,55543],{"class":195},[178,158451,944],{"class":319},[178,158453,153759],{"class":188},[178,158455,32239],{"class":319},[178,158457,158458,158460,158462,158464,158467,158469,158471,158473,158476,158478],{"class":180,"line":263},[178,158459,1504],{"class":195},[178,158461,944],{"class":319},[178,158463,2002],{"class":699},[178,158465,158466],{"class":188},"\"明年你",[178,158468,2836],{"class":195},[178,158470,147911],{"class":319},[178,158472,2421],{"class":699},[178,158474,158475],{"class":195}," 1}",[178,158477,150769],{"class":188},[178,158479,863],{"class":319},[19,158481,158482],{},"输入小数：",[154,158484,158486],{"className":690,"code":158485,"language":692,"meta":160,"style":160},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[70,158487,158488,158507],{"__ignoreMap":160},[178,158489,158490,158492,158494,158496,158498,158500,158502,158505],{"class":180,"line":181},[178,158491,156696],{"class":319},[178,158493,330],{"class":699},[178,158495,111162],{"class":195},[178,158497,944],{"class":319},[178,158499,55543],{"class":195},[178,158501,944],{"class":319},[178,158503,158504],{"class":188},"\"请输入身高:\"",[178,158506,32239],{"class":319},[178,158508,158509,158511,158513,158515,158518,158520,158522,158525,158527,158530],{"class":180,"line":263},[178,158510,1504],{"class":195},[178,158512,944],{"class":319},[178,158514,2002],{"class":699},[178,158516,158517],{"class":188},"\"身高:",[178,158519,2836],{"class":195},[178,158521,26734],{"class":319},[178,158523,158524],{"class":699},":.2f",[178,158526,2885],{"class":195},[178,158528,158529],{"class":188},"米\"",[178,158531,863],{"class":319},[14,158533,158535],{"id":158534},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,158537,124657],{},[26,158539,158540,158543,158546,158549],{},[29,158541,158542],{},"输入商品单价。",[29,158544,158545],{},"输入购买数量。",[29,158547,158548],{},"输入折扣，例如 0.8 表示八折。",[29,158550,158551],{},"输出最终金额，保留两位小数。",[19,158553,11796],{},[154,158555,158557],{"className":690,"code":158556,"language":692,"meta":160,"style":160},"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",[70,158558,158559,158578,158597,158617,158621,158641,158645,158668,158689,158711],{"__ignoreMap":160},[178,158560,158561,158563,158565,158567,158569,158571,158573,158576],{"class":180,"line":181},[178,158562,148046],{"class":319},[178,158564,330],{"class":699},[178,158566,111162],{"class":195},[178,158568,944],{"class":319},[178,158570,55543],{"class":195},[178,158572,944],{"class":319},[178,158574,158575],{"class":188},"\"请输入商品单价:\"",[178,158577,32239],{"class":319},[178,158579,158580,158582,158584,158586,158588,158590,158592,158595],{"class":180,"line":263},[178,158581,148056],{"class":319},[178,158583,330],{"class":699},[178,158585,4166],{"class":195},[178,158587,944],{"class":319},[178,158589,55543],{"class":195},[178,158591,944],{"class":319},[178,158593,158594],{"class":188},"\"请输入购买数量:\"",[178,158596,32239],{"class":319},[178,158598,158599,158602,158604,158606,158608,158610,158612,158615],{"class":180,"line":274},[178,158600,158601],{"class":319},"discount ",[178,158603,330],{"class":699},[178,158605,111162],{"class":195},[178,158607,944],{"class":319},[178,158609,55543],{"class":195},[178,158611,944],{"class":319},[178,158613,158614],{"class":188},"\"请输入折扣:\"",[178,158616,32239],{"class":319},[178,158618,158619],{"class":180,"line":354},[178,158620,722],{"emptyLinePlaceholder":721},[178,158622,158623,158626,158628,158631,158633,158636,158638],{"class":180,"line":364},[178,158624,158625],{"class":319},"total ",[178,158627,330],{"class":699},[178,158629,158630],{"class":319}," price ",[178,158632,2395],{"class":699},[178,158634,158635],{"class":319}," count ",[178,158637,2395],{"class":699},[178,158639,158640],{"class":319}," discount\n",[178,158642,158643],{"class":180,"line":740},[178,158644,722],{"emptyLinePlaceholder":721},[178,158646,158647,158649,158651,158653,158656,158658,158660,158662,158664,158666],{"class":180,"line":746},[178,158648,1504],{"class":195},[178,158650,944],{"class":319},[178,158652,2002],{"class":699},[178,158654,158655],{"class":188},"\"商品单价:",[178,158657,2836],{"class":195},[178,158659,81534],{"class":319},[178,158661,158524],{"class":699},[178,158663,2885],{"class":195},[178,158665,2191],{"class":188},[178,158667,863],{"class":319},[178,158669,158670,158672,158674,158676,158679,158681,158683,158685,158687],{"class":180,"line":752},[178,158671,1504],{"class":195},[178,158673,944],{"class":319},[178,158675,2002],{"class":699},[178,158677,158678],{"class":188},"\"购买数量:",[178,158680,2836],{"class":195},[178,158682,86149],{"class":319},[178,158684,2885],{"class":195},[178,158686,2191],{"class":188},[178,158688,863],{"class":319},[178,158690,158691,158693,158695,158697,158700,158702,158705,158707,158709],{"class":180,"line":757},[178,158692,1504],{"class":195},[178,158694,944],{"class":319},[178,158696,2002],{"class":699},[178,158698,158699],{"class":188},"\"折扣:",[178,158701,2836],{"class":195},[178,158703,158704],{"class":319},"discount",[178,158706,2885],{"class":195},[178,158708,2191],{"class":188},[178,158710,863],{"class":319},[178,158712,158713,158715,158717,158719,158722,158724,158727,158729,158731,158733],{"class":180,"line":763},[178,158714,1504],{"class":195},[178,158716,944],{"class":319},[178,158718,2002],{"class":699},[178,158720,158721],{"class":188},"\"应付金额:",[178,158723,2836],{"class":195},[178,158725,158726],{"class":319},"total",[178,158728,158524],{"class":699},[178,158730,2885],{"class":195},[178,158732,158377],{"class":188},[178,158734,863],{"class":319},[14,158736,158738],{"id":158737},"_213-易错点","2.13 易错点",[26,158740,158741,158746,158752,158760,158763],{},[29,158742,158743,158745],{},[70,158744,158388],{}," 的结果是字符串，做运算前要转换。",[29,158747,158748,158749,297],{},"字符串拼接时，数字要先 ",[70,158750,158751],{},"str()",[29,158753,158754,158756,158757,158759],{},[70,158755,330],{}," 是赋值，",[70,158758,4725],{}," 是比较。",[29,158761,158762],{},"Python 没有自增自减运算符。",[29,158764,158765],{},"浮点数计算可能有精度误差：",[154,158767,158769],{"className":690,"code":158768,"language":692,"meta":160,"style":160},"print(0.1 + 0.2)\n",[70,158770,158771],{"__ignoreMap":160},[178,158772,158773,158775,158777,158779,158781,158784],{"class":180,"line":181},[178,158774,1504],{"class":195},[178,158776,944],{"class":319},[178,158778,87925],{"class":195},[178,158780,47298],{"class":699},[178,158782,158783],{"class":195}," 0.2",[178,158785,863],{"class":319},[19,158787,158788,158789,158792],{},"金额计算如果要求严格，可以后续学习 ",[70,158790,158791],{},"decimal"," 模块。",[14,158794,158796],{"id":158795},"_214-本章练习","2.14 本章练习",[26,158798,158799,158802,158805,158808,158811],{},[29,158800,158801],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[29,158803,158804],{},"输入圆的半径，计算面积，保留两位小数。",[29,158806,158807],{},"输入工资和奖金，计算总收入。",[29,158809,158810],{},"输入摄氏温度，转换为华氏温度。",[29,158812,158813],{},"写一个 BMI 计算程序：",[154,158815,158818],{"className":158816,"code":158817,"language":159,"meta":160},[157],"BMI = 体重kg \u002F 身高m ** 2\n",[70,158819,158817],{"__ignoreMap":160},[1853,158821,158822],{},"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":160,"searchDepth":263,"depth":263,"links":158824},[158825,158826,158827,158828,158829,158830,158831,158837,158838,158839,158844,158845,158846,158847],{"id":156386,"depth":263,"text":156387},{"id":156495,"depth":263,"text":156496},{"id":156666,"depth":263,"text":156667},{"id":156743,"depth":263,"text":156744},{"id":52463,"depth":263,"text":52464},{"id":157049,"depth":263,"text":157050},{"id":157275,"depth":263,"text":157276,"children":158832},[158833,158834,158835,158836],{"id":157279,"depth":274,"text":157280},{"id":157473,"depth":274,"text":157474},{"id":157561,"depth":274,"text":157562},{"id":157667,"depth":274,"text":157668},{"id":157776,"depth":263,"text":157777},{"id":157934,"depth":263,"text":157935},{"id":157999,"depth":263,"text":158000,"children":158840},[158841,158842,158843],{"id":158003,"depth":274,"text":158004},{"id":158148,"depth":274,"text":158149},{"id":158251,"depth":274,"text":158252},{"id":158382,"depth":263,"text":158383},{"id":158534,"depth":263,"text":158535},{"id":158737,"depth":263,"text":158738},{"id":158795,"depth":263,"text":158796},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156378,"description":25135},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":158854,"title":158855,"body":158856,"description":25135,"extension":1880,"meta":160492,"navigation":721,"path":160493,"seo":160494,"stem":160495,"__hash__":160496},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":158857,"toc":160473},[158858,158861,158865,158868,158883,158886,158914,158918,158968,158970,158986,158989,159015,159018,159022,159089,159092,159108,159112,159115,159233,159236,159243,159292,159298,159302,159305,159418,159421,159425,159429,159432,159482,159486,159489,159539,159543,159546,159584,159588,159591,159637,159640,159675,159679,159684,159687,159733,159735,159802,159806,159812,159923,159932,159936,159938,159949,159951,160117,160121,160123,160137,160139,160353,160357,160376,160393,160396,160442,160446,160470],[10,158859,158855],{"id":158860},"_3-判断语句",[14,158862,158864],{"id":158863},"_31-布尔值","3.1 布尔值",[19,158866,158867],{},"判断语句依赖布尔值：",[154,158869,158871],{"className":690,"code":158870,"language":692,"meta":160,"style":160},"True\nFalse\n",[70,158872,158873,158878],{"__ignoreMap":160},[178,158874,158875],{"class":180,"line":181},[178,158876,158877],{"class":195},"True\n",[178,158879,158880],{"class":180,"line":263},[178,158881,158882],{"class":195},"False\n",[19,158884,158885],{},"比较表达式会产生布尔值：",[154,158887,158889],{"className":690,"code":158888,"language":692,"meta":160,"style":160},"age = 18\nprint(age >= 18)  # True\n",[70,158890,158891,158899],{"__ignoreMap":160},[178,158892,158893,158895,158897],{"class":180,"line":181},[178,158894,147911],{"class":319},[178,158896,330],{"class":699},[178,158898,147916],{"class":195},[178,158900,158901,158903,158905,158907,158909,158911],{"class":180,"line":263},[178,158902,1504],{"class":195},[178,158904,157133],{"class":319},[178,158906,3505],{"class":699},[178,158908,157650],{"class":195},[178,158910,47540],{"class":319},[178,158912,158913],{"class":2008},"# True\n",[14,158915,158917],{"id":158916},"_32-if基础语法","3.2 if基础语法",[154,158919,158921],{"className":690,"code":158920,"language":692,"meta":160,"style":160},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[70,158922,158923,158941,158945,158957],{"__ignoreMap":160},[178,158924,158925,158927,158929,158931,158933,158935,158937,158939],{"class":180,"line":181},[178,158926,147911],{"class":319},[178,158928,330],{"class":699},[178,158930,4166],{"class":195},[178,158932,944],{"class":319},[178,158934,55543],{"class":195},[178,158936,944],{"class":319},[178,158938,153759],{"class":188},[178,158940,32239],{"class":319},[178,158942,158943],{"class":180,"line":263},[178,158944,722],{"emptyLinePlaceholder":721},[178,158946,158947,158949,158951,158953,158955],{"class":180,"line":274},[178,158948,1085],{"class":699},[178,158950,17465],{"class":319},[178,158952,3505],{"class":699},[178,158954,157650],{"class":195},[178,158956,847],{"class":319},[178,158958,158959,158961,158963,158966],{"class":180,"line":354},[178,158960,1022],{"class":195},[178,158962,944],{"class":319},[178,158964,158965],{"class":188},"\"可以进入网吧\"",[178,158967,863],{"class":319},[19,158969,10786],{},[26,158971,158972,158977,158980,158983],{},[29,158973,158974,158976],{},[70,158975,1085],{}," 后面是条件表达式。",[29,158978,158979],{},"条件后面必须写冒号。",[29,158981,158982],{},"条件成立时执行缩进代码块。",[29,158984,158985],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,158987,158988],{},"错误示例：",[154,158990,158992],{"className":690,"code":158991,"language":692,"meta":160,"style":160},"if age >= 18\n    print(\"可以进入\")\n",[70,158993,158994,159004],{"__ignoreMap":160},[178,158995,158996,158998,159000,159002],{"class":180,"line":181},[178,158997,1085],{"class":699},[178,158999,17465],{"class":319},[178,159001,3505],{"class":699},[178,159003,147916],{"class":195},[178,159005,159006,159008,159010,159013],{"class":180,"line":263},[178,159007,1022],{"class":195},[178,159009,944],{"class":319},[178,159011,159012],{"class":188},"\"可以进入\"",[178,159014,863],{"class":319},[19,159016,159017],{},"缺少冒号。",[14,159019,159021],{"id":159020},"_33-if-else","3.3 if else",[154,159023,159025],{"className":690,"code":159024,"language":692,"meta":160,"style":160},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[70,159026,159027,159045,159049,159061,159072,159078],{"__ignoreMap":160},[178,159028,159029,159031,159033,159035,159037,159039,159041,159043],{"class":180,"line":181},[178,159030,147911],{"class":319},[178,159032,330],{"class":699},[178,159034,4166],{"class":195},[178,159036,944],{"class":319},[178,159038,55543],{"class":195},[178,159040,944],{"class":319},[178,159042,153759],{"class":188},[178,159044,32239],{"class":319},[178,159046,159047],{"class":180,"line":263},[178,159048,722],{"emptyLinePlaceholder":721},[178,159050,159051,159053,159055,159057,159059],{"class":180,"line":274},[178,159052,1085],{"class":699},[178,159054,17465],{"class":319},[178,159056,3505],{"class":699},[178,159058,157650],{"class":195},[178,159060,847],{"class":319},[178,159062,159063,159065,159067,159070],{"class":180,"line":354},[178,159064,1022],{"class":195},[178,159066,944],{"class":319},[178,159068,159069],{"class":188},"\"成年人\"",[178,159071,863],{"class":319},[178,159073,159074,159076],{"class":180,"line":364},[178,159075,3496],{"class":699},[178,159077,847],{"class":319},[178,159079,159080,159082,159084,159087],{"class":180,"line":740},[178,159081,1022],{"class":195},[178,159083,944],{"class":319},[178,159085,159086],{"class":188},"\"未成年人\"",[178,159088,863],{"class":319},[19,159090,159091],{},"执行逻辑：",[26,159093,159094,159100,159105],{},[29,159095,159096,159097,159099],{},"条件成立，执行 ",[70,159098,1085],{}," 代码块。",[29,159101,159102,159103,159099],{},"条件不成立，执行 ",[70,159104,3496],{},[29,159106,159107],{},"两个代码块只会执行其中一个。",[14,159109,159111],{"id":159110},"_34-if-elif-else","3.4 if elif else",[19,159113,159114],{},"多条件判断：",[154,159116,159118],{"className":690,"code":159117,"language":692,"meta":160,"style":160},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[70,159119,159120,159138,159142,159156,159167,159181,159192,159205,159216,159222],{"__ignoreMap":160},[178,159121,159122,159124,159126,159128,159130,159132,159134,159136],{"class":180,"line":181},[178,159123,156723],{"class":319},[178,159125,330],{"class":699},[178,159127,4166],{"class":195},[178,159129,944],{"class":319},[178,159131,55543],{"class":195},[178,159133,944],{"class":319},[178,159135,153774],{"class":188},[178,159137,32239],{"class":319},[178,159139,159140],{"class":180,"line":263},[178,159141,722],{"emptyLinePlaceholder":721},[178,159143,159144,159146,159149,159151,159154],{"class":180,"line":274},[178,159145,1085],{"class":699},[178,159147,159148],{"class":319}," score ",[178,159150,3505],{"class":699},[178,159152,159153],{"class":195}," 90",[178,159155,847],{"class":319},[178,159157,159158,159160,159162,159165],{"class":180,"line":354},[178,159159,1022],{"class":195},[178,159161,944],{"class":319},[178,159163,159164],{"class":188},"\"优秀\"",[178,159166,863],{"class":319},[178,159168,159169,159172,159174,159176,159179],{"class":180,"line":364},[178,159170,159171],{"class":699},"elif",[178,159173,159148],{"class":319},[178,159175,3505],{"class":699},[178,159177,159178],{"class":195}," 80",[178,159180,847],{"class":319},[178,159182,159183,159185,159187,159190],{"class":180,"line":740},[178,159184,1022],{"class":195},[178,159186,944],{"class":319},[178,159188,159189],{"class":188},"\"良好\"",[178,159191,863],{"class":319},[178,159193,159194,159196,159198,159200,159203],{"class":180,"line":746},[178,159195,159171],{"class":699},[178,159197,159148],{"class":319},[178,159199,3505],{"class":699},[178,159201,159202],{"class":195}," 60",[178,159204,847],{"class":319},[178,159206,159207,159209,159211,159214],{"class":180,"line":752},[178,159208,1022],{"class":195},[178,159210,944],{"class":319},[178,159212,159213],{"class":188},"\"及格\"",[178,159215,863],{"class":319},[178,159217,159218,159220],{"class":180,"line":757},[178,159219,3496],{"class":699},[178,159221,847],{"class":319},[178,159223,159224,159226,159228,159231],{"class":180,"line":763},[178,159225,1022],{"class":195},[178,159227,944],{"class":319},[178,159229,159230],{"class":188},"\"不及格\"",[178,159232,863],{"class":319},[19,159234,159235],{},"注意判断顺序很重要。",[19,159237,159238,159239,159242],{},"如果把 ",[70,159240,159241],{},"score >= 60"," 放在最前面：",[154,159244,159246],{"className":690,"code":159245,"language":692,"meta":160,"style":160},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[70,159247,159248,159260,159270,159282],{"__ignoreMap":160},[178,159249,159250,159252,159254,159256,159258],{"class":180,"line":181},[178,159251,1085],{"class":699},[178,159253,159148],{"class":319},[178,159255,3505],{"class":699},[178,159257,159202],{"class":195},[178,159259,847],{"class":319},[178,159261,159262,159264,159266,159268],{"class":180,"line":263},[178,159263,1022],{"class":195},[178,159265,944],{"class":319},[178,159267,159213],{"class":188},[178,159269,863],{"class":319},[178,159271,159272,159274,159276,159278,159280],{"class":180,"line":274},[178,159273,159171],{"class":699},[178,159275,159148],{"class":319},[178,159277,3505],{"class":699},[178,159279,159153],{"class":195},[178,159281,847],{"class":319},[178,159283,159284,159286,159288,159290],{"class":180,"line":354},[178,159285,1022],{"class":195},[178,159287,944],{"class":319},[178,159289,159164],{"class":188},[178,159291,863],{"class":319},[19,159293,159294,159295,159297],{},"成绩 95 会先满足 ",[70,159296,159241],{},"，后面的优秀分支就不会执行。",[14,159299,159301],{"id":159300},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,159303,159304],{},"嵌套判断就是在一个判断内部再写判断。",[154,159306,159308],{"className":690,"code":159307,"language":692,"meta":160,"style":160},"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",[70,159309,159310,159328,159343,159347,159359,159373,159383,159390,159401,159407],{"__ignoreMap":160},[178,159311,159312,159314,159316,159318,159320,159322,159324,159326],{"class":180,"line":181},[178,159313,147911],{"class":319},[178,159315,330],{"class":699},[178,159317,4166],{"class":195},[178,159319,944],{"class":319},[178,159321,55543],{"class":195},[178,159323,944],{"class":319},[178,159325,153759],{"class":188},[178,159327,32239],{"class":319},[178,159329,159330,159332,159334,159336,159338,159341],{"class":180,"line":263},[178,159331,157726],{"class":319},[178,159333,330],{"class":699},[178,159335,62326],{"class":195},[178,159337,944],{"class":319},[178,159339,159340],{"class":188},"\"是否有票(y\u002Fn):\"",[178,159342,863],{"class":319},[178,159344,159345],{"class":180,"line":274},[178,159346,722],{"emptyLinePlaceholder":721},[178,159348,159349,159351,159353,159355,159357],{"class":180,"line":354},[178,159350,1085],{"class":699},[178,159352,17465],{"class":319},[178,159354,3505],{"class":699},[178,159356,157650],{"class":195},[178,159358,847],{"class":319},[178,159360,159361,159363,159366,159368,159371],{"class":180,"line":364},[178,159362,922],{"class":699},[178,159364,159365],{"class":319}," has_ticket ",[178,159367,4725],{"class":699},[178,159369,159370],{"class":188}," \"y\"",[178,159372,847],{"class":319},[178,159374,159375,159377,159379,159381],{"class":180,"line":740},[178,159376,34183],{"class":195},[178,159378,944],{"class":319},[178,159380,159012],{"class":188},[178,159382,863],{"class":319},[178,159384,159385,159388],{"class":180,"line":746},[178,159386,159387],{"class":699},"    else",[178,159389,847],{"class":319},[178,159391,159392,159394,159396,159399],{"class":180,"line":752},[178,159393,34183],{"class":195},[178,159395,944],{"class":319},[178,159397,159398],{"class":188},"\"请先买票\"",[178,159400,863],{"class":319},[178,159402,159403,159405],{"class":180,"line":757},[178,159404,3496],{"class":699},[178,159406,847],{"class":319},[178,159408,159409,159411,159413,159416],{"class":180,"line":763},[178,159410,1022],{"class":195},[178,159412,944],{"class":319},[178,159414,159415],{"class":188},"\"未成年人禁止进入\"",[178,159417,863],{"class":319},[19,159419,159420],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159422,159424],{"id":159423},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[387,159426,159428],{"id":159427},"_361-and","3.6.1 and",[19,159430,159431],{},"两个条件都成立才成立。",[154,159433,159435],{"className":690,"code":159434,"language":692,"meta":160,"style":160},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[70,159436,159437,159445,159453,159457,159472],{"__ignoreMap":160},[178,159438,159439,159441,159443],{"class":180,"line":181},[178,159440,147911],{"class":319},[178,159442,330],{"class":699},[178,159444,89780],{"class":195},[178,159446,159447,159449,159451],{"class":180,"line":263},[178,159448,157726],{"class":319},[178,159450,330],{"class":699},[178,159452,154964],{"class":195},[178,159454,159455],{"class":180,"line":274},[178,159456,722],{"emptyLinePlaceholder":721},[178,159458,159459,159461,159463,159465,159467,159469],{"class":180,"line":354},[178,159460,1085],{"class":699},[178,159462,17465],{"class":319},[178,159464,3505],{"class":699},[178,159466,157650],{"class":195},[178,159468,121794],{"class":699},[178,159470,159471],{"class":319}," has_ticket:\n",[178,159473,159474,159476,159478,159480],{"class":180,"line":364},[178,159475,1022],{"class":195},[178,159477,944],{"class":319},[178,159479,159012],{"class":188},[178,159481,863],{"class":319},[387,159483,159485],{"id":159484},"_362-or","3.6.2 or",[19,159487,159488],{},"只要一个条件成立就成立。",[154,159490,159492],{"className":690,"code":159491,"language":692,"meta":160,"style":160},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[70,159493,159494,159503,159512,159516,159528],{"__ignoreMap":160},[178,159495,159496,159499,159501],{"class":180,"line":181},[178,159497,159498],{"class":319},"is_vip ",[178,159500,330],{"class":699},[178,159502,127172],{"class":195},[178,159504,159505,159508,159510],{"class":180,"line":263},[178,159506,159507],{"class":319},"coupon ",[178,159509,330],{"class":699},[178,159511,154964],{"class":195},[178,159513,159514],{"class":180,"line":274},[178,159515,722],{"emptyLinePlaceholder":721},[178,159517,159518,159520,159523,159525],{"class":180,"line":354},[178,159519,1085],{"class":699},[178,159521,159522],{"class":319}," is_vip ",[178,159524,116455],{"class":699},[178,159526,159527],{"class":319}," coupon:\n",[178,159529,159530,159532,159534,159537],{"class":180,"line":364},[178,159531,1022],{"class":195},[178,159533,944],{"class":319},[178,159535,159536],{"class":188},"\"可以享受优惠\"",[178,159538,863],{"class":319},[387,159540,159542],{"id":159541},"_363-not","3.6.3 not",[19,159544,159545],{},"取反。",[154,159547,159549],{"className":690,"code":159548,"language":692,"meta":160,"style":160},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[70,159550,159551,159560,159564,159573],{"__ignoreMap":160},[178,159552,159553,159556,159558],{"class":180,"line":181},[178,159554,159555],{"class":319},"is_closed ",[178,159557,330],{"class":699},[178,159559,127172],{"class":195},[178,159561,159562],{"class":180,"line":263},[178,159563,722],{"emptyLinePlaceholder":721},[178,159565,159566,159568,159570],{"class":180,"line":274},[178,159567,1085],{"class":699},[178,159569,40662],{"class":699},[178,159571,159572],{"class":319}," is_closed:\n",[178,159574,159575,159577,159579,159582],{"class":180,"line":354},[178,159576,1022],{"class":195},[178,159578,944],{"class":319},[178,159580,159581],{"class":188},"\"店铺营业中\"",[178,159583,863],{"class":319},[14,159585,159587],{"id":159586},"_37-链式比较","3.7 链式比较",[19,159589,159590],{},"Python 支持链式比较：",[154,159592,159594],{"className":690,"code":159593,"language":692,"meta":160,"style":160},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[70,159595,159596,159605,159609,159626],{"__ignoreMap":160},[178,159597,159598,159600,159602],{"class":180,"line":181},[178,159599,156723],{"class":319},[178,159601,330],{"class":699},[178,159603,159604],{"class":195}," 85\n",[178,159606,159607],{"class":180,"line":263},[178,159608,722],{"emptyLinePlaceholder":721},[178,159610,159611,159613,159615,159618,159620,159622,159624],{"class":180,"line":274},[178,159612,1085],{"class":699},[178,159614,930],{"class":195},[178,159616,159617],{"class":699}," \u003C=",[178,159619,159148],{"class":319},[178,159621,3394],{"class":699},[178,159623,7523],{"class":195},[178,159625,847],{"class":319},[178,159627,159628,159630,159632,159635],{"class":180,"line":354},[178,159629,1022],{"class":195},[178,159631,944],{"class":319},[178,159633,159634],{"class":188},"\"成绩合法\"",[178,159636,863],{"class":319},[19,159638,159639],{},"等价于：",[154,159641,159643],{"className":690,"code":159642,"language":692,"meta":160,"style":160},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[70,159644,159645,159665],{"__ignoreMap":160},[178,159646,159647,159649,159651,159653,159655,159657,159659,159661,159663],{"class":180,"line":181},[178,159648,1085],{"class":699},[178,159650,159148],{"class":319},[178,159652,3505],{"class":699},[178,159654,930],{"class":195},[178,159656,121794],{"class":699},[178,159658,159148],{"class":319},[178,159660,3394],{"class":699},[178,159662,7523],{"class":195},[178,159664,847],{"class":319},[178,159666,159667,159669,159671,159673],{"class":180,"line":263},[178,159668,1022],{"class":195},[178,159670,944],{"class":319},[178,159672,159634],{"class":188},[178,159674,863],{"class":319},[14,159676,159678],{"id":159677},"_38-真值和假值","3.8 真值和假值",[19,159680,117832,159681,159683],{},[70,159682,1085],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,159685,159686],{},"假值：",[154,159688,159690],{"className":690,"code":159689,"language":692,"meta":160,"style":160},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[70,159691,159692,159696,159701,159705,159709,159714,159718,159722,159727],{"__ignoreMap":160},[178,159693,159694],{"class":180,"line":181},[178,159695,158882],{"class":195},[178,159697,159698],{"class":180,"line":263},[178,159699,159700],{"class":195},"None\n",[178,159702,159703],{"class":180,"line":274},[178,159704,4860],{"class":195},[178,159706,159707],{"class":180,"line":354},[178,159708,34075],{"class":195},[178,159710,159711],{"class":180,"line":364},[178,159712,159713],{"class":188},"\"\"\n",[178,159715,159716],{"class":180,"line":740},[178,159717,34090],{"class":319},[178,159719,159720],{"class":180,"line":746},[178,159721,3760],{"class":319},[178,159723,159724],{"class":180,"line":752},[178,159725,159726],{"class":319},"{}\n",[178,159728,159729,159731],{"class":180,"line":757},[178,159730,156655],{"class":195},[178,159732,3760],{"class":319},[19,159734,16893],{},[154,159736,159738],{"className":690,"code":159737,"language":692,"meta":160,"style":160},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[70,159739,159740,159754,159758,159765,159785,159791],{"__ignoreMap":160},[178,159741,159742,159744,159746,159748,159750,159752],{"class":180,"line":181},[178,159743,147901],{"class":319},[178,159745,330],{"class":699},[178,159747,62326],{"class":195},[178,159749,944],{"class":319},[178,159751,153744],{"class":188},[178,159753,863],{"class":319},[178,159755,159756],{"class":180,"line":263},[178,159757,722],{"emptyLinePlaceholder":721},[178,159759,159760,159762],{"class":180,"line":274},[178,159761,1085],{"class":699},[178,159763,159764],{"class":319}," name:\n",[178,159766,159767,159769,159771,159773,159775,159777,159779,159781,159783],{"class":180,"line":354},[178,159768,1022],{"class":195},[178,159770,944],{"class":319},[178,159772,2002],{"class":699},[178,159774,158419],{"class":188},[178,159776,2836],{"class":195},[178,159778,81529],{"class":319},[178,159780,2885],{"class":195},[178,159782,2191],{"class":188},[178,159784,863],{"class":319},[178,159786,159787,159789],{"class":180,"line":364},[178,159788,3496],{"class":699},[178,159790,847],{"class":319},[178,159792,159793,159795,159797,159800],{"class":180,"line":740},[178,159794,1022],{"class":195},[178,159796,944],{"class":319},[178,159798,159799],{"class":188},"\"姓名不能为空\"",[178,159801,863],{"class":319},[14,159803,159805],{"id":159804},"_39-match语句","3.9 match语句",[19,159807,159808,159809,159811],{},"Python 3.10 开始支持 ",[70,159810,72985],{},"。它适合处理固定选项。",[154,159813,159815],{"className":690,"code":159814,"language":692,"meta":160,"style":160},"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",[70,159816,159817,159833,159837,159844,159854,159865,159874,159885,159894,159905,159912],{"__ignoreMap":160},[178,159818,159819,159822,159824,159826,159828,159831],{"class":180,"line":181},[178,159820,159821],{"class":319},"command ",[178,159823,330],{"class":699},[178,159825,62326],{"class":195},[178,159827,944],{"class":319},[178,159829,159830],{"class":188},"\"请输入命令:\"",[178,159832,863],{"class":319},[178,159834,159835],{"class":180,"line":263},[178,159836,722],{"emptyLinePlaceholder":721},[178,159838,159839,159841],{"class":180,"line":274},[178,159840,72985],{"class":699},[178,159842,159843],{"class":319}," command:\n",[178,159845,159846,159849,159852],{"class":180,"line":354},[178,159847,159848],{"class":699},"    case",[178,159850,159851],{"class":188}," \"start\"",[178,159853,847],{"class":319},[178,159855,159856,159858,159860,159863],{"class":180,"line":364},[178,159857,34183],{"class":195},[178,159859,944],{"class":319},[178,159861,159862],{"class":188},"\"启动\"",[178,159864,863],{"class":319},[178,159866,159867,159869,159872],{"class":180,"line":740},[178,159868,159848],{"class":699},[178,159870,159871],{"class":188}," \"stop\"",[178,159873,847],{"class":319},[178,159875,159876,159878,159880,159883],{"class":180,"line":746},[178,159877,34183],{"class":195},[178,159879,944],{"class":319},[178,159881,159882],{"class":188},"\"停止\"",[178,159884,863],{"class":319},[178,159886,159887,159889,159892],{"class":180,"line":752},[178,159888,159848],{"class":699},[178,159890,159891],{"class":188}," \"restart\"",[178,159893,847],{"class":319},[178,159895,159896,159898,159900,159903],{"class":180,"line":757},[178,159897,34183],{"class":195},[178,159899,944],{"class":319},[178,159901,159902],{"class":188},"\"重启\"",[178,159904,863],{"class":319},[178,159906,159907,159909],{"class":180,"line":763},[178,159908,159848],{"class":699},[178,159910,159911],{"class":319}," _:\n",[178,159913,159914,159916,159918,159921],{"class":180,"line":769},[178,159915,34183],{"class":195},[178,159917,944],{"class":319},[178,159919,159920],{"class":188},"\"未知命令\"",[178,159922,863],{"class":319},[19,159924,159925,159926,159928,159929,159931],{},"入门阶段掌握 ",[70,159927,156023],{}," 更重要，",[70,159930,72985],{}," 可以作为补充。",[14,159933,159935],{"id":159934},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,159937,124657],{},[26,159939,159940,159943,159946],{},[29,159941,159942],{},"输入成绩。",[29,159944,159945],{},"判断成绩是否合法。",[29,159947,159948],{},"输出等级。",[19,159950,11796],{},[154,159952,159954],{"className":690,"code":159953,"language":692,"meta":160,"style":160},"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",[70,159955,159956,159974,159978,159996,160007,160019,160030,160042,160053,160066,160077,160089,160100,160106],{"__ignoreMap":160},[178,159957,159958,159960,159962,159964,159966,159968,159970,159972],{"class":180,"line":181},[178,159959,156723],{"class":319},[178,159961,330],{"class":699},[178,159963,111162],{"class":195},[178,159965,944],{"class":319},[178,159967,55543],{"class":195},[178,159969,944],{"class":319},[178,159971,153774],{"class":188},[178,159973,32239],{"class":319},[178,159975,159976],{"class":180,"line":263},[178,159977,722],{"emptyLinePlaceholder":721},[178,159979,159980,159982,159984,159986,159988,159990,159992,159994],{"class":180,"line":274},[178,159981,1085],{"class":699},[178,159983,40662],{"class":699},[178,159985,930],{"class":195},[178,159987,159617],{"class":699},[178,159989,159148],{"class":319},[178,159991,3394],{"class":699},[178,159993,7523],{"class":195},[178,159995,847],{"class":319},[178,159997,159998,160000,160002,160005],{"class":180,"line":354},[178,159999,1022],{"class":195},[178,160001,944],{"class":319},[178,160003,160004],{"class":188},"\"成绩不合法\"",[178,160006,863],{"class":319},[178,160008,160009,160011,160013,160015,160017],{"class":180,"line":364},[178,160010,159171],{"class":699},[178,160012,159148],{"class":319},[178,160014,3505],{"class":699},[178,160016,159153],{"class":195},[178,160018,847],{"class":319},[178,160020,160021,160023,160025,160028],{"class":180,"line":740},[178,160022,1022],{"class":195},[178,160024,944],{"class":319},[178,160026,160027],{"class":188},"\"等级:A\"",[178,160029,863],{"class":319},[178,160031,160032,160034,160036,160038,160040],{"class":180,"line":746},[178,160033,159171],{"class":699},[178,160035,159148],{"class":319},[178,160037,3505],{"class":699},[178,160039,159178],{"class":195},[178,160041,847],{"class":319},[178,160043,160044,160046,160048,160051],{"class":180,"line":752},[178,160045,1022],{"class":195},[178,160047,944],{"class":319},[178,160049,160050],{"class":188},"\"等级:B\"",[178,160052,863],{"class":319},[178,160054,160055,160057,160059,160061,160064],{"class":180,"line":757},[178,160056,159171],{"class":699},[178,160058,159148],{"class":319},[178,160060,3505],{"class":699},[178,160062,160063],{"class":195}," 70",[178,160065,847],{"class":319},[178,160067,160068,160070,160072,160075],{"class":180,"line":763},[178,160069,1022],{"class":195},[178,160071,944],{"class":319},[178,160073,160074],{"class":188},"\"等级:C\"",[178,160076,863],{"class":319},[178,160078,160079,160081,160083,160085,160087],{"class":180,"line":769},[178,160080,159171],{"class":699},[178,160082,159148],{"class":319},[178,160084,3505],{"class":699},[178,160086,159202],{"class":195},[178,160088,847],{"class":319},[178,160090,160091,160093,160095,160098],{"class":180,"line":774},[178,160092,1022],{"class":195},[178,160094,944],{"class":319},[178,160096,160097],{"class":188},"\"等级:D\"",[178,160099,863],{"class":319},[178,160101,160102,160104],{"class":180,"line":780},[178,160103,3496],{"class":699},[178,160105,847],{"class":319},[178,160107,160108,160110,160112,160115],{"class":180,"line":786},[178,160109,1022],{"class":195},[178,160111,944],{"class":319},[178,160113,160114],{"class":188},"\"等级:E\"",[178,160116,863],{"class":319},[14,160118,160120],{"id":160119},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,160122,124657],{},[26,160124,160125,160128,160131,160134],{},[29,160126,160127],{},"输入消费金额。",[29,160129,160130],{},"输入会员等级，普通、银卡、金卡。",[29,160132,160133],{},"普通不打折，银卡 9 折，金卡 8 折。",[29,160135,160136],{},"满 500 再减 50。",[19,160138,11796],{},[154,160140,160142],{"className":690,"code":160141,"language":692,"meta":160,"style":160},"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",[70,160143,160144,160164,160180,160184,160192,160196,160210,160220,160233,160242,160255,160263,160269,160280,160284,160298,160302,160316,160326,160330],{"__ignoreMap":160},[178,160145,160146,160149,160151,160153,160155,160157,160159,160162],{"class":180,"line":181},[178,160147,160148],{"class":319},"amount ",[178,160150,330],{"class":699},[178,160152,111162],{"class":195},[178,160154,944],{"class":319},[178,160156,55543],{"class":195},[178,160158,944],{"class":319},[178,160160,160161],{"class":188},"\"请输入消费金额:\"",[178,160163,32239],{"class":319},[178,160165,160166,160169,160171,160173,160175,160178],{"class":180,"line":263},[178,160167,160168],{"class":319},"level ",[178,160170,330],{"class":699},[178,160172,62326],{"class":195},[178,160174,944],{"class":319},[178,160176,160177],{"class":188},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[178,160179,863],{"class":319},[178,160181,160182],{"class":180,"line":274},[178,160183,722],{"emptyLinePlaceholder":721},[178,160185,160186,160188,160190],{"class":180,"line":354},[178,160187,158601],{"class":319},[178,160189,330],{"class":699},[178,160191,57420],{"class":195},[178,160193,160194],{"class":180,"line":364},[178,160195,722],{"emptyLinePlaceholder":721},[178,160197,160198,160200,160203,160205,160208],{"class":180,"line":740},[178,160199,1085],{"class":699},[178,160201,160202],{"class":319}," level ",[178,160204,4725],{"class":699},[178,160206,160207],{"class":188}," \"银卡\"",[178,160209,847],{"class":319},[178,160211,160212,160215,160217],{"class":180,"line":746},[178,160213,160214],{"class":319},"    discount ",[178,160216,330],{"class":699},[178,160218,160219],{"class":195}," 0.9\n",[178,160221,160222,160224,160226,160228,160231],{"class":180,"line":752},[178,160223,159171],{"class":699},[178,160225,160202],{"class":319},[178,160227,4725],{"class":699},[178,160229,160230],{"class":188}," \"金卡\"",[178,160232,847],{"class":319},[178,160234,160235,160237,160239],{"class":180,"line":757},[178,160236,160214],{"class":319},[178,160238,330],{"class":699},[178,160240,160241],{"class":195}," 0.8\n",[178,160243,160244,160246,160248,160250,160253],{"class":180,"line":763},[178,160245,159171],{"class":699},[178,160247,160202],{"class":319},[178,160249,4725],{"class":699},[178,160251,160252],{"class":188}," \"普通\"",[178,160254,847],{"class":319},[178,160256,160257,160259,160261],{"class":180,"line":769},[178,160258,160214],{"class":319},[178,160260,330],{"class":699},[178,160262,57420],{"class":195},[178,160264,160265,160267],{"class":180,"line":774},[178,160266,3496],{"class":699},[178,160268,847],{"class":319},[178,160270,160271,160273,160275,160278],{"class":180,"line":780},[178,160272,1022],{"class":195},[178,160274,944],{"class":319},[178,160276,160277],{"class":188},"\"会员等级输入错误，按普通会员计算\"",[178,160279,863],{"class":319},[178,160281,160282],{"class":180,"line":786},[178,160283,722],{"emptyLinePlaceholder":721},[178,160285,160286,160289,160291,160294,160296],{"class":180,"line":792},[178,160287,160288],{"class":319},"pay ",[178,160290,330],{"class":699},[178,160292,160293],{"class":319}," amount ",[178,160295,2395],{"class":699},[178,160297,158640],{"class":319},[178,160299,160300],{"class":180,"line":798},[178,160301,722],{"emptyLinePlaceholder":721},[178,160303,160304,160306,160309,160311,160314],{"class":180,"line":804},[178,160305,1085],{"class":699},[178,160307,160308],{"class":319}," pay ",[178,160310,3505],{"class":699},[178,160312,160313],{"class":195}," 500",[178,160315,847],{"class":319},[178,160317,160318,160321,160323],{"class":180,"line":810},[178,160319,160320],{"class":319},"    pay ",[178,160322,151617],{"class":699},[178,160324,160325],{"class":195}," 50\n",[178,160327,160328],{"class":180,"line":816},[178,160329,722],{"emptyLinePlaceholder":721},[178,160331,160332,160334,160336,160338,160340,160342,160345,160347,160349,160351],{"class":180,"line":822},[178,160333,1504],{"class":195},[178,160335,944],{"class":319},[178,160337,2002],{"class":699},[178,160339,158721],{"class":188},[178,160341,2836],{"class":195},[178,160343,160344],{"class":319},"pay",[178,160346,158524],{"class":699},[178,160348,2885],{"class":195},[178,160350,158377],{"class":188},[178,160352,863],{"class":319},[14,160354,160356],{"id":160355},"_312-易错点","3.12 易错点",[26,160358,160359,160362,160365,160368,160373],{},[29,160360,160361],{},"冒号不能漏。",[29,160363,160364],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[29,160366,160367],{},"多分支判断要注意顺序。",[29,160369,160370,160371,297],{},"判断相等用 ",[70,160372,4725],{},[29,160374,160375],{},"字符串比较区分大小写：",[154,160377,160379],{"className":690,"code":160378,"language":692,"meta":160,"style":160},"\"Y\" == \"y\"  # False\n",[70,160380,160381],{"__ignoreMap":160},[178,160382,160383,160386,160388,160390],{"class":180,"line":181},[178,160384,160385],{"class":188},"\"Y\"",[178,160387,1091],{"class":699},[178,160389,159370],{"class":188},[178,160391,160392],{"class":2008},"  # False\n",[19,160394,160395],{},"可转换后再判断：",[154,160397,160399],{"className":690,"code":160398,"language":692,"meta":160,"style":160},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[70,160400,160401,160418,160431],{"__ignoreMap":160},[178,160402,160403,160406,160408,160410,160412,160415],{"class":180,"line":181},[178,160404,160405],{"class":319},"answer ",[178,160407,330],{"class":699},[178,160409,62326],{"class":195},[178,160411,944],{"class":319},[178,160413,160414],{"class":188},"\"是否继续(y\u002Fn):\"",[178,160416,160417],{"class":319},").lower()\n",[178,160419,160420,160422,160425,160427,160429],{"class":180,"line":263},[178,160421,1085],{"class":699},[178,160423,160424],{"class":319}," answer ",[178,160426,4725],{"class":699},[178,160428,159370],{"class":188},[178,160430,847],{"class":319},[178,160432,160433,160435,160437,160440],{"class":180,"line":274},[178,160434,1022],{"class":195},[178,160436,944],{"class":319},[178,160438,160439],{"class":188},"\"继续\"",[178,160441,863],{"class":319},[14,160443,160445],{"id":160444},"_313-本章练习","3.13 本章练习",[26,160447,160448,160451,160454,160457,160467],{},[29,160449,160450],{},"输入年龄，判断是否成年。",[29,160452,160453],{},"输入年份，判断是否为闰年。",[29,160455,160456],{},"输入三个数字，输出最大值。",[29,160458,160459,160460,160463,160464,160466],{},"写登录判断：用户名是 ",[70,160461,160462],{},"admin"," 且密码是 ",[70,160465,16842],{}," 才登录成功。",[29,160468,160469],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[1853,160471,160472],{},"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":160,"searchDepth":263,"depth":263,"links":160474},[160475,160476,160477,160478,160479,160480,160485,160486,160487,160488,160489,160490,160491],{"id":158863,"depth":263,"text":158864},{"id":158916,"depth":263,"text":158917},{"id":159020,"depth":263,"text":159021},{"id":159110,"depth":263,"text":159111},{"id":159300,"depth":263,"text":159301},{"id":159423,"depth":263,"text":159424,"children":160481},[160482,160483,160484],{"id":159427,"depth":274,"text":159428},{"id":159484,"depth":274,"text":159485},{"id":159541,"depth":274,"text":159542},{"id":159586,"depth":263,"text":159587},{"id":159677,"depth":263,"text":159678},{"id":159804,"depth":263,"text":159805},{"id":159934,"depth":263,"text":159935},{"id":160119,"depth":263,"text":160120},{"id":160355,"depth":263,"text":160356},{"id":160444,"depth":263,"text":160445},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":158855,"description":25135},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160498,"title":160499,"body":160500,"description":25135,"extension":1880,"meta":162269,"navigation":721,"path":162270,"seo":162271,"stem":162272,"__hash__":162273},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160501,"toc":162249},[160502,160505,160509,160515,160518,160535,160539,160541,160558,160560,160605,160607,160624,160628,160631,160697,160700,160718,160722,160883,160892,160896,160900,160905,160952,160954,160960,160964,160969,161016,161018,161024,161028,161033,161069,161072,161119,161123,161129,161187,161192,161223,161228,161232,161287,161290,161362,161365,161424,161428,161431,161506,161509,161513,161619,161622,161648,161652,161664,161733,161736,161828,161832,161834,161845,161847,161977,161981,162183,162191,162195,162225,162229,162246],[10,160503,160499],{"id":160504},"_4-循环语句",[14,160506,160508],{"id":160507},"_41-为什么需要循环","4.1 为什么需要循环",[19,160510,160511,160512,160514],{},"如果要输出 1 到 100，不应该写 100 行 ",[70,160513,147837],{},"，而应该用循环。",[19,160516,160517],{},"循环适合处理重复任务：",[26,160519,160520,160523,160526,160529,160532],{},[29,160521,160522],{},"重复输出。",[29,160524,160525],{},"重复输入。",[29,160527,160528],{},"遍历数据。",[29,160530,160531],{},"持续执行菜单。",[29,160533,160534],{},"批量处理文件或数据。",[14,160536,160538],{"id":160537},"_42-while循环","4.2 while循环",[19,160540,6952],{},[154,160542,160544],{"className":690,"code":160543,"language":692,"meta":160,"style":160},"while 条件:\n    循环体\n",[70,160545,160546,160553],{"__ignoreMap":160},[178,160547,160548,160550],{"class":180,"line":181},[178,160549,110028],{"class":699},[178,160551,160552],{"class":319}," 条件:\n",[178,160554,160555],{"class":180,"line":263},[178,160556,160557],{"class":319},"    循环体\n",[19,160559,16893],{},[154,160561,160563],{"className":690,"code":160562,"language":692,"meta":160,"style":160},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[70,160564,160565,160573,160577,160589,160596],{"__ignoreMap":160},[178,160566,160567,160569,160571],{"class":180,"line":181},[178,160568,101861],{"class":319},[178,160570,330],{"class":699},[178,160572,57420],{"class":195},[178,160574,160575],{"class":180,"line":263},[178,160576,722],{"emptyLinePlaceholder":721},[178,160578,160579,160581,160583,160585,160587],{"class":180,"line":274},[178,160580,110028],{"class":699},[178,160582,11199],{"class":319},[178,160584,3394],{"class":699},[178,160586,3932],{"class":195},[178,160588,847],{"class":319},[178,160590,160591,160593],{"class":180,"line":354},[178,160592,1022],{"class":195},[178,160594,160595],{"class":319},"(i)\n",[178,160597,160598,160601,160603],{"class":180,"line":364},[178,160599,160600],{"class":319},"    i ",[178,160602,11238],{"class":699},[178,160604,57420],{"class":195},[19,160606,82648],{},[26,160608,160609,160615,160618,160621],{},[29,160610,160611,160612,297],{},"判断条件 ",[70,160613,160614],{},"i \u003C= 5",[29,160616,160617],{},"条件成立，执行循环体。",[29,160619,160620],{},"执行完后回到条件判断。",[29,160622,160623],{},"条件不成立，退出循环。",[14,160625,160627],{"id":160626},"_43-while累加","4.3 while累加",[19,160629,160630],{},"计算 1 到 100 的和：",[154,160632,160634],{"className":690,"code":160633,"language":692,"meta":160,"style":160},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[70,160635,160636,160644,160652,160656,160668,160678,160686,160690],{"__ignoreMap":160},[178,160637,160638,160640,160642],{"class":180,"line":181},[178,160639,101861],{"class":319},[178,160641,330],{"class":699},[178,160643,57420],{"class":195},[178,160645,160646,160648,160650],{"class":180,"line":263},[178,160647,158625],{"class":319},[178,160649,330],{"class":699},[178,160651,49065],{"class":195},[178,160653,160654],{"class":180,"line":274},[178,160655,722],{"emptyLinePlaceholder":721},[178,160657,160658,160660,160662,160664,160666],{"class":180,"line":354},[178,160659,110028],{"class":699},[178,160661,11199],{"class":319},[178,160663,3394],{"class":699},[178,160665,7523],{"class":195},[178,160667,847],{"class":319},[178,160669,160670,160673,160675],{"class":180,"line":364},[178,160671,160672],{"class":319},"    total ",[178,160674,11238],{"class":699},[178,160676,160677],{"class":319}," i\n",[178,160679,160680,160682,160684],{"class":180,"line":740},[178,160681,160600],{"class":319},[178,160683,11238],{"class":699},[178,160685,57420],{"class":195},[178,160687,160688],{"class":180,"line":746},[178,160689,722],{"emptyLinePlaceholder":721},[178,160691,160692,160694],{"class":180,"line":752},[178,160693,1504],{"class":195},[178,160695,160696],{"class":319},"(total)\n",[19,160698,160699],{},"核心思想：",[26,160701,160702,160707,160712],{},[29,160703,160704,160706],{},[70,160705,2381],{}," 控制循环次数。",[29,160708,160709,160711],{},[70,160710,158726],{}," 保存累加结果。",[29,160713,160714,160715,160717],{},"每轮循环都要更新 ",[70,160716,2381],{},"，否则可能死循环。",[14,160719,160721],{"id":160720},"_44-while猜数字","4.4 while猜数字",[154,160723,160725],{"className":690,"code":160724,"language":692,"meta":160,"style":160},"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",[70,160726,160727,160733,160737,160754,160762,160766,160774,160794,160803,160807,160819,160830,160840,160851,160857,160879],{"__ignoreMap":160},[178,160728,160729,160731],{"class":180,"line":181},[178,160730,700],{"class":699},[178,160732,47060],{"class":319},[178,160734,160735],{"class":180,"line":263},[178,160736,722],{"emptyLinePlaceholder":721},[178,160738,160739,160741,160743,160746,160748,160750,160752],{"class":180,"line":274},[178,160740,160405],{"class":319},[178,160742,330],{"class":699},[178,160744,160745],{"class":319}," random.randint(",[178,160747,1665],{"class":195},[178,160749,14196],{"class":319},[178,160751,2251],{"class":195},[178,160753,863],{"class":319},[178,160755,160756,160758,160760],{"class":180,"line":354},[178,160757,148056],{"class":319},[178,160759,330],{"class":699},[178,160761,49065],{"class":195},[178,160763,160764],{"class":180,"line":364},[178,160765,722],{"emptyLinePlaceholder":721},[178,160767,160768,160770,160772],{"class":180,"line":740},[178,160769,110028],{"class":699},[178,160771,97007],{"class":195},[178,160773,847],{"class":319},[178,160775,160776,160779,160781,160783,160785,160787,160789,160792],{"class":180,"line":746},[178,160777,160778],{"class":319},"    guess ",[178,160780,330],{"class":699},[178,160782,4166],{"class":195},[178,160784,944],{"class":319},[178,160786,55543],{"class":195},[178,160788,944],{"class":319},[178,160790,160791],{"class":188},"\"请输入1到100之间的数字:\"",[178,160793,32239],{"class":319},[178,160795,160796,160799,160801],{"class":180,"line":752},[178,160797,160798],{"class":319},"    count ",[178,160800,11238],{"class":699},[178,160802,57420],{"class":195},[178,160804,160805],{"class":180,"line":757},[178,160806,722],{"emptyLinePlaceholder":721},[178,160808,160809,160811,160814,160816],{"class":180,"line":763},[178,160810,922],{"class":699},[178,160812,160813],{"class":319}," guess ",[178,160815,2899],{"class":699},[178,160817,160818],{"class":319}," answer:\n",[178,160820,160821,160823,160825,160828],{"class":180,"line":769},[178,160822,34183],{"class":195},[178,160824,944],{"class":319},[178,160826,160827],{"class":188},"\"猜大了\"",[178,160829,863],{"class":319},[178,160831,160832,160834,160836,160838],{"class":180,"line":774},[178,160833,41025],{"class":699},[178,160835,160813],{"class":319},[178,160837,320],{"class":699},[178,160839,160818],{"class":319},[178,160841,160842,160844,160846,160849],{"class":180,"line":780},[178,160843,34183],{"class":195},[178,160845,944],{"class":319},[178,160847,160848],{"class":188},"\"猜小了\"",[178,160850,863],{"class":319},[178,160852,160853,160855],{"class":180,"line":786},[178,160854,159387],{"class":699},[178,160856,847],{"class":319},[178,160858,160859,160861,160863,160865,160868,160870,160872,160874,160877],{"class":180,"line":792},[178,160860,34183],{"class":195},[178,160862,944],{"class":319},[178,160864,2002],{"class":699},[178,160866,160867],{"class":188},"\"猜对了，一共猜了",[178,160869,2836],{"class":195},[178,160871,86149],{"class":319},[178,160873,2885],{"class":195},[178,160875,160876],{"class":188},"次\"",[178,160878,863],{"class":319},[178,160880,160881],{"class":180,"line":798},[178,160882,33362],{"class":699},[19,160884,160885,160888,160889,160891],{},[70,160886,160887],{},"while True"," 表示无限循环，通常配合 ",[70,160890,3837],{}," 使用。",[14,160893,160895],{"id":160894},"_45-break和continue","4.5 break和continue",[387,160897,160899],{"id":160898},"_451-break","4.5.1 break",[19,160901,160902,160904],{},[70,160903,3837],{}," 直接结束整个循环。",[154,160906,160908],{"className":690,"code":160907,"language":692,"meta":160,"style":160},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[70,160909,160910,160930,160942,160946],{"__ignoreMap":160},[178,160911,160912,160914,160916,160918,160920,160922,160924,160926,160928],{"class":180,"line":181},[178,160913,1474],{"class":699},[178,160915,11199],{"class":319},[178,160917,994],{"class":699},[178,160919,997],{"class":195},[178,160921,944],{"class":319},[178,160923,1665],{"class":195},[178,160925,14196],{"class":319},[178,160927,2284],{"class":195},[178,160929,1005],{"class":319},[178,160931,160932,160934,160936,160938,160940],{"class":180,"line":263},[178,160933,922],{"class":699},[178,160935,11199],{"class":319},[178,160937,4725],{"class":699},[178,160939,79790],{"class":195},[178,160941,847],{"class":319},[178,160943,160944],{"class":180,"line":274},[178,160945,33362],{"class":699},[178,160947,160948,160950],{"class":180,"line":354},[178,160949,1022],{"class":195},[178,160951,160595],{"class":319},[19,160953,147822],{},[154,160955,160958],{"className":160956,"code":160957,"language":159,"meta":160},[157],"1\n2\n",[70,160959,160957],{"__ignoreMap":160},[387,160961,160963],{"id":160962},"_452-continue","4.5.2 continue",[19,160965,160966,160968],{},[70,160967,156037],{}," 跳过本轮剩余代码，进入下一轮循环。",[154,160970,160972],{"className":690,"code":160971,"language":692,"meta":160,"style":160},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[70,160973,160974,160994,161006,161010],{"__ignoreMap":160},[178,160975,160976,160978,160980,160982,160984,160986,160988,160990,160992],{"class":180,"line":181},[178,160977,1474],{"class":699},[178,160979,11199],{"class":319},[178,160981,994],{"class":699},[178,160983,997],{"class":195},[178,160985,944],{"class":319},[178,160987,1665],{"class":195},[178,160989,14196],{"class":319},[178,160991,2284],{"class":195},[178,160993,1005],{"class":319},[178,160995,160996,160998,161000,161002,161004],{"class":180,"line":263},[178,160997,922],{"class":699},[178,160999,11199],{"class":319},[178,161001,4725],{"class":699},[178,161003,79790],{"class":195},[178,161005,847],{"class":319},[178,161007,161008],{"class":180,"line":274},[178,161009,149877],{"class":699},[178,161011,161012,161014],{"class":180,"line":354},[178,161013,1022],{"class":195},[178,161015,160595],{"class":319},[19,161017,147822],{},[154,161019,161022],{"className":161020,"code":161021,"language":159,"meta":160},[157],"1\n2\n4\n5\n",[70,161023,161021],{"__ignoreMap":160},[14,161025,161027],{"id":161026},"_46-for循环","4.6 for循环",[19,161029,161030,161032],{},[70,161031,1474],{}," 常用于遍历序列。",[154,161034,161036],{"className":690,"code":161035,"language":692,"meta":160,"style":160},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[70,161037,161038,161047,161051,161062],{"__ignoreMap":160},[178,161039,161040,161042,161044],{"class":180,"line":181},[178,161041,147901],{"class":319},[178,161043,330],{"class":699},[178,161045,161046],{"class":188}," \"python\"\n",[178,161048,161049],{"class":180,"line":263},[178,161050,722],{"emptyLinePlaceholder":721},[178,161052,161053,161055,161058,161060],{"class":180,"line":274},[178,161054,1474],{"class":699},[178,161056,161057],{"class":319}," ch ",[178,161059,994],{"class":699},[178,161061,159764],{"class":319},[178,161063,161064,161066],{"class":180,"line":354},[178,161065,1022],{"class":195},[178,161067,161068],{"class":319},"(ch)\n",[19,161070,161071],{},"遍历列表：",[154,161073,161075],{"className":690,"code":161074,"language":692,"meta":160,"style":160},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[70,161076,161077,161099,161103,161113],{"__ignoreMap":160},[178,161078,161079,161082,161084,161086,161088,161090,161092,161094,161097],{"class":180,"line":181},[178,161080,161081],{"class":319},"students ",[178,161083,330],{"class":699},[178,161085,53953],{"class":319},[178,161087,151253],{"class":188},[178,161089,14196],{"class":319},[178,161091,152301],{"class":188},[178,161093,14196],{"class":319},[178,161095,161096],{"class":188},"\"小刚\"",[178,161098,34978],{"class":319},[178,161100,161101],{"class":180,"line":263},[178,161102,722],{"emptyLinePlaceholder":721},[178,161104,161105,161107,161109,161111],{"class":180,"line":274},[178,161106,1474],{"class":699},[178,161108,153502],{"class":319},[178,161110,994],{"class":699},[178,161112,153507],{"class":319},[178,161114,161115,161117],{"class":180,"line":354},[178,161116,1022],{"class":195},[178,161118,151407],{"class":319},[14,161120,161122],{"id":161121},"_47-range函数","4.7 range函数",[19,161124,161125,161128],{},[70,161126,161127],{},"range()"," 用于生成整数序列。",[154,161130,161132],{"className":690,"code":161131,"language":692,"meta":160,"style":160},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[70,161133,161134,161148,161166],{"__ignoreMap":160},[178,161135,161136,161138,161140,161142,161145],{"class":180,"line":181},[178,161137,35148],{"class":195},[178,161139,944],{"class":319},[178,161141,2259],{"class":195},[178,161143,161144],{"class":319},")          ",[178,161146,161147],{"class":2008},"# 0,1,2,3,4\n",[178,161149,161150,161152,161154,161156,161158,161160,161163],{"class":180,"line":263},[178,161151,35148],{"class":195},[178,161153,944],{"class":319},[178,161155,1665],{"class":195},[178,161157,14196],{"class":319},[178,161159,2259],{"class":195},[178,161161,161162],{"class":319},")       ",[178,161164,161165],{"class":2008},"# 1,2,3,4\n",[178,161167,161168,161170,161172,161174,161176,161178,161180,161182,161184],{"class":180,"line":274},[178,161169,35148],{"class":195},[178,161171,944],{"class":319},[178,161173,1665],{"class":195},[178,161175,14196],{"class":319},[178,161177,2386],{"class":195},[178,161179,14196],{"class":319},[178,161181,1669],{"class":195},[178,161183,157026],{"class":319},[178,161185,161186],{"class":2008},"# 1,3,5,7,9\n",[19,161188,161189,161190,26372],{},"配合 ",[70,161191,1474],{},[154,161193,161195],{"className":690,"code":161194,"language":692,"meta":160,"style":160},"for i in range(1, 6):\n    print(i)\n",[70,161196,161197,161217],{"__ignoreMap":160},[178,161198,161199,161201,161203,161205,161207,161209,161211,161213,161215],{"class":180,"line":181},[178,161200,1474],{"class":699},[178,161202,11199],{"class":319},[178,161204,994],{"class":699},[178,161206,997],{"class":195},[178,161208,944],{"class":319},[178,161210,1665],{"class":195},[178,161212,14196],{"class":319},[178,161214,2284],{"class":195},[178,161216,1005],{"class":319},[178,161218,161219,161221],{"class":180,"line":263},[178,161220,1022],{"class":195},[178,161222,160595],{"class":319},[19,161224,10786,161225,161227],{},[70,161226,35148],{}," 的结束值不包含在内。",[14,161229,161231],{"id":161230},"_48-for循环求和","4.8 for循环求和",[154,161233,161235],{"className":690,"code":161234,"language":692,"meta":160,"style":160},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[70,161236,161237,161245,161249,161269,161277,161281],{"__ignoreMap":160},[178,161238,161239,161241,161243],{"class":180,"line":181},[178,161240,158625],{"class":319},[178,161242,330],{"class":699},[178,161244,49065],{"class":195},[178,161246,161247],{"class":180,"line":263},[178,161248,722],{"emptyLinePlaceholder":721},[178,161250,161251,161253,161255,161257,161259,161261,161263,161265,161267],{"class":180,"line":274},[178,161252,1474],{"class":699},[178,161254,11199],{"class":319},[178,161256,994],{"class":699},[178,161258,997],{"class":195},[178,161260,944],{"class":319},[178,161262,1665],{"class":195},[178,161264,14196],{"class":319},[178,161266,2277],{"class":195},[178,161268,1005],{"class":319},[178,161270,161271,161273,161275],{"class":180,"line":354},[178,161272,160672],{"class":319},[178,161274,11238],{"class":699},[178,161276,160677],{"class":319},[178,161278,161279],{"class":180,"line":364},[178,161280,722],{"emptyLinePlaceholder":721},[178,161282,161283,161285],{"class":180,"line":740},[178,161284,1504],{"class":195},[178,161286,160696],{"class":319},[19,161288,161289],{},"求偶数和：",[154,161291,161293],{"className":690,"code":161292,"language":692,"meta":160,"style":160},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[70,161294,161295,161303,161307,161327,161343,161352,161356],{"__ignoreMap":160},[178,161296,161297,161299,161301],{"class":180,"line":181},[178,161298,158625],{"class":319},[178,161300,330],{"class":699},[178,161302,49065],{"class":195},[178,161304,161305],{"class":180,"line":263},[178,161306,722],{"emptyLinePlaceholder":721},[178,161308,161309,161311,161313,161315,161317,161319,161321,161323,161325],{"class":180,"line":274},[178,161310,1474],{"class":699},[178,161312,11199],{"class":319},[178,161314,994],{"class":699},[178,161316,997],{"class":195},[178,161318,944],{"class":319},[178,161320,1665],{"class":195},[178,161322,14196],{"class":319},[178,161324,2277],{"class":195},[178,161326,1005],{"class":319},[178,161328,161329,161331,161333,161335,161337,161339,161341],{"class":180,"line":354},[178,161330,922],{"class":699},[178,161332,11199],{"class":319},[178,161334,2268],{"class":699},[178,161336,16514],{"class":195},[178,161338,1091],{"class":699},[178,161340,930],{"class":195},[178,161342,847],{"class":319},[178,161344,161345,161348,161350],{"class":180,"line":364},[178,161346,161347],{"class":319},"        total ",[178,161349,11238],{"class":699},[178,161351,160677],{"class":319},[178,161353,161354],{"class":180,"line":740},[178,161355,722],{"emptyLinePlaceholder":721},[178,161357,161358,161360],{"class":180,"line":746},[178,161359,1504],{"class":195},[178,161361,160696],{"class":319},[19,161363,161364],{},"也可以：",[154,161366,161368],{"className":690,"code":161367,"language":692,"meta":160,"style":160},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[70,161369,161370,161378,161382,161406,161414,161418],{"__ignoreMap":160},[178,161371,161372,161374,161376],{"class":180,"line":181},[178,161373,158625],{"class":319},[178,161375,330],{"class":699},[178,161377,49065],{"class":195},[178,161379,161380],{"class":180,"line":263},[178,161381,722],{"emptyLinePlaceholder":721},[178,161383,161384,161386,161388,161390,161392,161394,161396,161398,161400,161402,161404],{"class":180,"line":274},[178,161385,1474],{"class":699},[178,161387,11199],{"class":319},[178,161389,994],{"class":699},[178,161391,997],{"class":195},[178,161393,944],{"class":319},[178,161395,1669],{"class":195},[178,161397,14196],{"class":319},[178,161399,2277],{"class":195},[178,161401,14196],{"class":319},[178,161403,1669],{"class":195},[178,161405,1005],{"class":319},[178,161407,161408,161410,161412],{"class":180,"line":354},[178,161409,160672],{"class":319},[178,161411,11238],{"class":699},[178,161413,160677],{"class":319},[178,161415,161416],{"class":180,"line":364},[178,161417,722],{"emptyLinePlaceholder":721},[178,161419,161420,161422],{"class":180,"line":740},[178,161421,1504],{"class":195},[178,161423,160696],{"class":319},[14,161425,161427],{"id":161426},"_49-循环嵌套","4.9 循环嵌套",[19,161429,161430],{},"嵌套循环就是循环里面再写循环。",[154,161432,161434],{"className":690,"code":161433,"language":692,"meta":160,"style":160},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[70,161435,161436,161456,161476],{"__ignoreMap":160},[178,161437,161438,161440,161442,161444,161446,161448,161450,161452,161454],{"class":180,"line":181},[178,161439,1474],{"class":699},[178,161441,11199],{"class":319},[178,161443,994],{"class":699},[178,161445,997],{"class":195},[178,161447,944],{"class":319},[178,161449,1665],{"class":195},[178,161451,14196],{"class":319},[178,161453,2233],{"class":195},[178,161455,1005],{"class":319},[178,161457,161458,161460,161462,161464,161466,161468,161470,161472,161474],{"class":180,"line":263},[178,161459,988],{"class":699},[178,161461,11261],{"class":319},[178,161463,994],{"class":699},[178,161465,997],{"class":195},[178,161467,944],{"class":319},[178,161469,1665],{"class":195},[178,161471,14196],{"class":319},[178,161473,2233],{"class":195},[178,161475,1005],{"class":319},[178,161477,161478,161480,161482,161484,161487,161489,161491,161493,161496,161498,161500,161502,161504],{"class":180,"line":274},[178,161479,34183],{"class":195},[178,161481,944],{"class":319},[178,161483,2002],{"class":699},[178,161485,161486],{"class":188},"\"i=",[178,161488,2836],{"class":195},[178,161490,2381],{"class":319},[178,161492,2885],{"class":195},[178,161494,161495],{"class":188},", j=",[178,161497,2836],{"class":195},[178,161499,2407],{"class":319},[178,161501,2885],{"class":195},[178,161503,2191],{"class":188},[178,161505,863],{"class":319},[19,161507,161508],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161510,161512],{"id":161511},"_410-九九乘法表","4.10 九九乘法表",[154,161514,161516],{"className":690,"code":161515,"language":692,"meta":160,"style":160},"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",[70,161517,161518,161538,161561,161613],{"__ignoreMap":160},[178,161519,161520,161522,161524,161526,161528,161530,161532,161534,161536],{"class":180,"line":181},[178,161521,1474],{"class":699},[178,161523,11199],{"class":319},[178,161525,994],{"class":699},[178,161527,997],{"class":195},[178,161529,944],{"class":319},[178,161531,1665],{"class":195},[178,161533,14196],{"class":319},[178,161535,2386],{"class":195},[178,161537,1005],{"class":319},[178,161539,161540,161542,161544,161546,161548,161550,161552,161555,161557,161559],{"class":180,"line":263},[178,161541,988],{"class":699},[178,161543,11261],{"class":319},[178,161545,994],{"class":699},[178,161547,997],{"class":195},[178,161549,944],{"class":319},[178,161551,1665],{"class":195},[178,161553,161554],{"class":319},", i ",[178,161556,2421],{"class":699},[178,161558,26870],{"class":195},[178,161560,1005],{"class":319},[178,161562,161563,161565,161567,161569,161571,161573,161575,161577,161579,161581,161583,161585,161587,161589,161591,161593,161595,161597,161599,161601,161603,161605,161607,161609,161611],{"class":180,"line":274},[178,161564,34183],{"class":195},[178,161566,944],{"class":319},[178,161568,2002],{"class":699},[178,161570,2191],{"class":188},[178,161572,2836],{"class":195},[178,161574,2407],{"class":319},[178,161576,2885],{"class":195},[178,161578,2395],{"class":188},[178,161580,2836],{"class":195},[178,161582,2381],{"class":319},[178,161584,2885],{"class":195},[178,161586,330],{"class":188},[178,161588,2836],{"class":195},[178,161590,101861],{"class":319},[178,161592,2395],{"class":699},[178,161594,5183],{"class":319},[178,161596,2885],{"class":195},[178,161598,2191],{"class":188},[178,161600,14196],{"class":319},[178,161602,47533],{"class":6985},[178,161604,330],{"class":699},[178,161606,2191],{"class":188},[178,161608,3040],{"class":195},[178,161610,2191],{"class":188},[178,161612,863],{"class":319},[178,161614,161615,161617],{"class":180,"line":354},[178,161616,1022],{"class":195},[178,161618,3760],{"class":319},[19,161620,161621],{},"关键点：",[26,161623,161624,161630,161636,161642],{},[29,161625,161626,161627,161629],{},"外层 ",[70,161628,2381],{}," 控制行。",[29,161631,161632,161633,161635],{},"内层 ",[70,161634,2407],{}," 控制列。",[29,161637,161638,161639,161641],{},"每行结束后用 ",[70,161640,147837],{}," 换行。",[29,161643,161644,161647],{},[70,161645,161646],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161649,161651],{"id":161650},"_411-循环else","4.11 循环else",[19,161653,161654,161655,161657,161658,161660,161661,161663],{},"Python 的循环可以带 ",[70,161656,3496],{},"。当循环正常结束时执行 ",[70,161659,3496],{},"，如果被 ",[70,161662,3837],{}," 打断，则不执行。",[154,161665,161667],{"className":690,"code":161666,"language":692,"meta":160,"style":160},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[70,161668,161669,161689,161701,161712,161716,161722],{"__ignoreMap":160},[178,161670,161671,161673,161675,161677,161679,161681,161683,161685,161687],{"class":180,"line":181},[178,161672,1474],{"class":699},[178,161674,11199],{"class":319},[178,161676,994],{"class":699},[178,161678,997],{"class":195},[178,161680,944],{"class":319},[178,161682,1665],{"class":195},[178,161684,14196],{"class":319},[178,161686,2284],{"class":195},[178,161688,1005],{"class":319},[178,161690,161691,161693,161695,161697,161699],{"class":180,"line":263},[178,161692,922],{"class":699},[178,161694,11199],{"class":319},[178,161696,4725],{"class":699},[178,161698,3822],{"class":195},[178,161700,847],{"class":319},[178,161702,161703,161705,161707,161710],{"class":180,"line":274},[178,161704,34183],{"class":195},[178,161706,944],{"class":319},[178,161708,161709],{"class":188},"\"找到了\"",[178,161711,863],{"class":319},[178,161713,161714],{"class":180,"line":354},[178,161715,33362],{"class":699},[178,161717,161718,161720],{"class":180,"line":364},[178,161719,3496],{"class":699},[178,161721,847],{"class":319},[178,161723,161724,161726,161728,161731],{"class":180,"line":740},[178,161725,1022],{"class":195},[178,161727,944],{"class":319},[178,161729,161730],{"class":188},"\"没找到\"",[178,161732,863],{"class":319},[19,161734,161735],{},"常用于搜索。",[154,161737,161739],{"className":690,"code":161738,"language":692,"meta":160,"style":160},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[70,161740,161741,161762,161771,161775,161787,161798,161808,161812,161818],{"__ignoreMap":160},[178,161742,161743,161746,161748,161750,161752,161754,161756,161758,161760],{"class":180,"line":181},[178,161744,161745],{"class":319},"names ",[178,161747,330],{"class":699},[178,161749,53953],{"class":319},[178,161751,151253],{"class":188},[178,161753,14196],{"class":319},[178,161755,152301],{"class":188},[178,161757,14196],{"class":319},[178,161759,161096],{"class":188},[178,161761,34978],{"class":319},[178,161763,161764,161766,161768],{"class":180,"line":263},[178,161765,112943],{"class":319},[178,161767,330],{"class":699},[178,161769,161770],{"class":188}," \"小李\"\n",[178,161772,161773],{"class":180,"line":274},[178,161774,722],{"emptyLinePlaceholder":721},[178,161776,161777,161779,161782,161784],{"class":180,"line":354},[178,161778,1474],{"class":699},[178,161780,161781],{"class":319}," name ",[178,161783,994],{"class":699},[178,161785,161786],{"class":319}," names:\n",[178,161788,161789,161791,161793,161795],{"class":180,"line":364},[178,161790,922],{"class":699},[178,161792,161781],{"class":319},[178,161794,4725],{"class":699},[178,161796,161797],{"class":319}," target:\n",[178,161799,161800,161802,161804,161806],{"class":180,"line":740},[178,161801,34183],{"class":195},[178,161803,944],{"class":319},[178,161805,161709],{"class":188},[178,161807,863],{"class":319},[178,161809,161810],{"class":180,"line":746},[178,161811,33362],{"class":699},[178,161813,161814,161816],{"class":180,"line":752},[178,161815,3496],{"class":699},[178,161817,847],{"class":319},[178,161819,161820,161822,161824,161826],{"class":180,"line":757},[178,161821,1022],{"class":195},[178,161823,944],{"class":319},[178,161825,161730],{"class":188},[178,161827,863],{"class":319},[14,161829,161831],{"id":161830},"_412-小案例登录重试","4.12 小案例：登录重试",[19,161833,124657],{},[26,161835,161836,161839,161842],{},[29,161837,161838],{},"用户最多输入 3 次密码。",[29,161840,161841],{},"密码正确则登录成功。",[29,161843,161844],{},"3 次都错误则锁定账号。",[19,161846,11796],{},[154,161848,161850],{"className":690,"code":161849,"language":692,"meta":160,"style":160},"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",[70,161851,161852,161862,161866,161882,161898,161902,161914,161925,161929,161935,161960,161966],{"__ignoreMap":160},[178,161853,161854,161857,161859],{"class":180,"line":181},[178,161855,161856],{"class":319},"password ",[178,161858,330],{"class":699},[178,161860,161861],{"class":188}," \"123456\"\n",[178,161863,161864],{"class":180,"line":263},[178,161865,722],{"emptyLinePlaceholder":721},[178,161867,161868,161870,161872,161874,161876,161878,161880],{"class":180,"line":274},[178,161869,1474],{"class":699},[178,161871,11199],{"class":319},[178,161873,994],{"class":699},[178,161875,997],{"class":195},[178,161877,944],{"class":319},[178,161879,2021],{"class":195},[178,161881,1005],{"class":319},[178,161883,161884,161887,161889,161891,161893,161896],{"class":180,"line":354},[178,161885,161886],{"class":319},"    user_password ",[178,161888,330],{"class":699},[178,161890,62326],{"class":195},[178,161892,944],{"class":319},[178,161894,161895],{"class":188},"\"请输入密码:\"",[178,161897,863],{"class":319},[178,161899,161900],{"class":180,"line":364},[178,161901,722],{"emptyLinePlaceholder":721},[178,161903,161904,161906,161909,161911],{"class":180,"line":740},[178,161905,922],{"class":699},[178,161907,161908],{"class":319}," user_password ",[178,161910,4725],{"class":699},[178,161912,161913],{"class":319}," password:\n",[178,161915,161916,161918,161920,161923],{"class":180,"line":746},[178,161917,34183],{"class":195},[178,161919,944],{"class":319},[178,161921,161922],{"class":188},"\"登录成功\"",[178,161924,863],{"class":319},[178,161926,161927],{"class":180,"line":752},[178,161928,33362],{"class":699},[178,161930,161931,161933],{"class":180,"line":757},[178,161932,159387],{"class":699},[178,161934,847],{"class":319},[178,161936,161937,161939,161941,161943,161946,161949,161951,161953,161955,161958],{"class":180,"line":763},[178,161938,34183],{"class":195},[178,161940,944],{"class":319},[178,161942,2002],{"class":699},[178,161944,161945],{"class":188},"\"密码错误，还剩",[178,161947,161948],{"class":195},"{2",[178,161950,53998],{"class":699},[178,161952,4807],{"class":319},[178,161954,2885],{"class":195},[178,161956,161957],{"class":188},"次机会\"",[178,161959,863],{"class":319},[178,161961,161962,161964],{"class":180,"line":769},[178,161963,3496],{"class":699},[178,161965,847],{"class":319},[178,161967,161968,161970,161972,161975],{"class":180,"line":774},[178,161969,1022],{"class":195},[178,161971,944],{"class":319},[178,161973,161974],{"class":188},"\"账号已锁定\"",[178,161976,863],{"class":319},[14,161978,161980],{"id":161979},"_413-小案例菜单程序","4.13 小案例：菜单程序",[154,161982,161984],{"className":690,"code":161983,"language":692,"meta":160,"style":160},"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",[70,161985,161986,161994,162005,162016,162027,162038,162049,162053,162068,162072,162084,162095,162107,162118,162130,162141,162153,162163,162167,162173],{"__ignoreMap":160},[178,161987,161988,161990,161992],{"class":180,"line":181},[178,161989,110028],{"class":699},[178,161991,97007],{"class":195},[178,161993,847],{"class":319},[178,161995,161996,161998,162000,162003],{"class":180,"line":263},[178,161997,1022],{"class":195},[178,161999,944],{"class":319},[178,162001,162002],{"class":188},"\"====== 菜单 ======\"",[178,162004,863],{"class":319},[178,162006,162007,162009,162011,162014],{"class":180,"line":274},[178,162008,1022],{"class":195},[178,162010,944],{"class":319},[178,162012,162013],{"class":188},"\"1. 查询余额\"",[178,162015,863],{"class":319},[178,162017,162018,162020,162022,162025],{"class":180,"line":354},[178,162019,1022],{"class":195},[178,162021,944],{"class":319},[178,162023,162024],{"class":188},"\"2. 存款\"",[178,162026,863],{"class":319},[178,162028,162029,162031,162033,162036],{"class":180,"line":364},[178,162030,1022],{"class":195},[178,162032,944],{"class":319},[178,162034,162035],{"class":188},"\"3. 取款\"",[178,162037,863],{"class":319},[178,162039,162040,162042,162044,162047],{"class":180,"line":740},[178,162041,1022],{"class":195},[178,162043,944],{"class":319},[178,162045,162046],{"class":188},"\"0. 退出\"",[178,162048,863],{"class":319},[178,162050,162051],{"class":180,"line":746},[178,162052,722],{"emptyLinePlaceholder":721},[178,162054,162055,162058,162060,162062,162064,162066],{"class":180,"line":752},[178,162056,162057],{"class":319},"    choice ",[178,162059,330],{"class":699},[178,162061,62326],{"class":195},[178,162063,944],{"class":319},[178,162065,154438],{"class":188},[178,162067,863],{"class":319},[178,162069,162070],{"class":180,"line":757},[178,162071,722],{"emptyLinePlaceholder":721},[178,162073,162074,162076,162078,162080,162082],{"class":180,"line":763},[178,162075,922],{"class":699},[178,162077,154451],{"class":319},[178,162079,4725],{"class":699},[178,162081,154456],{"class":188},[178,162083,847],{"class":319},[178,162085,162086,162088,162090,162093],{"class":180,"line":769},[178,162087,34183],{"class":195},[178,162089,944],{"class":319},[178,162091,162092],{"class":188},"\"余额为1000元\"",[178,162094,863],{"class":319},[178,162096,162097,162099,162101,162103,162105],{"class":180,"line":774},[178,162098,41025],{"class":699},[178,162100,154451],{"class":319},[178,162102,4725],{"class":699},[178,162104,154475],{"class":188},[178,162106,847],{"class":319},[178,162108,162109,162111,162113,162116],{"class":180,"line":780},[178,162110,34183],{"class":195},[178,162112,944],{"class":319},[178,162114,162115],{"class":188},"\"存款功能\"",[178,162117,863],{"class":319},[178,162119,162120,162122,162124,162126,162128],{"class":180,"line":786},[178,162121,41025],{"class":699},[178,162123,154451],{"class":319},[178,162125,4725],{"class":699},[178,162127,154493],{"class":188},[178,162129,847],{"class":319},[178,162131,162132,162134,162136,162139],{"class":180,"line":792},[178,162133,34183],{"class":195},[178,162135,944],{"class":319},[178,162137,162138],{"class":188},"\"取款功能\"",[178,162140,863],{"class":319},[178,162142,162143,162145,162147,162149,162151],{"class":180,"line":798},[178,162144,41025],{"class":699},[178,162146,154451],{"class":319},[178,162148,4725],{"class":699},[178,162150,154547],{"class":188},[178,162152,847],{"class":319},[178,162154,162155,162157,162159,162161],{"class":180,"line":804},[178,162156,34183],{"class":195},[178,162158,944],{"class":319},[178,162160,154558],{"class":188},[178,162162,863],{"class":319},[178,162164,162165],{"class":180,"line":810},[178,162166,33362],{"class":699},[178,162168,162169,162171],{"class":180,"line":816},[178,162170,159387],{"class":699},[178,162172,847],{"class":319},[178,162174,162175,162177,162179,162181],{"class":180,"line":822},[178,162176,34183],{"class":195},[178,162178,944],{"class":319},[178,162180,154579],{"class":188},[178,162182,863],{"class":319},[19,162184,162185,162186,162188,162189,297],{},"菜单类程序通常使用 ",[70,162187,160887],{},"，用户选择退出时 ",[70,162190,3837],{},[14,162192,162194],{"id":162193},"_414-易错点","4.14 易错点",[26,162196,162197,162202,162208,162216,162222],{},[29,162198,162199,162201],{},[70,162200,110028],{}," 循环必须更新控制变量。",[29,162203,162204,162207],{},[70,162205,162206],{},"range(1, 10)"," 不包含 10。",[29,162209,162210,162212,162213,162215],{},[70,162211,3837],{}," 结束整个循环，",[70,162214,156037],{}," 只跳过本轮。",[29,162217,162218,162219,162221],{},"嵌套循环中，",[70,162220,3837],{}," 只跳出当前所在的一层循环。",[29,162223,162224],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162226,162228],{"id":162227},"_415-本章练习","4.15 本章练习",[26,162230,162231,162234,162237,162240,162243],{},[29,162232,162233],{},"输出 1 到 100。",[29,162235,162236],{},"计算 1 到 100 的偶数和。",[29,162238,162239],{},"输出 100 以内能被 3 和 5 同时整除的数。",[29,162241,162242],{},"编写猜数字游戏，限制最多猜 7 次。",[29,162244,162245],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[1853,162247,162248],{},"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":160,"searchDepth":263,"depth":263,"links":162250},[162251,162252,162253,162254,162255,162259,162260,162261,162262,162263,162264,162265,162266,162267,162268],{"id":160507,"depth":263,"text":160508},{"id":160537,"depth":263,"text":160538},{"id":160626,"depth":263,"text":160627},{"id":160720,"depth":263,"text":160721},{"id":160894,"depth":263,"text":160895,"children":162256},[162257,162258],{"id":160898,"depth":274,"text":160899},{"id":160962,"depth":274,"text":160963},{"id":161026,"depth":263,"text":161027},{"id":161121,"depth":263,"text":161122},{"id":161230,"depth":263,"text":161231},{"id":161426,"depth":263,"text":161427},{"id":161511,"depth":263,"text":161512},{"id":161650,"depth":263,"text":161651},{"id":161830,"depth":263,"text":161831},{"id":161979,"depth":263,"text":161980},{"id":162193,"depth":263,"text":162194},{"id":162227,"depth":263,"text":162228},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160499,"description":25135},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162275,"title":162276,"body":162277,"description":25135,"extension":1880,"meta":164282,"navigation":721,"path":164283,"seo":164284,"stem":164285,"__hash__":164286},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162278,"toc":164262},[162279,162282,162286,162289,162292,162306,162309,162323,162327,162329,162348,162350,162397,162399,162413,162417,162491,162494,162498,162501,162560,162568,162571,162624,162627,162631,162636,162691,162699,162749,162753,162758,162766,162865,162871,162875,162880,162883,162894,162935,162948,162952,162955,162991,162994,163007,163010,163070,163074,163078,163081,163132,163136,163139,163186,163192,163258,163261,163265,163268,163384,163387,163391,163394,163500,163504,163507,163545,163548,163590,163593,163653,163656,163660,164124,164127,164131,164158,164164,164225,164229,164259],[10,162280,162276],{"id":162281},"_5-函数基础",[14,162283,162285],{"id":162284},"_51-为什么需要函数","5.1 为什么需要函数",[19,162287,162288],{},"函数用于封装一段可以重复使用的代码。",[19,162290,162291],{},"不使用函数的问题：",[26,162293,162294,162297,162300,162303],{},[29,162295,162296],{},"重复代码多。",[29,162298,162299],{},"修改逻辑时容易漏改。",[29,162301,162302],{},"主流程不清晰。",[29,162304,162305],{},"程序越写越长，难以维护。",[19,162307,162308],{},"使用函数后的好处：",[26,162310,162311,162314,162317,162320],{},[29,162312,162313],{},"提高复用性。",[29,162315,162316],{},"提高可读性。",[29,162318,162319],{},"便于调试。",[29,162321,162322],{},"便于分工。",[14,162324,162326],{"id":162325},"_52-函数定义","5.2 函数定义",[19,162328,6952],{},[154,162330,162332],{"className":690,"code":162331,"language":692,"meta":160,"style":160},"def 函数名():\n    函数体\n",[70,162333,162334,162343],{"__ignoreMap":160},[178,162335,162336,162338,162341],{"class":180,"line":181},[178,162337,835],{"class":699},[178,162339,162340],{"class":184}," 函数名",[178,162342,33687],{"class":319},[178,162344,162345],{"class":180,"line":263},[178,162346,162347],{"class":319},"    函数体\n",[19,162349,16893],{},[154,162351,162353],{"className":690,"code":162352,"language":692,"meta":160,"style":160},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[70,162354,162355,162364,162374,162384,162388,162392],{"__ignoreMap":160},[178,162356,162357,162359,162362],{"class":180,"line":181},[178,162358,835],{"class":699},[178,162360,162361],{"class":184}," say_hello",[178,162363,33687],{"class":319},[178,162365,162366,162368,162370,162372],{"class":180,"line":263},[178,162367,1022],{"class":195},[178,162369,944],{"class":319},[178,162371,7613],{"class":188},[178,162373,863],{"class":319},[178,162375,162376,162378,162380,162382],{"class":180,"line":274},[178,162377,1022],{"class":195},[178,162379,944],{"class":319},[178,162381,148004],{"class":188},[178,162383,863],{"class":319},[178,162385,162386],{"class":180,"line":354},[178,162387,722],{"emptyLinePlaceholder":721},[178,162389,162390],{"class":180,"line":364},[178,162391,722],{"emptyLinePlaceholder":721},[178,162393,162394],{"class":180,"line":740},[178,162395,162396],{"class":319},"say_hello()\n",[19,162398,10786],{},[26,162400,162401,162404,162407,162410],{},[29,162402,162403],{},"函数必须先定义，再调用。",[29,162405,162406],{},"函数名遵循变量命名规则。",[29,162408,162409],{},"函数体需要缩进。",[29,162411,162412],{},"函数不调用就不会执行。",[14,162414,162416],{"id":162415},"_53-函数调用","5.3 函数调用",[154,162418,162420],{"className":690,"code":162419,"language":692,"meta":160,"style":160},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[70,162421,162422,162431,162442,162453,162464,162474,162478,162482,162487],{"__ignoreMap":160},[178,162423,162424,162426,162429],{"class":180,"line":181},[178,162425,835],{"class":699},[178,162427,162428],{"class":184}," print_menu",[178,162430,33687],{"class":319},[178,162432,162433,162435,162437,162440],{"class":180,"line":263},[178,162434,1022],{"class":195},[178,162436,944],{"class":319},[178,162438,162439],{"class":188},"\"1. 查询\"",[178,162441,863],{"class":319},[178,162443,162444,162446,162448,162451],{"class":180,"line":274},[178,162445,1022],{"class":195},[178,162447,944],{"class":319},[178,162449,162450],{"class":188},"\"2. 添加\"",[178,162452,863],{"class":319},[178,162454,162455,162457,162459,162462],{"class":180,"line":354},[178,162456,1022],{"class":195},[178,162458,944],{"class":319},[178,162460,162461],{"class":188},"\"3. 删除\"",[178,162463,863],{"class":319},[178,162465,162466,162468,162470,162472],{"class":180,"line":364},[178,162467,1022],{"class":195},[178,162469,944],{"class":319},[178,162471,162046],{"class":188},[178,162473,863],{"class":319},[178,162475,162476],{"class":180,"line":740},[178,162477,722],{"emptyLinePlaceholder":721},[178,162479,162480],{"class":180,"line":746},[178,162481,722],{"emptyLinePlaceholder":721},[178,162483,162484],{"class":180,"line":752},[178,162485,162486],{"class":319},"print_menu()\n",[178,162488,162489],{"class":180,"line":757},[178,162490,162486],{"class":319},[19,162492,162493],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162495,162497],{"id":162496},"_54-参数","5.4 参数",[19,162499,162500],{},"参数用于向函数传递数据。",[154,162502,162504],{"className":690,"code":162503,"language":692,"meta":160,"style":160},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[70,162505,162506,162515,162535,162539,162543,162552],{"__ignoreMap":160},[178,162507,162508,162510,162512],{"class":180,"line":181},[178,162509,835],{"class":699},[178,162511,162361],{"class":184},[178,162513,162514],{"class":319},"(name):\n",[178,162516,162517,162519,162521,162523,162525,162527,162529,162531,162533],{"class":180,"line":263},[178,162518,1022],{"class":195},[178,162520,944],{"class":319},[178,162522,2002],{"class":699},[178,162524,158419],{"class":188},[178,162526,2836],{"class":195},[178,162528,81529],{"class":319},[178,162530,2885],{"class":195},[178,162532,2191],{"class":188},[178,162534,863],{"class":319},[178,162536,162537],{"class":180,"line":274},[178,162538,722],{"emptyLinePlaceholder":721},[178,162540,162541],{"class":180,"line":354},[178,162542,722],{"emptyLinePlaceholder":721},[178,162544,162545,162548,162550],{"class":180,"line":364},[178,162546,162547],{"class":319},"say_hello(",[178,162549,151253],{"class":188},[178,162551,863],{"class":319},[178,162553,162554,162556,162558],{"class":180,"line":740},[178,162555,162547],{"class":319},[178,162557,152301],{"class":188},[178,162559,863],{"class":319},[19,162561,162562,162564,162565,162567],{},[70,162563,81529],{}," 是形参，",[70,162566,151253],{}," 是实参。",[19,162569,162570],{},"多个参数：",[154,162572,162574],{"className":690,"code":162573,"language":692,"meta":160,"style":160},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[70,162575,162576,162584,162597,162603,162607,162611],{"__ignoreMap":160},[178,162577,162578,162580,162582],{"class":180,"line":181},[178,162579,835],{"class":699},[178,162581,6978],{"class":184},[178,162583,152458],{"class":319},[178,162585,162586,162589,162591,162593,162595],{"class":180,"line":263},[178,162587,162588],{"class":319},"    result ",[178,162590,330],{"class":699},[178,162592,12630],{"class":319},[178,162594,2421],{"class":699},[178,162596,152469],{"class":319},[178,162598,162599,162601],{"class":180,"line":274},[178,162600,1022],{"class":195},[178,162602,78305],{"class":319},[178,162604,162605],{"class":180,"line":354},[178,162606,722],{"emptyLinePlaceholder":721},[178,162608,162609],{"class":180,"line":364},[178,162610,722],{"emptyLinePlaceholder":721},[178,162612,162613,162616,162618,162620,162622],{"class":180,"line":740},[178,162614,162615],{"class":319},"add(",[178,162617,2386],{"class":195},[178,162619,14196],{"class":319},[178,162621,2640],{"class":195},[178,162623,863],{"class":319},[19,162625,162626],{},"调用时参数数量必须匹配。",[14,162628,162630],{"id":162629},"_55-返回值","5.5 返回值",[19,162632,162633,162635],{},[70,162634,18804],{}," 用于把函数内部的结果返回给调用者。",[154,162637,162639],{"className":690,"code":162638,"language":692,"meta":160,"style":160},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[70,162640,162641,162649,162659,162663,162667,162685],{"__ignoreMap":160},[178,162642,162643,162645,162647],{"class":180,"line":181},[178,162644,835],{"class":699},[178,162646,6978],{"class":184},[178,162648,152458],{"class":319},[178,162650,162651,162653,162655,162657],{"class":180,"line":263},[178,162652,5862],{"class":699},[178,162654,12630],{"class":319},[178,162656,2421],{"class":699},[178,162658,152469],{"class":319},[178,162660,162661],{"class":180,"line":274},[178,162662,722],{"emptyLinePlaceholder":721},[178,162664,162665],{"class":180,"line":354},[178,162666,722],{"emptyLinePlaceholder":721},[178,162668,162669,162672,162674,162677,162679,162681,162683],{"class":180,"line":364},[178,162670,162671],{"class":319},"result ",[178,162673,330],{"class":699},[178,162675,162676],{"class":319}," add(",[178,162678,2386],{"class":195},[178,162680,14196],{"class":319},[178,162682,2640],{"class":195},[178,162684,863],{"class":319},[178,162686,162687,162689],{"class":180,"line":740},[178,162688,1504],{"class":195},[178,162690,78305],{"class":319},[19,162692,162693,162694,162696,162697,297],{},"如果函数没有写 ",[70,162695,18804],{},"，默认返回 ",[70,162698,844],{},[154,162700,162702],{"className":690,"code":162701,"language":692,"meta":160,"style":160},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[70,162703,162704,162712,162722,162726,162730,162739],{"__ignoreMap":160},[178,162705,162706,162708,162710],{"class":180,"line":181},[178,162707,835],{"class":699},[178,162709,162361],{"class":184},[178,162711,33687],{"class":319},[178,162713,162714,162716,162718,162720],{"class":180,"line":263},[178,162715,1022],{"class":195},[178,162717,944],{"class":319},[178,162719,7613],{"class":188},[178,162721,863],{"class":319},[178,162723,162724],{"class":180,"line":274},[178,162725,722],{"emptyLinePlaceholder":721},[178,162727,162728],{"class":180,"line":354},[178,162729,722],{"emptyLinePlaceholder":721},[178,162731,162732,162734,162736],{"class":180,"line":364},[178,162733,162671],{"class":319},[178,162735,330],{"class":699},[178,162737,162738],{"class":319}," say_hello()\n",[178,162740,162741,162743,162746],{"class":180,"line":740},[178,162742,1504],{"class":195},[178,162744,162745],{"class":319},"(result)  ",[178,162747,162748],{"class":2008},"# None\n",[14,162750,162752],{"id":162751},"_56-return的作用","5.6 return的作用",[19,162754,162755,162757],{},[70,162756,18804],{}," 有两个作用：",[26,162759,162760,162763],{},[29,162761,162762],{},"返回结果。",[29,162764,162765],{},"结束函数。",[154,162767,162769],{"className":690,"code":162768,"language":692,"meta":160,"style":160},"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",[70,162770,162771,162781,162793,162800,162804,162816,162823,162827,162834,162838,162842,162853],{"__ignoreMap":160},[178,162772,162773,162775,162778],{"class":180,"line":181},[178,162774,835],{"class":699},[178,162776,162777],{"class":184}," check_age",[178,162779,162780],{"class":319},"(age):\n",[178,162782,162783,162785,162787,162789,162791],{"class":180,"line":263},[178,162784,922],{"class":699},[178,162786,17465],{"class":319},[178,162788,320],{"class":699},[178,162790,930],{"class":195},[178,162792,847],{"class":319},[178,162794,162795,162797],{"class":180,"line":274},[178,162796,16511],{"class":699},[178,162798,162799],{"class":188}," \"年龄不合法\"\n",[178,162801,162802],{"class":180,"line":354},[178,162803,722],{"emptyLinePlaceholder":721},[178,162805,162806,162808,162810,162812,162814],{"class":180,"line":364},[178,162807,922],{"class":699},[178,162809,17465],{"class":319},[178,162811,3505],{"class":699},[178,162813,157650],{"class":195},[178,162815,847],{"class":319},[178,162817,162818,162820],{"class":180,"line":740},[178,162819,16511],{"class":699},[178,162821,162822],{"class":188}," \"成年人\"\n",[178,162824,162825],{"class":180,"line":746},[178,162826,722],{"emptyLinePlaceholder":721},[178,162828,162829,162831],{"class":180,"line":752},[178,162830,5862],{"class":699},[178,162832,162833],{"class":188}," \"未成年人\"\n",[178,162835,162836],{"class":180,"line":757},[178,162837,722],{"emptyLinePlaceholder":721},[178,162839,162840],{"class":180,"line":763},[178,162841,722],{"emptyLinePlaceholder":721},[178,162843,162844,162846,162849,162851],{"class":180,"line":769},[178,162845,1504],{"class":195},[178,162847,162848],{"class":319},"(check_age(",[178,162850,2640],{"class":195},[178,162852,32239],{"class":319},[178,162854,162855,162857,162859,162861,162863],{"class":180,"line":774},[178,162856,1504],{"class":195},[178,162858,162848],{"class":319},[178,162860,2472],{"class":699},[178,162862,1665],{"class":195},[178,162864,32239],{"class":319},[19,162866,162867,162868,162870],{},"函数执行到 ",[70,162869,18804],{}," 后，后面的代码不会继续执行。",[14,162872,162874],{"id":162873},"_57-none","5.7 None",[19,162876,162877,162879],{},[70,162878,844],{}," 表示空值或没有结果。",[19,162881,162882],{},"常见使用场景：",[26,162884,162885,162888,162891],{},[29,162886,162887],{},"函数没有返回值。",[29,162889,162890],{},"变量暂时没有具体值。",[29,162892,162893],{},"表示查询不到结果。",[154,162895,162897],{"className":690,"code":162896,"language":692,"meta":160,"style":160},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[70,162898,162899,162907,162911,162924],{"__ignoreMap":160},[178,162900,162901,162903,162905],{"class":180,"line":181},[178,162902,162671],{"class":319},[178,162904,330],{"class":699},[178,162906,153537],{"class":195},[178,162908,162909],{"class":180,"line":263},[178,162910,722],{"emptyLinePlaceholder":721},[178,162912,162913,162915,162918,162920,162922],{"class":180,"line":274},[178,162914,1085],{"class":699},[178,162916,162917],{"class":319}," result ",[178,162919,40659],{"class":699},[178,162921,40665],{"class":195},[178,162923,847],{"class":319},[178,162925,162926,162928,162930,162933],{"class":180,"line":354},[178,162927,1022],{"class":195},[178,162929,944],{"class":319},[178,162931,162932],{"class":188},"\"没有数据\"",[178,162934,863],{"class":319},[19,162936,162937,162938,162940,162941,162944,162945,297],{},"判断 ",[70,162939,844],{}," 推荐使用 ",[70,162942,162943],{},"is None","，不要写成 ",[70,162946,162947],{},"== None",[14,162949,162951],{"id":162950},"_58-函数文档字符串","5.8 函数文档字符串",[19,162953,162954],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[154,162956,162958],{"className":690,"code":162957,"language":692,"meta":160,"style":160},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[70,162959,162960,162970,162975],{"__ignoreMap":160},[178,162961,162962,162964,162967],{"class":180,"line":181},[178,162963,835],{"class":699},[178,162965,162966],{"class":184}," calculate_bmi",[178,162968,162969],{"class":319},"(weight, height):\n",[178,162971,162972],{"class":180,"line":263},[178,162973,162974],{"class":188},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[178,162976,162977,162979,162982,162984,162987,162989],{"class":180,"line":274},[178,162978,5862],{"class":699},[178,162980,162981],{"class":319}," weight ",[178,162983,2524],{"class":699},[178,162985,162986],{"class":319}," height ",[178,162988,12422],{"class":699},[178,162990,49455],{"class":195},[19,162992,162993],{},"查看说明：",[154,162995,162997],{"className":690,"code":162996,"language":692,"meta":160,"style":160},"help(calculate_bmi)\n",[70,162998,162999],{"__ignoreMap":160},[178,163000,163001,163004],{"class":180,"line":181},[178,163002,163003],{"class":195},"help",[178,163005,163006],{"class":319},"(calculate_bmi)\n",[19,163008,163009],{},"较完整的写法：",[154,163011,163013],{"className":690,"code":163012,"language":692,"meta":160,"style":160},"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",[70,163014,163015,163023,163028,163033,163037,163042,163047,163052,163056],{"__ignoreMap":160},[178,163016,163017,163019,163021],{"class":180,"line":181},[178,163018,835],{"class":699},[178,163020,162966],{"class":184},[178,163022,162969],{"class":319},[178,163024,163025],{"class":180,"line":263},[178,163026,163027],{"class":188},"    \"\"\"\n",[178,163029,163030],{"class":180,"line":274},[178,163031,163032],{"class":188},"    计算BMI。\n",[178,163034,163035],{"class":180,"line":354},[178,163036,722],{"emptyLinePlaceholder":721},[178,163038,163039],{"class":180,"line":364},[178,163040,163041],{"class":188},"    :param weight: 体重，单位kg\n",[178,163043,163044],{"class":180,"line":740},[178,163045,163046],{"class":188},"    :param height: 身高，单位m\n",[178,163048,163049],{"class":180,"line":746},[178,163050,163051],{"class":188},"    :return: BMI数值\n",[178,163053,163054],{"class":180,"line":752},[178,163055,163027],{"class":188},[178,163057,163058,163060,163062,163064,163066,163068],{"class":180,"line":757},[178,163059,5862],{"class":699},[178,163061,162981],{"class":319},[178,163063,2524],{"class":699},[178,163065,162986],{"class":319},[178,163067,12422],{"class":699},[178,163069,49455],{"class":195},[14,163071,163073],{"id":163072},"_59-变量作用域","5.9 变量作用域",[387,163075,163077],{"id":163076},"_591-局部变量","5.9.1 局部变量",[19,163079,163080],{},"在函数内部定义的变量，只能在函数内部使用。",[154,163082,163084],{"className":690,"code":163083,"language":692,"meta":160,"style":160},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[70,163085,163086,163095,163103,163109,163113,163117,163122],{"__ignoreMap":160},[178,163087,163088,163090,163093],{"class":180,"line":181},[178,163089,835],{"class":699},[178,163091,163092],{"class":184}," test",[178,163094,33687],{"class":319},[178,163096,163097,163099,163101],{"class":180,"line":263},[178,163098,47325],{"class":319},[178,163100,330],{"class":699},[178,163102,60149],{"class":195},[178,163104,163105,163107],{"class":180,"line":274},[178,163106,1022],{"class":195},[178,163108,1965],{"class":319},[178,163110,163111],{"class":180,"line":354},[178,163112,722],{"emptyLinePlaceholder":721},[178,163114,163115],{"class":180,"line":364},[178,163116,722],{"emptyLinePlaceholder":721},[178,163118,163119],{"class":180,"line":740},[178,163120,163121],{"class":319},"test()\n",[178,163123,163124,163126,163129],{"class":180,"line":746},[178,163125,1504],{"class":195},[178,163127,163128],{"class":319},"(num)  ",[178,163130,163131],{"class":2008},"# 报错\n",[387,163133,163135],{"id":163134},"_592-全局变量","5.9.2 全局变量",[19,163137,163138],{},"在函数外部定义的变量，可以在函数内部读取。",[154,163140,163142],{"className":690,"code":163141,"language":692,"meta":160,"style":160},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[70,163143,163144,163152,163156,163160,163168,163174,163178,163182],{"__ignoreMap":160},[178,163145,163146,163148,163150],{"class":180,"line":181},[178,163147,147901],{"class":319},[178,163149,330],{"class":699},[178,163151,150718],{"class":188},[178,163153,163154],{"class":180,"line":263},[178,163155,722],{"emptyLinePlaceholder":721},[178,163157,163158],{"class":180,"line":274},[178,163159,722],{"emptyLinePlaceholder":721},[178,163161,163162,163164,163166],{"class":180,"line":354},[178,163163,835],{"class":699},[178,163165,162361],{"class":184},[178,163167,33687],{"class":319},[178,163169,163170,163172],{"class":180,"line":364},[178,163171,1022],{"class":195},[178,163173,152025],{"class":319},[178,163175,163176],{"class":180,"line":740},[178,163177,722],{"emptyLinePlaceholder":721},[178,163179,163180],{"class":180,"line":746},[178,163181,722],{"emptyLinePlaceholder":721},[178,163183,163184],{"class":180,"line":752},[178,163185,162396],{"class":319},[19,163187,163188,163189,297],{},"如果要在函数内部修改全局变量，需要 ",[70,163190,163191],{},"global",[154,163193,163195],{"className":690,"code":163194,"language":692,"meta":160,"style":160},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[70,163196,163197,163205,163209,163213,163222,163230,163238,163242,163246,163251],{"__ignoreMap":160},[178,163198,163199,163201,163203],{"class":180,"line":181},[178,163200,148056],{"class":319},[178,163202,330],{"class":699},[178,163204,49065],{"class":195},[178,163206,163207],{"class":180,"line":263},[178,163208,722],{"emptyLinePlaceholder":721},[178,163210,163211],{"class":180,"line":274},[178,163212,722],{"emptyLinePlaceholder":721},[178,163214,163215,163217,163220],{"class":180,"line":354},[178,163216,835],{"class":699},[178,163218,163219],{"class":184}," add_count",[178,163221,33687],{"class":319},[178,163223,163224,163227],{"class":180,"line":364},[178,163225,163226],{"class":699},"    global",[178,163228,163229],{"class":319}," count\n",[178,163231,163232,163234,163236],{"class":180,"line":740},[178,163233,160798],{"class":319},[178,163235,11238],{"class":699},[178,163237,57420],{"class":195},[178,163239,163240],{"class":180,"line":746},[178,163241,722],{"emptyLinePlaceholder":721},[178,163243,163244],{"class":180,"line":752},[178,163245,722],{"emptyLinePlaceholder":721},[178,163247,163248],{"class":180,"line":757},[178,163249,163250],{"class":319},"add_count()\n",[178,163252,163253,163255],{"class":180,"line":763},[178,163254,1504],{"class":195},[178,163256,163257],{"class":319},"(count)\n",[19,163259,163260],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163262,163264],{"id":163263},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,163266,163267],{},"一个函数中可以调用另一个函数。",[154,163269,163271],{"className":690,"code":163270,"language":692,"meta":160,"style":160},"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",[70,163272,163273,163282,163296,163300,163304,163313,163318,163338,163359,163363,163367,163371],{"__ignoreMap":160},[178,163274,163275,163277,163280],{"class":180,"line":181},[178,163276,835],{"class":699},[178,163278,163279],{"class":184}," print_line",[178,163281,33687],{"class":319},[178,163283,163284,163286,163288,163290,163292,163294],{"class":180,"line":263},[178,163285,1022],{"class":195},[178,163287,944],{"class":319},[178,163289,34215],{"class":188},[178,163291,8287],{"class":699},[178,163293,80385],{"class":195},[178,163295,863],{"class":319},[178,163297,163298],{"class":180,"line":274},[178,163299,722],{"emptyLinePlaceholder":721},[178,163301,163302],{"class":180,"line":354},[178,163303,722],{"emptyLinePlaceholder":721},[178,163305,163306,163308,163311],{"class":180,"line":364},[178,163307,835],{"class":699},[178,163309,163310],{"class":184}," print_info",[178,163312,150740],{"class":319},[178,163314,163315],{"class":180,"line":740},[178,163316,163317],{"class":319},"    print_line()\n",[178,163319,163320,163322,163324,163326,163328,163330,163332,163334,163336],{"class":180,"line":746},[178,163321,1022],{"class":195},[178,163323,944],{"class":319},[178,163325,2002],{"class":699},[178,163327,158047],{"class":188},[178,163329,2836],{"class":195},[178,163331,81529],{"class":319},[178,163333,2885],{"class":195},[178,163335,2191],{"class":188},[178,163337,863],{"class":319},[178,163339,163340,163342,163344,163346,163349,163351,163353,163355,163357],{"class":180,"line":752},[178,163341,1022],{"class":195},[178,163343,944],{"class":319},[178,163345,2002],{"class":699},[178,163347,163348],{"class":188},"\"年龄:",[178,163350,2836],{"class":195},[178,163352,71941],{"class":319},[178,163354,2885],{"class":195},[178,163356,2191],{"class":188},[178,163358,863],{"class":319},[178,163360,163361],{"class":180,"line":757},[178,163362,163317],{"class":319},[178,163364,163365],{"class":180,"line":763},[178,163366,722],{"emptyLinePlaceholder":721},[178,163368,163369],{"class":180,"line":769},[178,163370,722],{"emptyLinePlaceholder":721},[178,163372,163373,163376,163378,163380,163382],{"class":180,"line":774},[178,163374,163375],{"class":319},"print_info(",[178,163377,151253],{"class":188},[178,163379,14196],{"class":319},[178,163381,2590],{"class":195},[178,163383,863],{"class":319},[19,163385,163386],{},"这种方式可以把小功能组合成大功能。",[14,163388,163390],{"id":163389},"_511-参数检查","5.11 参数检查",[19,163392,163393],{},"函数内部可以检查参数是否合法。",[154,163395,163397],{"className":690,"code":163396,"language":692,"meta":160,"style":160},"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",[70,163398,163399,163408,163420,163426,163436,163440,163444,163461,163465,163477,163488,163494],{"__ignoreMap":160},[178,163400,163401,163403,163406],{"class":180,"line":181},[178,163402,835],{"class":699},[178,163404,163405],{"class":184}," divide",[178,163407,152458],{"class":319},[178,163409,163410,163412,163414,163416,163418],{"class":180,"line":263},[178,163411,922],{"class":699},[178,163413,12643],{"class":319},[178,163415,4725],{"class":699},[178,163417,930],{"class":195},[178,163419,847],{"class":319},[178,163421,163422,163424],{"class":180,"line":274},[178,163423,16511],{"class":699},[178,163425,153537],{"class":195},[178,163427,163428,163430,163432,163434],{"class":180,"line":354},[178,163429,5862],{"class":699},[178,163431,12630],{"class":319},[178,163433,2524],{"class":699},[178,163435,152469],{"class":319},[178,163437,163438],{"class":180,"line":364},[178,163439,722],{"emptyLinePlaceholder":721},[178,163441,163442],{"class":180,"line":740},[178,163443,722],{"emptyLinePlaceholder":721},[178,163445,163446,163448,163450,163453,163455,163457,163459],{"class":180,"line":746},[178,163447,162671],{"class":319},[178,163449,330],{"class":699},[178,163451,163452],{"class":319}," divide(",[178,163454,2386],{"class":195},[178,163456,14196],{"class":319},[178,163458,2133],{"class":195},[178,163460,863],{"class":319},[178,163462,163463],{"class":180,"line":752},[178,163464,722],{"emptyLinePlaceholder":721},[178,163466,163467,163469,163471,163473,163475],{"class":180,"line":757},[178,163468,1085],{"class":699},[178,163470,162917],{"class":319},[178,163472,40659],{"class":699},[178,163474,40665],{"class":195},[178,163476,847],{"class":319},[178,163478,163479,163481,163483,163486],{"class":180,"line":763},[178,163480,1022],{"class":195},[178,163482,944],{"class":319},[178,163484,163485],{"class":188},"\"除数不能为0\"",[178,163487,863],{"class":319},[178,163489,163490,163492],{"class":180,"line":769},[178,163491,3496],{"class":699},[178,163493,847],{"class":319},[178,163495,163496,163498],{"class":180,"line":774},[178,163497,1022],{"class":195},[178,163499,78305],{"class":319},[14,163501,163503],{"id":163502},"_512-类型提示","5.12 类型提示",[19,163505,163506],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[154,163508,163510],{"className":690,"code":163509,"language":692,"meta":160,"style":160},"def add(a: int, b: int) -> int:\n    return a + b\n",[70,163511,163512,163535],{"__ignoreMap":160},[178,163513,163514,163516,163518,163521,163523,163526,163528,163531,163533],{"class":180,"line":181},[178,163515,835],{"class":699},[178,163517,6978],{"class":184},[178,163519,163520],{"class":319},"(a: ",[178,163522,1956],{"class":195},[178,163524,163525],{"class":319},", b: ",[178,163527,1956],{"class":195},[178,163529,163530],{"class":319},") -> ",[178,163532,1956],{"class":195},[178,163534,847],{"class":319},[178,163536,163537,163539,163541,163543],{"class":180,"line":263},[178,163538,5862],{"class":699},[178,163540,12630],{"class":319},[178,163542,2421],{"class":699},[178,163544,152469],{"class":319},[19,163546,163547],{},"字符串参数：",[154,163549,163551],{"className":690,"code":163550,"language":692,"meta":160,"style":160},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[70,163552,163553,163570],{"__ignoreMap":160},[178,163554,163555,163557,163559,163562,163564,163566,163568],{"class":180,"line":181},[178,163556,835],{"class":699},[178,163558,162361],{"class":184},[178,163560,163561],{"class":319},"(name: ",[178,163563,3109],{"class":195},[178,163565,163530],{"class":319},[178,163567,844],{"class":195},[178,163569,847],{"class":319},[178,163571,163572,163574,163576,163578,163580,163582,163584,163586,163588],{"class":180,"line":263},[178,163573,1022],{"class":195},[178,163575,944],{"class":319},[178,163577,2002],{"class":699},[178,163579,158419],{"class":188},[178,163581,2836],{"class":195},[178,163583,81529],{"class":319},[178,163585,2885],{"class":195},[178,163587,2191],{"class":188},[178,163589,863],{"class":319},[19,163591,163592],{},"列表参数：",[154,163594,163596],{"className":690,"code":163595,"language":692,"meta":160,"style":160},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[70,163597,163598,163617,163625,163637,163646],{"__ignoreMap":160},[178,163599,163600,163602,163605,163608,163610,163613,163615],{"class":180,"line":181},[178,163601,835],{"class":699},[178,163603,163604],{"class":184}," get_total",[178,163606,163607],{"class":319},"(numbers: list[",[178,163609,1956],{"class":195},[178,163611,163612],{"class":319},"]) -> ",[178,163614,1956],{"class":195},[178,163616,847],{"class":319},[178,163618,163619,163621,163623],{"class":180,"line":263},[178,163620,160672],{"class":319},[178,163622,330],{"class":699},[178,163624,49065],{"class":195},[178,163626,163627,163629,163632,163634],{"class":180,"line":274},[178,163628,988],{"class":699},[178,163630,163631],{"class":319}," number ",[178,163633,994],{"class":699},[178,163635,163636],{"class":319}," numbers:\n",[178,163638,163639,163641,163643],{"class":180,"line":354},[178,163640,161347],{"class":319},[178,163642,11238],{"class":699},[178,163644,163645],{"class":319}," number\n",[178,163647,163648,163650],{"class":180,"line":364},[178,163649,5862],{"class":699},[178,163651,163652],{"class":319}," total\n",[19,163654,163655],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163657,163659],{"id":163658},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[154,163661,163663],{"className":690,"code":163662,"language":692,"meta":160,"style":160},"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",[70,163664,163665,163675,163679,163683,163691,163702,163712,163722,163732,163742,163746,163750,163759,163781,163785,163789,163798,163804,163824,163836,163847,163851,163860,163871,163876,163880,163884,163893,163899,163918,163930,163940,163944,163955,163965,163969,163977,163988,163992,163996,164000,164008,164013,164027,164031,164043,164048,164060,164065,164077,164082,164094,164104,164108,164114],{"__ignoreMap":160},[178,163666,163667,163670,163672],{"class":180,"line":181},[178,163668,163669],{"class":319},"balance ",[178,163671,330],{"class":699},[178,163673,163674],{"class":195}," 1000\n",[178,163676,163677],{"class":180,"line":263},[178,163678,722],{"emptyLinePlaceholder":721},[178,163680,163681],{"class":180,"line":274},[178,163682,722],{"emptyLinePlaceholder":721},[178,163684,163685,163687,163689],{"class":180,"line":354},[178,163686,835],{"class":699},[178,163688,153398],{"class":184},[178,163690,33687],{"class":319},[178,163692,163693,163695,163697,163700],{"class":180,"line":364},[178,163694,1022],{"class":195},[178,163696,944],{"class":319},[178,163698,163699],{"class":188},"\"====== ATM ======\"",[178,163701,863],{"class":319},[178,163703,163704,163706,163708,163710],{"class":180,"line":740},[178,163705,1022],{"class":195},[178,163707,944],{"class":319},[178,163709,162013],{"class":188},[178,163711,863],{"class":319},[178,163713,163714,163716,163718,163720],{"class":180,"line":746},[178,163715,1022],{"class":195},[178,163717,944],{"class":319},[178,163719,162024],{"class":188},[178,163721,863],{"class":319},[178,163723,163724,163726,163728,163730],{"class":180,"line":752},[178,163725,1022],{"class":195},[178,163727,944],{"class":319},[178,163729,162035],{"class":188},[178,163731,863],{"class":319},[178,163733,163734,163736,163738,163740],{"class":180,"line":757},[178,163735,1022],{"class":195},[178,163737,944],{"class":319},[178,163739,162046],{"class":188},[178,163741,863],{"class":319},[178,163743,163744],{"class":180,"line":763},[178,163745,722],{"emptyLinePlaceholder":721},[178,163747,163748],{"class":180,"line":769},[178,163749,722],{"emptyLinePlaceholder":721},[178,163751,163752,163754,163757],{"class":180,"line":774},[178,163753,835],{"class":699},[178,163755,163756],{"class":184}," show_balance",[178,163758,33687],{"class":319},[178,163760,163761,163763,163765,163767,163770,163772,163775,163777,163779],{"class":180,"line":780},[178,163762,1022],{"class":195},[178,163764,944],{"class":319},[178,163766,2002],{"class":699},[178,163768,163769],{"class":188},"\"当前余额:",[178,163771,2836],{"class":195},[178,163773,163774],{"class":319},"balance",[178,163776,2885],{"class":195},[178,163778,158377],{"class":188},[178,163780,863],{"class":319},[178,163782,163783],{"class":180,"line":786},[178,163784,722],{"emptyLinePlaceholder":721},[178,163786,163787],{"class":180,"line":792},[178,163788,722],{"emptyLinePlaceholder":721},[178,163790,163791,163793,163796],{"class":180,"line":798},[178,163792,835],{"class":699},[178,163794,163795],{"class":184}," save_money",[178,163797,33687],{"class":319},[178,163799,163800,163802],{"class":180,"line":804},[178,163801,163226],{"class":699},[178,163803,151464],{"class":319},[178,163805,163806,163809,163811,163813,163815,163817,163819,163822],{"class":180,"line":810},[178,163807,163808],{"class":319},"    money ",[178,163810,330],{"class":699},[178,163812,111162],{"class":195},[178,163814,944],{"class":319},[178,163816,55543],{"class":195},[178,163818,944],{"class":319},[178,163820,163821],{"class":188},"\"请输入存款金额:\"",[178,163823,32239],{"class":319},[178,163825,163826,163828,163830,163832,163834],{"class":180,"line":816},[178,163827,922],{"class":699},[178,163829,151507],{"class":319},[178,163831,3394],{"class":699},[178,163833,930],{"class":195},[178,163835,847],{"class":319},[178,163837,163838,163840,163842,163845],{"class":180,"line":822},[178,163839,34183],{"class":195},[178,163841,944],{"class":319},[178,163843,163844],{"class":188},"\"金额必须大于0\"",[178,163846,863],{"class":319},[178,163848,163849],{"class":180,"line":827},[178,163850,153726],{"class":699},[178,163852,163853,163856,163858],{"class":180,"line":832},[178,163854,163855],{"class":319},"    balance ",[178,163857,11238],{"class":699},[178,163859,151540],{"class":319},[178,163861,163862,163864,163866,163869],{"class":180,"line":850},[178,163863,1022],{"class":195},[178,163865,944],{"class":319},[178,163867,163868],{"class":188},"\"存款成功\"",[178,163870,863],{"class":319},[178,163872,163873],{"class":180,"line":866},[178,163874,163875],{"class":319},"    show_balance()\n",[178,163877,163878],{"class":180,"line":877},[178,163879,722],{"emptyLinePlaceholder":721},[178,163881,163882],{"class":180,"line":882},[178,163883,722],{"emptyLinePlaceholder":721},[178,163885,163886,163888,163891],{"class":180,"line":898},[178,163887,835],{"class":699},[178,163889,163890],{"class":184}," withdraw_money",[178,163892,33687],{"class":319},[178,163894,163895,163897],{"class":180,"line":914},[178,163896,163226],{"class":699},[178,163898,151464],{"class":319},[178,163900,163901,163903,163905,163907,163909,163911,163913,163916],{"class":180,"line":919},[178,163902,163808],{"class":319},[178,163904,330],{"class":699},[178,163906,111162],{"class":195},[178,163908,944],{"class":319},[178,163910,55543],{"class":195},[178,163912,944],{"class":319},[178,163914,163915],{"class":188},"\"请输入取款金额:\"",[178,163917,32239],{"class":319},[178,163919,163920,163922,163924,163926,163928],{"class":180,"line":935},[178,163921,922],{"class":699},[178,163923,151507],{"class":319},[178,163925,3394],{"class":699},[178,163927,930],{"class":195},[178,163929,847],{"class":319},[178,163931,163932,163934,163936,163938],{"class":180,"line":952},[178,163933,34183],{"class":195},[178,163935,944],{"class":319},[178,163937,163844],{"class":188},[178,163939,863],{"class":319},[178,163941,163942],{"class":180,"line":966},[178,163943,153726],{"class":699},[178,163945,163946,163948,163950,163952],{"class":180,"line":980},[178,163947,922],{"class":699},[178,163949,151507],{"class":319},[178,163951,2899],{"class":699},[178,163953,163954],{"class":319}," balance:\n",[178,163956,163957,163959,163961,163963],{"class":180,"line":985},[178,163958,34183],{"class":195},[178,163960,944],{"class":319},[178,163962,151602],{"class":188},[178,163964,863],{"class":319},[178,163966,163967],{"class":180,"line":1008},[178,163968,153726],{"class":699},[178,163970,163971,163973,163975],{"class":180,"line":1014},[178,163972,163855],{"class":319},[178,163974,151617],{"class":699},[178,163976,151540],{"class":319},[178,163978,163979,163981,163983,163986],{"class":180,"line":1019},[178,163980,1022],{"class":195},[178,163982,944],{"class":319},[178,163984,163985],{"class":188},"\"取款成功\"",[178,163987,863],{"class":319},[178,163989,163990],{"class":180,"line":1033},[178,163991,163875],{"class":319},[178,163993,163994],{"class":180,"line":1046},[178,163995,722],{"emptyLinePlaceholder":721},[178,163997,163998],{"class":180,"line":1059},[178,163999,722],{"emptyLinePlaceholder":721},[178,164001,164002,164004,164006],{"class":180,"line":1072},[178,164003,110028],{"class":699},[178,164005,97007],{"class":195},[178,164007,847],{"class":319},[178,164009,164010],{"class":180,"line":1077},[178,164011,164012],{"class":319},"    show_menu()\n",[178,164014,164015,164017,164019,164021,164023,164025],{"class":180,"line":1082},[178,164016,162057],{"class":319},[178,164018,330],{"class":699},[178,164020,62326],{"class":195},[178,164022,944],{"class":319},[178,164024,154438],{"class":188},[178,164026,863],{"class":319},[178,164028,164029],{"class":180,"line":1099},[178,164030,722],{"emptyLinePlaceholder":721},[178,164032,164033,164035,164037,164039,164041],{"class":180,"line":9806},[178,164034,922],{"class":699},[178,164036,154451],{"class":319},[178,164038,4725],{"class":699},[178,164040,154456],{"class":188},[178,164042,847],{"class":319},[178,164044,164045],{"class":180,"line":9818},[178,164046,164047],{"class":319},"        show_balance()\n",[178,164049,164050,164052,164054,164056,164058],{"class":180,"line":11477},[178,164051,41025],{"class":699},[178,164053,154451],{"class":319},[178,164055,4725],{"class":699},[178,164057,154475],{"class":188},[178,164059,847],{"class":319},[178,164061,164062],{"class":180,"line":11502},[178,164063,164064],{"class":319},"        save_money()\n",[178,164066,164067,164069,164071,164073,164075],{"class":180,"line":11525},[178,164068,41025],{"class":699},[178,164070,154451],{"class":319},[178,164072,4725],{"class":699},[178,164074,154493],{"class":188},[178,164076,847],{"class":319},[178,164078,164079],{"class":180,"line":11549},[178,164080,164081],{"class":319},"        withdraw_money()\n",[178,164083,164084,164086,164088,164090,164092],{"class":180,"line":11554},[178,164085,41025],{"class":699},[178,164087,154451],{"class":319},[178,164089,4725],{"class":699},[178,164091,154547],{"class":188},[178,164093,847],{"class":319},[178,164095,164096,164098,164100,164102],{"class":180,"line":11559},[178,164097,34183],{"class":195},[178,164099,944],{"class":319},[178,164101,154558],{"class":188},[178,164103,863],{"class":319},[178,164105,164106],{"class":180,"line":11564},[178,164107,33362],{"class":699},[178,164109,164110,164112],{"class":180,"line":11573},[178,164111,159387],{"class":699},[178,164113,847],{"class":319},[178,164115,164116,164118,164120,164122],{"class":180,"line":11578},[178,164117,34183],{"class":195},[178,164119,944],{"class":319},[178,164121,154579],{"class":188},[178,164123,863],{"class":319},[19,164125,164126],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164128,164130],{"id":164129},"_514-易错点","5.14 易错点",[26,164132,164133,164136,164139,164144,164149,164152],{},[29,164134,164135],{},"函数定义后必须调用才会执行。",[29,164137,164138],{},"函数名后面有括号才是调用。",[29,164140,164141,164143],{},[70,164142,18804],{}," 后面的代码不会执行。",[29,164145,164146,164147,297],{},"没有返回值的函数默认返回 ",[70,164148,844],{},[29,164150,164151],{},"局部变量不能在函数外部访问。",[29,164153,164154,164155,164157],{},"不要滥用 ",[70,164156,163191],{},"，更好的方式是让函数返回新值。",[19,164159,164160,164161,164163],{},"例如不用 ",[70,164162,163191],{}," 改写存款：",[154,164165,164167],{"className":690,"code":164166,"language":692,"meta":160,"style":160},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[70,164168,164169,164178,164189,164193,164197,164205,164218],{"__ignoreMap":160},[178,164170,164171,164173,164175],{"class":180,"line":181},[178,164172,835],{"class":699},[178,164174,163795],{"class":184},[178,164176,164177],{"class":319},"(balance, money):\n",[178,164179,164180,164182,164185,164187],{"class":180,"line":263},[178,164181,5862],{"class":699},[178,164183,164184],{"class":319}," balance ",[178,164186,2421],{"class":699},[178,164188,151540],{"class":319},[178,164190,164191],{"class":180,"line":274},[178,164192,722],{"emptyLinePlaceholder":721},[178,164194,164195],{"class":180,"line":354},[178,164196,722],{"emptyLinePlaceholder":721},[178,164198,164199,164201,164203],{"class":180,"line":364},[178,164200,163669],{"class":319},[178,164202,330],{"class":699},[178,164204,163674],{"class":195},[178,164206,164207,164209,164211,164214,164216],{"class":180,"line":740},[178,164208,163669],{"class":319},[178,164210,330],{"class":699},[178,164212,164213],{"class":319}," save_money(balance, ",[178,164215,1002],{"class":195},[178,164217,863],{"class":319},[178,164219,164220,164222],{"class":180,"line":746},[178,164221,1504],{"class":195},[178,164223,164224],{"class":319},"(balance)\n",[14,164226,164228],{"id":164227},"_515-本章练习","5.15 本章练习",[26,164230,164231,164238,164244,164250,164256],{},[29,164232,164233,164234,164237],{},"定义函数 ",[70,164235,164236],{},"print_student(name, age)","，输出学生信息。",[29,164239,164233,164240,164243],{},[70,164241,164242],{},"get_max(a, b, c)","，返回三个数中的最大值。",[29,164245,164233,164246,164249],{},[70,164247,164248],{},"is_even(num)","，判断一个数是否为偶数。",[29,164251,164233,164252,164255],{},[70,164253,164254],{},"calculate_bmi(weight, height)","，返回 BMI。",[29,164257,164258],{},"把第 4 章的菜单程序拆分成多个函数。",[1853,164260,164261],{},"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":160,"searchDepth":263,"depth":263,"links":164263},[164264,164265,164266,164267,164268,164269,164270,164271,164272,164276,164277,164278,164279,164280,164281],{"id":162284,"depth":263,"text":162285},{"id":162325,"depth":263,"text":162326},{"id":162415,"depth":263,"text":162416},{"id":162496,"depth":263,"text":162497},{"id":162629,"depth":263,"text":162630},{"id":162751,"depth":263,"text":162752},{"id":162873,"depth":263,"text":162874},{"id":162950,"depth":263,"text":162951},{"id":163072,"depth":263,"text":163073,"children":164273},[164274,164275],{"id":163076,"depth":274,"text":163077},{"id":163134,"depth":274,"text":163135},{"id":163263,"depth":263,"text":163264},{"id":163389,"depth":263,"text":163390},{"id":163502,"depth":263,"text":163503},{"id":163658,"depth":263,"text":163659},{"id":164129,"depth":263,"text":164130},{"id":164227,"depth":263,"text":164228},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162276,"description":25135},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164288,"title":164289,"body":164290,"description":25135,"extension":1880,"meta":167334,"navigation":721,"path":167335,"seo":167336,"stem":167337,"__hash__":167338},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164291,"toc":167315},[164292,164295,164299,164302,164305,164409,164412,164416,164419,164499,164502,164506,164509,164569,164572,164608,164611,164626,164630,164703,164706,164761,164764,164834,164837,164921,164931,164989,164993,165038,165041,165067,165070,165176,165180,165183,165225,165228,165292,165295,165299,165302,165363,165366,165396,165399,165437,165441,165444,165453,165456,165580,165583,165624,165628,165631,165642,165682,165685,165700,165705,165708,165775,165778,165868,165872,165875,165923,165926,165953,165955,165985,165988,166008,166011,166042,166045,166078,166082,166085,166109,166112,166136,166139,166163,166167,166170,166300,166303,166383,166386,166461,166465,166468,166518,166521,166563,166566,166590,166592,166616,166619,166674,166677,166743,166747,166750,166753,166791,166794,166847,166850,166896,166899,166932,166935,166939,167258,167262,167291,167295,167312],[10,164293,164289],{"id":164294},"_6-数据容器",[14,164296,164298],{"id":164297},"_61-什么是数据容器","6.1 什么是数据容器",[19,164300,164301],{},"数据容器用于一次保存多个数据。",[19,164303,164304],{},"常见容器：",[45,164306,164307,164324],{},[48,164308,164309],{},[51,164310,164311,164313,164316,164319,164322],{},[54,164312,27523],{},[54,164314,164315],{},"是否有序",[54,164317,164318],{},"是否可变",[54,164320,164321],{},"是否允许重复",[54,164323,29241],{},[62,164325,164326,164344,164360,164375,164392],{},[51,164327,164328,164331,164334,164337,164340],{},[67,164329,164330],{},"list列表",[67,164332,164333],{},"有序",[67,164335,164336],{},"可变",[67,164338,164339],{},"允许",[67,164341,164342],{},[70,164343,156622],{},[51,164345,164346,164349,164351,164354,164356],{},[67,164347,164348],{},"tuple元组",[67,164350,164333],{},[67,164352,164353],{},"不可变",[67,164355,164339],{},[67,164357,164358],{},[70,164359,156635],{},[51,164361,164362,164365,164367,164369,164371],{},[67,164363,164364],{},"str字符串",[67,164366,164333],{},[67,164368,164353],{},[67,164370,164339],{},[67,164372,164373],{},[70,164374,157245],{},[51,164376,164377,164380,164383,164385,164388],{},[67,164378,164379],{},"set集合",[67,164381,164382],{},"无序",[67,164384,164336],{},[67,164386,164387],{},"不允许",[67,164389,164390],{},[70,164391,156660],{},[51,164393,164394,164397,164399,164401,164404],{},[67,164395,164396],{},"dict字典",[67,164398,164333],{},[67,164400,164336],{},[67,164402,164403],{},"key不允许重复",[67,164405,164406],{},[70,164407,164408],{},"{\"name\": \"小明\"}",[19,164410,164411],{},"Python 3.7 之后，字典保持插入顺序。",[14,164413,164415],{"id":164414},"_62-列表list","6.2 列表list",[19,164417,164418],{},"列表用于保存一组有顺序的数据。",[154,164420,164422],{"className":690,"code":164421,"language":692,"meta":160,"style":160},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[70,164423,164424,164444,164469,164490],{"__ignoreMap":160},[178,164425,164426,164428,164430,164432,164434,164436,164438,164440,164442],{"class":180,"line":181},[178,164427,161745],{"class":319},[178,164429,330],{"class":699},[178,164431,53953],{"class":319},[178,164433,151253],{"class":188},[178,164435,14196],{"class":319},[178,164437,152301],{"class":188},[178,164439,14196],{"class":319},[178,164441,161096],{"class":188},[178,164443,34978],{"class":319},[178,164445,164446,164449,164451,164453,164455,164457,164459,164461,164463,164465,164467],{"class":180,"line":263},[178,164447,164448],{"class":319},"numbers ",[178,164450,330],{"class":699},[178,164452,53953],{"class":319},[178,164454,1665],{"class":195},[178,164456,14196],{"class":319},[178,164458,1669],{"class":195},[178,164460,14196],{"class":319},[178,164462,2021],{"class":195},[178,164464,14196],{"class":319},[178,164466,2233],{"class":195},[178,164468,34978],{"class":319},[178,164470,164471,164474,164476,164478,164480,164482,164484,164486,164488],{"class":180,"line":274},[178,164472,164473],{"class":319},"mixed ",[178,164475,330],{"class":699},[178,164477,53953],{"class":319},[178,164479,151253],{"class":188},[178,164481,14196],{"class":319},[178,164483,2590],{"class":195},[178,164485,14196],{"class":319},[178,164487,33212],{"class":195},[178,164489,34978],{"class":319},[178,164491,164492,164495,164497],{"class":180,"line":354},[178,164493,164494],{"class":319},"empty ",[178,164496,330],{"class":699},[178,164498,53566],{"class":319},[19,164500,164501],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164503,164505],{"id":164504},"_63-列表索引","6.3 列表索引",[19,164507,164508],{},"正向索引从 0 开始：",[154,164510,164512],{"className":690,"code":164511,"language":692,"meta":160,"style":160},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[70,164513,164514,164534,164538,164549,164559],{"__ignoreMap":160},[178,164515,164516,164518,164520,164522,164524,164526,164528,164530,164532],{"class":180,"line":181},[178,164517,161745],{"class":319},[178,164519,330],{"class":699},[178,164521,53953],{"class":319},[178,164523,151253],{"class":188},[178,164525,14196],{"class":319},[178,164527,152301],{"class":188},[178,164529,14196],{"class":319},[178,164531,161096],{"class":188},[178,164533,34978],{"class":319},[178,164535,164536],{"class":180,"line":263},[178,164537,722],{"emptyLinePlaceholder":721},[178,164539,164540,164542,164545,164547],{"class":180,"line":274},[178,164541,1504],{"class":195},[178,164543,164544],{"class":319},"(names[",[178,164546,2133],{"class":195},[178,164548,6428],{"class":319},[178,164550,164551,164553,164555,164557],{"class":180,"line":354},[178,164552,1504],{"class":195},[178,164554,164544],{"class":319},[178,164556,1665],{"class":195},[178,164558,6428],{"class":319},[178,164560,164561,164563,164565,164567],{"class":180,"line":364},[178,164562,1504],{"class":195},[178,164564,164544],{"class":319},[178,164566,1669],{"class":195},[178,164568,6428],{"class":319},[19,164570,164571],{},"反向索引从 -1 开始：",[154,164573,164575],{"className":690,"code":164574,"language":692,"meta":160,"style":160},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[70,164576,164577,164593],{"__ignoreMap":160},[178,164578,164579,164581,164583,164585,164587,164590],{"class":180,"line":181},[178,164580,1504],{"class":195},[178,164582,164544],{"class":319},[178,164584,2472],{"class":699},[178,164586,1665],{"class":195},[178,164588,164589],{"class":319},"])  ",[178,164591,164592],{"class":2008},"# 小刚\n",[178,164594,164595,164597,164599,164601,164603,164605],{"class":180,"line":263},[178,164596,1504],{"class":195},[178,164598,164544],{"class":319},[178,164600,2472],{"class":699},[178,164602,1669],{"class":195},[178,164604,164589],{"class":319},[178,164606,164607],{"class":2008},"# 小红\n",[19,164609,164610],{},"索引越界会报错：",[154,164612,164614],{"className":690,"code":164613,"language":692,"meta":160,"style":160},"print(names[3])\n",[70,164615,164616],{"__ignoreMap":160},[178,164617,164618,164620,164622,164624],{"class":180,"line":181},[178,164619,1504],{"class":195},[178,164621,164544],{"class":319},[178,164623,2021],{"class":195},[178,164625,6428],{"class":319},[14,164627,164629],{"id":164628},"_64-列表常用方法","6.4 列表常用方法",[154,164631,164633],{"className":690,"code":164632,"language":692,"meta":160,"style":160},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[70,164634,164635,164651,164655,164664,164678,164692,164696],{"__ignoreMap":160},[178,164636,164637,164639,164641,164643,164645,164647,164649],{"class":180,"line":181},[178,164638,161745],{"class":319},[178,164640,330],{"class":699},[178,164642,53953],{"class":319},[178,164644,151253],{"class":188},[178,164646,14196],{"class":319},[178,164648,152301],{"class":188},[178,164650,34978],{"class":319},[178,164652,164653],{"class":180,"line":263},[178,164654,722],{"emptyLinePlaceholder":721},[178,164656,164657,164660,164662],{"class":180,"line":274},[178,164658,164659],{"class":319},"names.append(",[178,164661,161096],{"class":188},[178,164663,863],{"class":319},[178,164665,164666,164669,164671,164673,164676],{"class":180,"line":354},[178,164667,164668],{"class":319},"names.insert(",[178,164670,1665],{"class":195},[178,164672,14196],{"class":319},[178,164674,164675],{"class":188},"\"小李\"",[178,164677,863],{"class":319},[178,164679,164680,164683,164685,164687,164690],{"class":180,"line":364},[178,164681,164682],{"class":319},"names.extend([",[178,164684,10444],{"class":188},[178,164686,14196],{"class":319},[178,164688,164689],{"class":188},"\"小赵\"",[178,164691,6428],{"class":319},[178,164693,164694],{"class":180,"line":740},[178,164695,722],{"emptyLinePlaceholder":721},[178,164697,164698,164700],{"class":180,"line":746},[178,164699,1504],{"class":195},[178,164701,164702],{"class":319},"(names)\n",[19,164704,164705],{},"删除元素：",[154,164707,164709],{"className":690,"code":164708,"language":692,"meta":160,"style":160},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[70,164710,164711,164720,164730,164744,164756],{"__ignoreMap":160},[178,164712,164713,164716,164718],{"class":180,"line":181},[178,164714,164715],{"class":319},"names.remove(",[178,164717,152301],{"class":188},[178,164719,863],{"class":319},[178,164721,164722,164725,164727],{"class":180,"line":263},[178,164723,164724],{"class":319},"last ",[178,164726,330],{"class":699},[178,164728,164729],{"class":319}," names.pop()\n",[178,164731,164732,164735,164737,164740,164742],{"class":180,"line":274},[178,164733,164734],{"class":319},"first ",[178,164736,330],{"class":699},[178,164738,164739],{"class":319}," names.pop(",[178,164741,2133],{"class":195},[178,164743,863],{"class":319},[178,164745,164746,164749,164752,164754],{"class":180,"line":354},[178,164747,164748],{"class":699},"del",[178,164750,164751],{"class":319}," names[",[178,164753,2133],{"class":195},[178,164755,34978],{"class":319},[178,164757,164758],{"class":180,"line":364},[178,164759,164760],{"class":319},"names.clear()\n",[19,164762,164763],{},"查询和统计：",[154,164765,164767],{"className":690,"code":164766,"language":692,"meta":160,"style":160},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[70,164768,164769,164797,164801,164812,164823],{"__ignoreMap":160},[178,164770,164771,164773,164775,164777,164779,164781,164783,164785,164787,164789,164791,164793,164795],{"class":180,"line":181},[178,164772,164448],{"class":319},[178,164774,330],{"class":699},[178,164776,53953],{"class":319},[178,164778,1665],{"class":195},[178,164780,14196],{"class":319},[178,164782,1669],{"class":195},[178,164784,14196],{"class":319},[178,164786,2021],{"class":195},[178,164788,14196],{"class":319},[178,164790,1669],{"class":195},[178,164792,14196],{"class":319},[178,164794,2233],{"class":195},[178,164796,34978],{"class":319},[178,164798,164799],{"class":180,"line":263},[178,164800,722],{"emptyLinePlaceholder":721},[178,164802,164803,164805,164808,164810],{"class":180,"line":274},[178,164804,1504],{"class":195},[178,164806,164807],{"class":319},"(numbers.index(",[178,164809,2021],{"class":195},[178,164811,32239],{"class":319},[178,164813,164814,164816,164819,164821],{"class":180,"line":354},[178,164815,1504],{"class":195},[178,164817,164818],{"class":319},"(numbers.count(",[178,164820,1669],{"class":195},[178,164822,32239],{"class":319},[178,164824,164825,164827,164829,164831],{"class":180,"line":364},[178,164826,1504],{"class":195},[178,164828,944],{"class":319},[178,164830,9127],{"class":195},[178,164832,164833],{"class":319},"(numbers))\n",[19,164835,164836],{},"排序：",[154,164838,164840],{"className":690,"code":164839,"language":692,"meta":160,"style":160},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[70,164841,164842,164866,164870,164875,164882,164886,164900,164906,164910,164915],{"__ignoreMap":160},[178,164843,164844,164846,164848,164850,164852,164854,164856,164858,164860,164862,164864],{"class":180,"line":181},[178,164845,164448],{"class":319},[178,164847,330],{"class":699},[178,164849,53953],{"class":319},[178,164851,2021],{"class":195},[178,164853,14196],{"class":319},[178,164855,1665],{"class":195},[178,164857,14196],{"class":319},[178,164859,2259],{"class":195},[178,164861,14196],{"class":319},[178,164863,1669],{"class":195},[178,164865,34978],{"class":319},[178,164867,164868],{"class":180,"line":263},[178,164869,722],{"emptyLinePlaceholder":721},[178,164871,164872],{"class":180,"line":274},[178,164873,164874],{"class":319},"numbers.sort()\n",[178,164876,164877,164879],{"class":180,"line":354},[178,164878,1504],{"class":195},[178,164880,164881],{"class":319},"(numbers)\n",[178,164883,164884],{"class":180,"line":364},[178,164885,722],{"emptyLinePlaceholder":721},[178,164887,164888,164891,164894,164896,164898],{"class":180,"line":740},[178,164889,164890],{"class":319},"numbers.sort(",[178,164892,164893],{"class":6985},"reverse",[178,164895,330],{"class":699},[178,164897,33212],{"class":195},[178,164899,863],{"class":319},[178,164901,164902,164904],{"class":180,"line":746},[178,164903,1504],{"class":195},[178,164905,164881],{"class":319},[178,164907,164908],{"class":180,"line":752},[178,164909,722],{"emptyLinePlaceholder":721},[178,164911,164912],{"class":180,"line":757},[178,164913,164914],{"class":319},"numbers.reverse()\n",[178,164916,164917,164919],{"class":180,"line":763},[178,164918,1504],{"class":195},[178,164920,164881],{"class":319},[19,164922,164923,164926,164927,164930],{},[70,164924,164925],{},"sort()"," 会修改原列表，",[70,164928,164929],{},"sorted()"," 返回新列表。",[154,164932,164934],{"className":690,"code":164933,"language":692,"meta":160,"style":160},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[70,164935,164936,164960,164972,164976,164982],{"__ignoreMap":160},[178,164937,164938,164940,164942,164944,164946,164948,164950,164952,164954,164956,164958],{"class":180,"line":181},[178,164939,164448],{"class":319},[178,164941,330],{"class":699},[178,164943,53953],{"class":319},[178,164945,2021],{"class":195},[178,164947,14196],{"class":319},[178,164949,1665],{"class":195},[178,164951,14196],{"class":319},[178,164953,2259],{"class":195},[178,164955,14196],{"class":319},[178,164957,1669],{"class":195},[178,164959,34978],{"class":319},[178,164961,164962,164965,164967,164970],{"class":180,"line":263},[178,164963,164964],{"class":319},"new_numbers ",[178,164966,330],{"class":699},[178,164968,164969],{"class":195}," sorted",[178,164971,164881],{"class":319},[178,164973,164974],{"class":180,"line":274},[178,164975,722],{"emptyLinePlaceholder":721},[178,164977,164978,164980],{"class":180,"line":354},[178,164979,1504],{"class":195},[178,164981,164881],{"class":319},[178,164983,164984,164986],{"class":180,"line":364},[178,164985,1504],{"class":195},[178,164987,164988],{"class":319},"(new_numbers)\n",[14,164990,164992],{"id":164991},"_65-列表遍历","6.5 列表遍历",[154,164994,164996],{"className":690,"code":164995,"language":692,"meta":160,"style":160},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[70,164997,164998,165018,165022,165032],{"__ignoreMap":160},[178,164999,165000,165002,165004,165006,165008,165010,165012,165014,165016],{"class":180,"line":181},[178,165001,161745],{"class":319},[178,165003,330],{"class":699},[178,165005,53953],{"class":319},[178,165007,151253],{"class":188},[178,165009,14196],{"class":319},[178,165011,152301],{"class":188},[178,165013,14196],{"class":319},[178,165015,161096],{"class":188},[178,165017,34978],{"class":319},[178,165019,165020],{"class":180,"line":263},[178,165021,722],{"emptyLinePlaceholder":721},[178,165023,165024,165026,165028,165030],{"class":180,"line":274},[178,165025,1474],{"class":699},[178,165027,161781],{"class":319},[178,165029,994],{"class":699},[178,165031,161786],{"class":319},[178,165033,165034,165036],{"class":180,"line":354},[178,165035,1022],{"class":195},[178,165037,152025],{"class":319},[19,165039,165040],{},"需要索引时：",[154,165042,165044],{"className":690,"code":165043,"language":692,"meta":160,"style":160},"for index, name in enumerate(names):\n    print(index, name)\n",[70,165045,165046,165060],{"__ignoreMap":160},[178,165047,165048,165050,165053,165055,165057],{"class":180,"line":181},[178,165049,1474],{"class":699},[178,165051,165052],{"class":319}," index, name ",[178,165054,994],{"class":699},[178,165056,33341],{"class":195},[178,165058,165059],{"class":319},"(names):\n",[178,165061,165062,165064],{"class":180,"line":263},[178,165063,1022],{"class":195},[178,165065,165066],{"class":319},"(index, name)\n",[19,165068,165069],{},"统计总分：",[154,165071,165073],{"className":690,"code":165072,"language":692,"meta":160,"style":160},"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",[70,165074,165075,165100,165108,165112,165123,165131,165135,165152],{"__ignoreMap":160},[178,165076,165077,165080,165082,165084,165086,165088,165090,165092,165094,165096,165098],{"class":180,"line":181},[178,165078,165079],{"class":319},"scores ",[178,165081,330],{"class":699},[178,165083,53953],{"class":319},[178,165085,2802],{"class":195},[178,165087,14196],{"class":319},[178,165089,2676],{"class":195},[178,165091,14196],{"class":319},[178,165093,2194],{"class":195},[178,165095,14196],{"class":319},[178,165097,2501],{"class":195},[178,165099,34978],{"class":319},[178,165101,165102,165104,165106],{"class":180,"line":263},[178,165103,158625],{"class":319},[178,165105,330],{"class":699},[178,165107,49065],{"class":195},[178,165109,165110],{"class":180,"line":274},[178,165111,722],{"emptyLinePlaceholder":721},[178,165113,165114,165116,165118,165120],{"class":180,"line":354},[178,165115,1474],{"class":699},[178,165117,159148],{"class":319},[178,165119,994],{"class":699},[178,165121,165122],{"class":319}," scores:\n",[178,165124,165125,165127,165129],{"class":180,"line":364},[178,165126,160672],{"class":319},[178,165128,11238],{"class":699},[178,165130,3385],{"class":319},[178,165132,165133],{"class":180,"line":740},[178,165134,722],{"emptyLinePlaceholder":721},[178,165136,165137,165140,165142,165145,165147,165149],{"class":180,"line":746},[178,165138,165139],{"class":319},"avg ",[178,165141,330],{"class":699},[178,165143,165144],{"class":319}," total ",[178,165146,2524],{"class":699},[178,165148,9100],{"class":195},[178,165150,165151],{"class":319},"(scores)\n",[178,165153,165154,165156,165158,165160,165163,165165,165168,165170,165172,165174],{"class":180,"line":752},[178,165155,1504],{"class":195},[178,165157,944],{"class":319},[178,165159,2002],{"class":699},[178,165161,165162],{"class":188},"\"平均分:",[178,165164,2836],{"class":195},[178,165166,165167],{"class":319},"avg",[178,165169,158524],{"class":699},[178,165171,2885],{"class":195},[178,165173,2191],{"class":188},[178,165175,863],{"class":319},[14,165177,165179],{"id":165178},"_66-元组tuple","6.6 元组tuple",[19,165181,165182],{},"元组和列表类似，但不可修改。",[154,165184,165186],{"className":690,"code":165185,"language":692,"meta":160,"style":160},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[70,165187,165188,165205],{"__ignoreMap":160},[178,165189,165190,165193,165195,165197,165199,165201,165203],{"class":180,"line":181},[178,165191,165192],{"class":319},"point ",[178,165194,330],{"class":699},[178,165196,3457],{"class":319},[178,165198,2386],{"class":195},[178,165200,14196],{"class":319},[178,165202,2640],{"class":195},[178,165204,863],{"class":319},[178,165206,165207,165209,165211,165213,165215,165217,165219,165221,165223],{"class":180,"line":263},[178,165208,117679],{"class":319},[178,165210,330],{"class":699},[178,165212,3457],{"class":319},[178,165214,151253],{"class":188},[178,165216,14196],{"class":319},[178,165218,2590],{"class":195},[178,165220,14196],{"class":319},[178,165222,70989],{"class":188},[178,165224,863],{"class":319},[19,165226,165227],{},"单元素元组必须加逗号：",[154,165229,165231],{"className":690,"code":165230,"language":692,"meta":160,"style":160},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[70,165232,165233,165247,165260,165264,165278],{"__ignoreMap":160},[178,165234,165235,165238,165240,165242,165244],{"class":180,"line":181},[178,165236,165237],{"class":319},"t1 ",[178,165239,330],{"class":699},[178,165241,3457],{"class":319},[178,165243,2386],{"class":195},[178,165245,165246],{"class":319},",)\n",[178,165248,165249,165252,165254,165256,165258],{"class":180,"line":263},[178,165250,165251],{"class":319},"t2 ",[178,165253,330],{"class":699},[178,165255,3457],{"class":319},[178,165257,2386],{"class":195},[178,165259,863],{"class":319},[178,165261,165262],{"class":180,"line":274},[178,165263,722],{"emptyLinePlaceholder":721},[178,165265,165266,165268,165270,165272,165275],{"class":180,"line":354},[178,165267,1504],{"class":195},[178,165269,944],{"class":319},[178,165271,550],{"class":195},[178,165273,165274],{"class":319},"(t1))  ",[178,165276,165277],{"class":2008},"# tuple\n",[178,165279,165280,165282,165284,165286,165289],{"class":180,"line":364},[178,165281,1504],{"class":195},[178,165283,944],{"class":319},[178,165285,550],{"class":195},[178,165287,165288],{"class":319},"(t2))  ",[178,165290,165291],{"class":2008},"# int\n",[19,165293,165294],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165296,165298],{"id":165297},"_67-字符串str","6.7 字符串str",[19,165300,165301],{},"字符串也是序列，可以索引、切片和遍历。",[154,165303,165305],{"className":690,"code":165304,"language":692,"meta":160,"style":160},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[70,165306,165307,165315,165319,165330,165342,165346,165357],{"__ignoreMap":160},[178,165308,165309,165311,165313],{"class":180,"line":181},[178,165310,157809],{"class":319},[178,165312,330],{"class":699},[178,165314,161046],{"class":188},[178,165316,165317],{"class":180,"line":263},[178,165318,722],{"emptyLinePlaceholder":721},[178,165320,165321,165323,165326,165328],{"class":180,"line":274},[178,165322,1504],{"class":195},[178,165324,165325],{"class":319},"(text[",[178,165327,2133],{"class":195},[178,165329,6428],{"class":319},[178,165331,165332,165334,165336,165338,165340],{"class":180,"line":354},[178,165333,1504],{"class":195},[178,165335,165325],{"class":319},[178,165337,2472],{"class":699},[178,165339,1665],{"class":195},[178,165341,6428],{"class":319},[178,165343,165344],{"class":180,"line":364},[178,165345,722],{"emptyLinePlaceholder":721},[178,165347,165348,165350,165352,165354],{"class":180,"line":740},[178,165349,1474],{"class":699},[178,165351,161057],{"class":319},[178,165353,994],{"class":699},[178,165355,165356],{"class":319}," text:\n",[178,165358,165359,165361],{"class":180,"line":746},[178,165360,1022],{"class":195},[178,165362,161068],{"class":319},[19,165364,165365],{},"字符串不可变：",[154,165367,165369],{"className":690,"code":165368,"language":692,"meta":160,"style":160},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[70,165370,165371,165379],{"__ignoreMap":160},[178,165372,165373,165375,165377],{"class":180,"line":181},[178,165374,157809],{"class":319},[178,165376,330],{"class":699},[178,165378,161046],{"class":188},[178,165380,165381,165384,165386,165388,165390,165393],{"class":180,"line":263},[178,165382,165383],{"class":319},"text[",[178,165385,2133],{"class":195},[178,165387,6214],{"class":319},[178,165389,330],{"class":699},[178,165391,165392],{"class":188}," \"P\"",[178,165394,165395],{"class":2008},"  # 报错\n",[19,165397,165398],{},"如果要得到新字符串：",[154,165400,165402],{"className":690,"code":165401,"language":692,"meta":160,"style":160},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[70,165403,165404,165412,165430],{"__ignoreMap":160},[178,165405,165406,165408,165410],{"class":180,"line":181},[178,165407,157809],{"class":319},[178,165409,330],{"class":699},[178,165411,161046],{"class":188},[178,165413,165414,165416,165418,165420,165422,165425,165427],{"class":180,"line":263},[178,165415,157809],{"class":319},[178,165417,330],{"class":699},[178,165419,165392],{"class":188},[178,165421,47298],{"class":699},[178,165423,165424],{"class":319}," text[",[178,165426,1665],{"class":195},[178,165428,165429],{"class":319},":]\n",[178,165431,165432,165434],{"class":180,"line":274},[178,165433,1504],{"class":195},[178,165435,165436],{"class":319},"(text)\n",[14,165438,165440],{"id":165439},"_68-切片","6.8 切片",[19,165442,165443],{},"切片用于从序列中取一部分。",[154,165445,165447],{"className":690,"code":165446,"language":692,"meta":160,"style":160},"序列[开始:结束:步长]\n",[70,165448,165449],{"__ignoreMap":160},[178,165450,165451],{"class":180,"line":181},[178,165452,165446],{"class":319},[19,165454,165455],{},"结束位置不包含。",[154,165457,165459],{"className":690,"code":165458,"language":692,"meta":160,"style":160},"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",[70,165460,165461,165498,165502,165521,165536,165550,165564],{"__ignoreMap":160},[178,165462,165463,165466,165468,165470,165472,165474,165476,165478,165480,165482,165484,165486,165488,165490,165492,165494,165496],{"class":180,"line":181},[178,165464,165465],{"class":319},"nums ",[178,165467,330],{"class":699},[178,165469,53953],{"class":319},[178,165471,2133],{"class":195},[178,165473,14196],{"class":319},[178,165475,1665],{"class":195},[178,165477,14196],{"class":319},[178,165479,1669],{"class":195},[178,165481,14196],{"class":319},[178,165483,2021],{"class":195},[178,165485,14196],{"class":319},[178,165487,2233],{"class":195},[178,165489,14196],{"class":319},[178,165491,2259],{"class":195},[178,165493,14196],{"class":319},[178,165495,2284],{"class":195},[178,165497,34978],{"class":319},[178,165499,165500],{"class":180,"line":263},[178,165501,722],{"emptyLinePlaceholder":721},[178,165503,165504,165506,165509,165511,165513,165515,165518],{"class":180,"line":274},[178,165505,1504],{"class":195},[178,165507,165508],{"class":319},"(nums[",[178,165510,1665],{"class":195},[178,165512,2799],{"class":319},[178,165514,2233],{"class":195},[178,165516,165517],{"class":319},"])    ",[178,165519,165520],{"class":2008},"# [1, 2, 3]\n",[178,165522,165523,165525,165528,165530,165533],{"class":180,"line":354},[178,165524,1504],{"class":195},[178,165526,165527],{"class":319},"(nums[:",[178,165529,2021],{"class":195},[178,165531,165532],{"class":319},"])     ",[178,165534,165535],{"class":2008},"# [0, 1, 2]\n",[178,165537,165538,165540,165542,165544,165547],{"class":180,"line":364},[178,165539,1504],{"class":195},[178,165541,165508],{"class":319},[178,165543,2021],{"class":195},[178,165545,165546],{"class":319},":])     ",[178,165548,165549],{"class":2008},"# [3, 4, 5, 6]\n",[178,165551,165552,165554,165557,165559,165561],{"class":180,"line":740},[178,165553,1504],{"class":195},[178,165555,165556],{"class":319},"(nums[::",[178,165558,1669],{"class":195},[178,165560,165517],{"class":319},[178,165562,165563],{"class":2008},"# [0, 2, 4, 6]\n",[178,165565,165566,165568,165570,165572,165574,165577],{"class":180,"line":746},[178,165567,1504],{"class":195},[178,165569,165556],{"class":319},[178,165571,2472],{"class":699},[178,165573,1665],{"class":195},[178,165575,165576],{"class":319},"])   ",[178,165578,165579],{"class":2008},"# 反转\n",[19,165581,165582],{},"字符串切片：",[154,165584,165586],{"className":690,"code":165585,"language":692,"meta":160,"style":160},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[70,165587,165588,165597,165611],{"__ignoreMap":160},[178,165589,165590,165592,165594],{"class":180,"line":181},[178,165591,157809],{"class":319},[178,165593,330],{"class":699},[178,165595,165596],{"class":188}," \"abcdef\"\n",[178,165598,165599,165601,165603,165605,165607,165609],{"class":180,"line":263},[178,165600,1504],{"class":195},[178,165602,165325],{"class":319},[178,165604,1665],{"class":195},[178,165606,2799],{"class":319},[178,165608,2233],{"class":195},[178,165610,6428],{"class":319},[178,165612,165613,165615,165618,165620,165622],{"class":180,"line":274},[178,165614,1504],{"class":195},[178,165616,165617],{"class":319},"(text[::",[178,165619,2472],{"class":699},[178,165621,1665],{"class":195},[178,165623,6428],{"class":319},[14,165625,165627],{"id":165626},"_69-集合set","6.9 集合set",[19,165629,165630],{},"集合特点：",[26,165632,165633,165636,165639],{},[29,165634,165635],{},"无序。",[29,165637,165638],{},"元素不重复。",[29,165640,165641],{},"可以做交集、并集、差集。",[154,165643,165645],{"className":690,"code":165644,"language":692,"meta":160,"style":160},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[70,165646,165647,165675],{"__ignoreMap":160},[178,165648,165649,165651,165653,165655,165657,165659,165661,165663,165665,165667,165669,165671,165673],{"class":180,"line":181},[178,165650,165465],{"class":319},[178,165652,330],{"class":699},[178,165654,6219],{"class":319},[178,165656,1665],{"class":195},[178,165658,14196],{"class":319},[178,165660,1669],{"class":195},[178,165662,14196],{"class":319},[178,165664,2021],{"class":195},[178,165666,14196],{"class":319},[178,165668,2021],{"class":195},[178,165670,14196],{"class":319},[178,165672,2233],{"class":195},[178,165674,3371],{"class":319},[178,165676,165677,165679],{"class":180,"line":263},[178,165678,1504],{"class":195},[178,165680,165681],{"class":319},"(nums)\n",[19,165683,165684],{},"创建空集合：",[154,165686,165688],{"className":690,"code":165687,"language":692,"meta":160,"style":160},"s = set()\n",[70,165689,165690],{"__ignoreMap":160},[178,165691,165692,165694,165696,165698],{"class":180,"line":181},[178,165693,12340],{"class":319},[178,165695,330],{"class":699},[178,165697,121087],{"class":195},[178,165699,3760],{"class":319},[19,165701,10786,165702,165704],{},[70,165703,34191],{}," 是空字典，不是空集合。",[19,165706,165707],{},"集合常用操作：",[154,165709,165711],{"className":690,"code":165710,"language":692,"meta":160,"style":160},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[70,165712,165713,165733,165737,165746,165755,165764],{"__ignoreMap":160},[178,165714,165715,165717,165719,165721,165723,165725,165727,165729,165731],{"class":180,"line":181},[178,165716,12340],{"class":319},[178,165718,330],{"class":699},[178,165720,6219],{"class":319},[178,165722,1665],{"class":195},[178,165724,14196],{"class":319},[178,165726,1669],{"class":195},[178,165728,14196],{"class":319},[178,165730,2021],{"class":195},[178,165732,3371],{"class":319},[178,165734,165735],{"class":180,"line":263},[178,165736,722],{"emptyLinePlaceholder":721},[178,165738,165739,165742,165744],{"class":180,"line":274},[178,165740,165741],{"class":319},"s.add(",[178,165743,2233],{"class":195},[178,165745,863],{"class":319},[178,165747,165748,165751,165753],{"class":180,"line":354},[178,165749,165750],{"class":319},"s.remove(",[178,165752,1669],{"class":195},[178,165754,863],{"class":319},[178,165756,165757,165760,165762],{"class":180,"line":364},[178,165758,165759],{"class":319},"s.discard(",[178,165761,2386],{"class":195},[178,165763,863],{"class":319},[178,165765,165766,165768,165770,165772],{"class":180,"line":740},[178,165767,1504],{"class":195},[178,165769,944],{"class":319},[178,165771,9127],{"class":195},[178,165773,165774],{"class":319},"(s))\n",[19,165776,165777],{},"交并差：",[154,165779,165781],{"className":690,"code":165780,"language":692,"meta":160,"style":160},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[70,165782,165783,165803,165823,165827,165842,165855],{"__ignoreMap":160},[178,165784,165785,165787,165789,165791,165793,165795,165797,165799,165801],{"class":180,"line":181},[178,165786,12680],{"class":319},[178,165788,330],{"class":699},[178,165790,6219],{"class":319},[178,165792,1665],{"class":195},[178,165794,14196],{"class":319},[178,165796,1669],{"class":195},[178,165798,14196],{"class":319},[178,165800,2021],{"class":195},[178,165802,3371],{"class":319},[178,165804,165805,165807,165809,165811,165813,165815,165817,165819,165821],{"class":180,"line":263},[178,165806,12706],{"class":319},[178,165808,330],{"class":699},[178,165810,6219],{"class":319},[178,165812,2021],{"class":195},[178,165814,14196],{"class":319},[178,165816,2233],{"class":195},[178,165818,14196],{"class":319},[178,165820,2259],{"class":195},[178,165822,3371],{"class":319},[178,165824,165825],{"class":180,"line":274},[178,165826,722],{"emptyLinePlaceholder":721},[178,165828,165829,165831,165834,165836,165839],{"class":180,"line":354},[178,165830,1504],{"class":195},[178,165832,165833],{"class":319},"(a ",[178,165835,2293],{"class":699},[178,165837,165838],{"class":319}," b)  ",[178,165840,165841],{"class":2008},"# 交集\n",[178,165843,165844,165846,165848,165850,165852],{"class":180,"line":364},[178,165845,1504],{"class":195},[178,165847,165833],{"class":319},[178,165849,2860],{"class":699},[178,165851,165838],{"class":319},[178,165853,165854],{"class":2008},"# 并集\n",[178,165856,165857,165859,165861,165863,165865],{"class":180,"line":740},[178,165858,1504],{"class":195},[178,165860,165833],{"class":319},[178,165862,2472],{"class":699},[178,165864,165838],{"class":319},[178,165866,165867],{"class":2008},"# 差集\n",[14,165869,165871],{"id":165870},"_610-字典dict","6.10 字典dict",[19,165873,165874],{},"字典通过 key-value 保存数据。",[154,165876,165878],{"className":690,"code":165877,"language":692,"meta":160,"style":160},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[70,165879,165880,165888,165898,165909,165919],{"__ignoreMap":160},[178,165881,165882,165884,165886],{"class":180,"line":181},[178,165883,150846],{"class":319},[178,165885,330],{"class":699},[178,165887,17330],{"class":319},[178,165889,165890,165892,165894,165896],{"class":180,"line":263},[178,165891,148385],{"class":188},[178,165893,53167],{"class":319},[178,165895,151253],{"class":188},[178,165897,33202],{"class":319},[178,165899,165900,165903,165905,165907],{"class":180,"line":274},[178,165901,165902],{"class":188},"    \"age\"",[178,165904,53167],{"class":319},[178,165906,2590],{"class":195},[178,165908,33202],{"class":319},[178,165910,165911,165914,165916],{"class":180,"line":354},[178,165912,165913],{"class":188},"    \"score\"",[178,165915,53167],{"class":319},[178,165917,165918],{"class":195},"95\n",[178,165920,165921],{"class":180,"line":364},[178,165922,3371],{"class":319},[19,165924,165925],{},"获取值：",[154,165927,165929],{"className":690,"code":165928,"language":692,"meta":160,"style":160},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[70,165930,165931,165942],{"__ignoreMap":160},[178,165932,165933,165935,165938,165940],{"class":180,"line":181},[178,165934,1504],{"class":195},[178,165936,165937],{"class":319},"(student[",[178,165939,333],{"class":188},[178,165941,6428],{"class":319},[178,165943,165944,165946,165949,165951],{"class":180,"line":263},[178,165945,1504],{"class":195},[178,165947,165948],{"class":319},"(student.get(",[178,165950,333],{"class":188},[178,165952,32239],{"class":319},[19,165954,17146],{},[154,165956,165958],{"className":690,"code":165957,"language":692,"meta":160,"style":160},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[70,165959,165960,165973],{"__ignoreMap":160},[178,165961,165962,165964,165967,165970],{"class":180,"line":181},[178,165963,154224],{"class":319},[178,165965,165966],{"class":188},"\"address\"",[178,165968,165969],{"class":319},"]     ",[178,165971,165972],{"class":2008},"# key不存在会报错\n",[178,165974,165975,165978,165980,165982],{"class":180,"line":263},[178,165976,165977],{"class":319},"student.get(",[178,165979,165966],{"class":188},[178,165981,15474],{"class":319},[178,165983,165984],{"class":2008},"# key不存在返回None\n",[19,165986,165987],{},"设置默认值：",[154,165989,165991],{"className":690,"code":165990,"language":692,"meta":160,"style":160},"print(student.get(\"address\", \"未知\"))\n",[70,165992,165993],{"__ignoreMap":160},[178,165994,165995,165997,165999,166001,166003,166006],{"class":180,"line":181},[178,165996,1504],{"class":195},[178,165998,165948],{"class":319},[178,166000,165966],{"class":188},[178,166002,14196],{"class":319},[178,166004,166005],{"class":188},"\"未知\"",[178,166007,32239],{"class":319},[19,166009,166010],{},"新增和修改：",[154,166012,166014],{"className":690,"code":166013,"language":692,"meta":160,"style":160},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[70,166015,166016,166029],{"__ignoreMap":160},[178,166017,166018,166020,166022,166024,166026],{"class":180,"line":181},[178,166019,154224],{"class":319},[178,166021,70844],{"class":188},[178,166023,6214],{"class":319},[178,166025,330],{"class":699},[178,166027,166028],{"class":195}," 19\n",[178,166030,166031,166033,166035,166037,166039],{"class":180,"line":263},[178,166032,154224],{"class":319},[178,166034,165966],{"class":188},[178,166036,6214],{"class":319},[178,166038,330],{"class":699},[178,166040,166041],{"class":188}," \"北京\"\n",[19,166043,166044],{},"删除：",[154,166046,166048],{"className":690,"code":166047,"language":692,"meta":160,"style":160},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[70,166049,166050,166063,166073],{"__ignoreMap":160},[178,166051,166052,166054,166056,166059,166061],{"class":180,"line":181},[178,166053,156723],{"class":319},[178,166055,330],{"class":699},[178,166057,166058],{"class":319}," student.pop(",[178,166060,152837],{"class":188},[178,166062,863],{"class":319},[178,166064,166065,166067,166069,166071],{"class":180,"line":263},[178,166066,164748],{"class":699},[178,166068,153514],{"class":319},[178,166070,70844],{"class":188},[178,166072,34978],{"class":319},[178,166074,166075],{"class":180,"line":274},[178,166076,166077],{"class":319},"student.clear()\n",[14,166079,166081],{"id":166080},"_611-字典遍历","6.11 字典遍历",[19,166083,166084],{},"遍历 key：",[154,166086,166088],{"className":690,"code":166087,"language":692,"meta":160,"style":160},"for key in student:\n    print(key, student[key])\n",[70,166089,166090,166102],{"__ignoreMap":160},[178,166091,166092,166094,166097,166099],{"class":180,"line":181},[178,166093,1474],{"class":699},[178,166095,166096],{"class":319}," key ",[178,166098,994],{"class":699},[178,166100,166101],{"class":319}," student:\n",[178,166103,166104,166106],{"class":180,"line":263},[178,166105,1022],{"class":195},[178,166107,166108],{"class":319},"(key, student[key])\n",[19,166110,166111],{},"遍历 value：",[154,166113,166115],{"className":690,"code":166114,"language":692,"meta":160,"style":160},"for value in student.values():\n    print(value)\n",[70,166116,166117,166129],{"__ignoreMap":160},[178,166118,166119,166121,166124,166126],{"class":180,"line":181},[178,166120,1474],{"class":699},[178,166122,166123],{"class":319}," value ",[178,166125,994],{"class":699},[178,166127,166128],{"class":319}," student.values():\n",[178,166130,166131,166133],{"class":180,"line":263},[178,166132,1022],{"class":195},[178,166134,166135],{"class":319},"(value)\n",[19,166137,166138],{},"遍历 key 和 value：",[154,166140,166142],{"className":690,"code":166141,"language":692,"meta":160,"style":160},"for key, value in student.items():\n    print(key, value)\n",[70,166143,166144,166156],{"__ignoreMap":160},[178,166145,166146,166148,166151,166153],{"class":180,"line":181},[178,166147,1474],{"class":699},[178,166149,166150],{"class":319}," key, value ",[178,166152,994],{"class":699},[178,166154,166155],{"class":319}," student.items():\n",[178,166157,166158,166160],{"class":180,"line":263},[178,166159,1022],{"class":195},[178,166161,166162],{"class":319},"(key, value)\n",[14,166164,166166],{"id":166165},"_612-嵌套容器","6.12 嵌套容器",[19,166168,166169],{},"列表中保存字典，是项目中最常见的结构之一。",[154,166171,166173],{"className":690,"code":166172,"language":692,"meta":160,"style":160},"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",[70,166174,166175,166183,166211,166239,166267,166271,166275,166285],{"__ignoreMap":160},[178,166176,166177,166179,166181],{"class":180,"line":181},[178,166178,161081],{"class":319},[178,166180,330],{"class":699},[178,166182,57168],{"class":319},[178,166184,166185,166187,166189,166191,166193,166195,166197,166199,166201,166203,166205,166207,166209],{"class":180,"line":263},[178,166186,149750],{"class":319},[178,166188,333],{"class":188},[178,166190,53167],{"class":319},[178,166192,151253],{"class":188},[178,166194,14196],{"class":319},[178,166196,70844],{"class":188},[178,166198,53167],{"class":319},[178,166200,2590],{"class":195},[178,166202,14196],{"class":319},[178,166204,152837],{"class":188},[178,166206,53167],{"class":319},[178,166208,2928],{"class":195},[178,166210,6701],{"class":319},[178,166212,166213,166215,166217,166219,166221,166223,166225,166227,166229,166231,166233,166235,166237],{"class":180,"line":274},[178,166214,149750],{"class":319},[178,166216,333],{"class":188},[178,166218,53167],{"class":319},[178,166220,152301],{"class":188},[178,166222,14196],{"class":319},[178,166224,70844],{"class":188},[178,166226,53167],{"class":319},[178,166228,2565],{"class":195},[178,166230,14196],{"class":319},[178,166232,152837],{"class":188},[178,166234,53167],{"class":319},[178,166236,2751],{"class":195},[178,166238,6701],{"class":319},[178,166240,166241,166243,166245,166247,166249,166251,166253,166255,166257,166259,166261,166263,166265],{"class":180,"line":354},[178,166242,149750],{"class":319},[178,166244,333],{"class":188},[178,166246,53167],{"class":319},[178,166248,161096],{"class":188},[178,166250,14196],{"class":319},[178,166252,70844],{"class":188},[178,166254,53167],{"class":319},[178,166256,2615],{"class":195},[178,166258,14196],{"class":319},[178,166260,152837],{"class":188},[178,166262,53167],{"class":319},[178,166264,2346],{"class":195},[178,166266,6701],{"class":319},[178,166268,166269],{"class":180,"line":364},[178,166270,34978],{"class":319},[178,166272,166273],{"class":180,"line":740},[178,166274,722],{"emptyLinePlaceholder":721},[178,166276,166277,166279,166281,166283],{"class":180,"line":746},[178,166278,1474],{"class":699},[178,166280,153502],{"class":319},[178,166282,994],{"class":699},[178,166284,153507],{"class":319},[178,166286,166287,166289,166291,166293,166296,166298],{"class":180,"line":752},[178,166288,1022],{"class":195},[178,166290,165937],{"class":319},[178,166292,333],{"class":188},[178,166294,166295],{"class":319},"], student[",[178,166297,152837],{"class":188},[178,166299,6428],{"class":319},[19,166301,166302],{},"统计平均分：",[154,166304,166306],{"className":690,"code":166305,"language":692,"meta":160,"style":160},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[70,166307,166308,166316,166320,166330,166342,166346,166361],{"__ignoreMap":160},[178,166309,166310,166312,166314],{"class":180,"line":181},[178,166311,158625],{"class":319},[178,166313,330],{"class":699},[178,166315,49065],{"class":195},[178,166317,166318],{"class":180,"line":263},[178,166319,722],{"emptyLinePlaceholder":721},[178,166321,166322,166324,166326,166328],{"class":180,"line":274},[178,166323,1474],{"class":699},[178,166325,153502],{"class":319},[178,166327,994],{"class":699},[178,166329,153507],{"class":319},[178,166331,166332,166334,166336,166338,166340],{"class":180,"line":354},[178,166333,160672],{"class":319},[178,166335,11238],{"class":699},[178,166337,153514],{"class":319},[178,166339,152837],{"class":188},[178,166341,34978],{"class":319},[178,166343,166344],{"class":180,"line":364},[178,166345,722],{"emptyLinePlaceholder":721},[178,166347,166348,166350,166352,166354,166356,166358],{"class":180,"line":740},[178,166349,165139],{"class":319},[178,166351,330],{"class":699},[178,166353,165144],{"class":319},[178,166355,2524],{"class":699},[178,166357,9100],{"class":195},[178,166359,166360],{"class":319},"(students)\n",[178,166362,166363,166365,166367,166369,166371,166373,166375,166377,166379,166381],{"class":180,"line":746},[178,166364,1504],{"class":195},[178,166366,944],{"class":319},[178,166368,2002],{"class":699},[178,166370,165162],{"class":188},[178,166372,2836],{"class":195},[178,166374,165167],{"class":319},[178,166376,158524],{"class":699},[178,166378,2885],{"class":195},[178,166380,2191],{"class":188},[178,166382,863],{"class":319},[19,166384,166385],{},"查找学生：",[154,166387,166389],{"className":690,"code":166388,"language":692,"meta":160,"style":160},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[70,166390,166391,166406,166410,166420,166434,166440,166444,166450],{"__ignoreMap":160},[178,166392,166393,166395,166397,166399,166401,166404],{"class":180,"line":181},[178,166394,112943],{"class":319},[178,166396,330],{"class":699},[178,166398,62326],{"class":195},[178,166400,944],{"class":319},[178,166402,166403],{"class":188},"\"请输入学生姓名:\"",[178,166405,863],{"class":319},[178,166407,166408],{"class":180,"line":263},[178,166409,722],{"emptyLinePlaceholder":721},[178,166411,166412,166414,166416,166418],{"class":180,"line":274},[178,166413,1474],{"class":699},[178,166415,153502],{"class":319},[178,166417,994],{"class":699},[178,166419,153507],{"class":319},[178,166421,166422,166424,166426,166428,166430,166432],{"class":180,"line":354},[178,166423,922],{"class":699},[178,166425,153514],{"class":319},[178,166427,333],{"class":188},[178,166429,6214],{"class":319},[178,166431,4725],{"class":699},[178,166433,161797],{"class":319},[178,166435,166436,166438],{"class":180,"line":364},[178,166437,34183],{"class":195},[178,166439,151407],{"class":319},[178,166441,166442],{"class":180,"line":740},[178,166443,33362],{"class":699},[178,166445,166446,166448],{"class":180,"line":746},[178,166447,3496],{"class":699},[178,166449,847],{"class":319},[178,166451,166452,166454,166456,166459],{"class":180,"line":752},[178,166453,1022],{"class":195},[178,166455,944],{"class":319},[178,166457,166458],{"class":188},"\"没有找到\"",[178,166460,863],{"class":319},[14,166462,166464],{"id":166463},"_613-容器通用操作","6.13 容器通用操作",[19,166466,166467],{},"长度：",[154,166469,166471],{"className":690,"code":166470,"language":692,"meta":160,"style":160},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[70,166472,166473,166492,166502],{"__ignoreMap":160},[178,166474,166475,166477,166480,166482,166484,166486,166488,166490],{"class":180,"line":181},[178,166476,9127],{"class":195},[178,166478,166479],{"class":319},"([",[178,166481,1665],{"class":195},[178,166483,14196],{"class":319},[178,166485,1669],{"class":195},[178,166487,14196],{"class":319},[178,166489,2021],{"class":195},[178,166491,6428],{"class":319},[178,166493,166494,166496,166498,166500],{"class":180,"line":263},[178,166495,9127],{"class":195},[178,166497,944],{"class":319},[178,166499,157245],{"class":188},[178,166501,863],{"class":319},[178,166503,166504,166506,166509,166511,166513,166515],{"class":180,"line":274},[178,166505,9127],{"class":195},[178,166507,166508],{"class":319},"({",[178,166510,333],{"class":188},[178,166512,53167],{"class":319},[178,166514,151253],{"class":188},[178,166516,166517],{"class":319},"})\n",[19,166519,166520],{},"最大最小：",[154,166522,166524],{"className":690,"code":166523,"language":692,"meta":160,"style":160},"max([1, 2, 3])\nmin([1, 2, 3])\n",[70,166525,166526,166544],{"__ignoreMap":160},[178,166527,166528,166530,166532,166534,166536,166538,166540,166542],{"class":180,"line":181},[178,166529,7784],{"class":195},[178,166531,166479],{"class":319},[178,166533,1665],{"class":195},[178,166535,14196],{"class":319},[178,166537,1669],{"class":195},[178,166539,14196],{"class":319},[178,166541,2021],{"class":195},[178,166543,6428],{"class":319},[178,166545,166546,166549,166551,166553,166555,166557,166559,166561],{"class":180,"line":263},[178,166547,166548],{"class":195},"min",[178,166550,166479],{"class":319},[178,166552,1665],{"class":195},[178,166554,14196],{"class":319},[178,166556,1669],{"class":195},[178,166558,14196],{"class":319},[178,166560,2021],{"class":195},[178,166562,6428],{"class":319},[19,166564,166565],{},"求和：",[154,166567,166569],{"className":690,"code":166568,"language":692,"meta":160,"style":160},"sum([1, 2, 3])\n",[70,166570,166571],{"__ignoreMap":160},[178,166572,166573,166576,166578,166580,166582,166584,166586,166588],{"class":180,"line":181},[178,166574,166575],{"class":195},"sum",[178,166577,166479],{"class":319},[178,166579,1665],{"class":195},[178,166581,14196],{"class":319},[178,166583,1669],{"class":195},[178,166585,14196],{"class":319},[178,166587,2021],{"class":195},[178,166589,6428],{"class":319},[19,166591,164836],{},[154,166593,166595],{"className":690,"code":166594,"language":692,"meta":160,"style":160},"sorted([3, 1, 2])\n",[70,166596,166597],{"__ignoreMap":160},[178,166598,166599,166602,166604,166606,166608,166610,166612,166614],{"class":180,"line":181},[178,166600,166601],{"class":195},"sorted",[178,166603,166479],{"class":319},[178,166605,2021],{"class":195},[178,166607,14196],{"class":319},[178,166609,1665],{"class":195},[178,166611,14196],{"class":319},[178,166613,1669],{"class":195},[178,166615,6428],{"class":319},[19,166617,166618],{},"类型转换：",[154,166620,166622],{"className":690,"code":166621,"language":692,"meta":160,"style":160},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[70,166623,166624,166634,166652],{"__ignoreMap":160},[178,166625,166626,166628,166630,166632],{"class":180,"line":181},[178,166627,155435],{"class":195},[178,166629,944],{"class":319},[178,166631,157245],{"class":188},[178,166633,863],{"class":319},[178,166635,166636,166638,166640,166642,166644,166646,166648,166650],{"class":180,"line":263},[178,166637,156630],{"class":195},[178,166639,166479],{"class":319},[178,166641,1665],{"class":195},[178,166643,14196],{"class":319},[178,166645,1669],{"class":195},[178,166647,14196],{"class":319},[178,166649,2021],{"class":195},[178,166651,6428],{"class":319},[178,166653,166654,166656,166658,166660,166662,166664,166666,166668,166670,166672],{"class":180,"line":274},[178,166655,156655],{"class":195},[178,166657,166479],{"class":319},[178,166659,1665],{"class":195},[178,166661,14196],{"class":319},[178,166663,1665],{"class":195},[178,166665,14196],{"class":319},[178,166667,1669],{"class":195},[178,166669,14196],{"class":319},[178,166671,2021],{"class":195},[178,166673,6428],{"class":319},[19,166675,166676],{},"成员判断：",[154,166678,166680],{"className":690,"code":166679,"language":692,"meta":160,"style":160},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[70,166681,166682,166699,166723],{"__ignoreMap":160},[178,166683,166684,166686,166688,166691,166694,166697],{"class":180,"line":181},[178,166685,1504],{"class":195},[178,166687,944],{"class":319},[178,166689,166690],{"class":188},"\"a\"",[178,166692,166693],{"class":699}," in",[178,166695,166696],{"class":188}," \"abc\"",[178,166698,863],{"class":319},[178,166700,166701,166703,166705,166707,166709,166711,166713,166715,166717,166719,166721],{"class":180,"line":263},[178,166702,1504],{"class":195},[178,166704,944],{"class":319},[178,166706,1665],{"class":195},[178,166708,166693],{"class":699},[178,166710,53953],{"class":319},[178,166712,1665],{"class":195},[178,166714,14196],{"class":319},[178,166716,1669],{"class":195},[178,166718,14196],{"class":319},[178,166720,2021],{"class":195},[178,166722,6428],{"class":319},[178,166724,166725,166727,166729,166731,166733,166735,166737,166739,166741],{"class":180,"line":274},[178,166726,1504],{"class":195},[178,166728,944],{"class":319},[178,166730,333],{"class":188},[178,166732,166693],{"class":699},[178,166734,6219],{"class":319},[178,166736,333],{"class":188},[178,166738,53167],{"class":319},[178,166740,151253],{"class":188},[178,166742,166517],{"class":319},[14,166744,166746],{"id":166745},"_614-推导式","6.14 推导式",[19,166748,166749],{},"推导式用于快速生成容器。",[19,166751,166752],{},"列表推导式：",[154,166754,166756],{"className":690,"code":166755,"language":692,"meta":160,"style":160},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[70,166757,166758,166785],{"__ignoreMap":160},[178,166759,166760,166762,166764,166767,166769,166771,166773,166775,166777,166779,166781,166783],{"class":180,"line":181},[178,166761,165465],{"class":319},[178,166763,330],{"class":699},[178,166765,166766],{"class":319}," [i ",[178,166768,1474],{"class":699},[178,166770,11199],{"class":319},[178,166772,994],{"class":699},[178,166774,997],{"class":195},[178,166776,944],{"class":319},[178,166778,1665],{"class":195},[178,166780,14196],{"class":319},[178,166782,2284],{"class":195},[178,166784,99013],{"class":319},[178,166786,166787,166789],{"class":180,"line":263},[178,166788,1504],{"class":195},[178,166790,165681],{"class":319},[19,166792,166793],{},"带条件：",[154,166795,166797],{"className":690,"code":166796,"language":692,"meta":160,"style":160},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[70,166798,166799,166840],{"__ignoreMap":160},[178,166800,166801,166804,166806,166808,166810,166812,166814,166816,166818,166820,166822,166824,166826,166828,166830,166832,166834,166836,166838],{"class":180,"line":181},[178,166802,166803],{"class":319},"even_nums ",[178,166805,330],{"class":699},[178,166807,166766],{"class":319},[178,166809,1474],{"class":699},[178,166811,11199],{"class":319},[178,166813,994],{"class":699},[178,166815,997],{"class":195},[178,166817,944],{"class":319},[178,166819,1665],{"class":195},[178,166821,14196],{"class":319},[178,166823,2277],{"class":195},[178,166825,15474],{"class":319},[178,166827,1085],{"class":699},[178,166829,11199],{"class":319},[178,166831,2268],{"class":699},[178,166833,16514],{"class":195},[178,166835,1091],{"class":699},[178,166837,930],{"class":195},[178,166839,34978],{"class":319},[178,166841,166842,166844],{"class":180,"line":263},[178,166843,1504],{"class":195},[178,166845,166846],{"class":319},"(even_nums)\n",[19,166848,166849],{},"字典推导式：",[154,166851,166853],{"className":690,"code":166852,"language":692,"meta":160,"style":160},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[70,166854,166855,166889],{"__ignoreMap":160},[178,166856,166857,166860,166862,166865,166867,166869,166872,166874,166876,166878,166880,166882,166884,166886],{"class":180,"line":181},[178,166858,166859],{"class":319},"squares ",[178,166861,330],{"class":699},[178,166863,166864],{"class":319}," {i: i ",[178,166866,12422],{"class":699},[178,166868,16514],{"class":195},[178,166870,166871],{"class":699}," for",[178,166873,11199],{"class":319},[178,166875,994],{"class":699},[178,166877,997],{"class":195},[178,166879,944],{"class":319},[178,166881,1665],{"class":195},[178,166883,14196],{"class":319},[178,166885,2284],{"class":195},[178,166887,166888],{"class":319},")}\n",[178,166890,166891,166893],{"class":180,"line":263},[178,166892,1504],{"class":195},[178,166894,166895],{"class":319},"(squares)\n",[19,166897,166898],{},"集合推导式：",[154,166900,166902],{"className":690,"code":166901,"language":692,"meta":160,"style":160},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[70,166903,166904,166925],{"__ignoreMap":160},[178,166905,166906,166909,166911,166914,166916,166918,166920,166923],{"class":180,"line":181},[178,166907,166908],{"class":319},"chars ",[178,166910,330],{"class":699},[178,166912,166913],{"class":319}," {ch ",[178,166915,1474],{"class":699},[178,166917,161057],{"class":319},[178,166919,994],{"class":699},[178,166921,166922],{"class":188}," \"hello\"",[178,166924,3371],{"class":319},[178,166926,166927,166929],{"class":180,"line":263},[178,166928,1504],{"class":195},[178,166930,166931],{"class":319},"(chars)\n",[19,166933,166934],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,166936,166938],{"id":166937},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[154,166940,166942],{"className":690,"code":166941,"language":692,"meta":160,"style":160},"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",[70,166943,166944,166952,166972,166992,167012,167032,167036,167040,167048,167062,167071,167075,167085,167097,167101,167121,167130,167134,167150,167155,167159,167173,167177,167199,167235],{"__ignoreMap":160},[178,166945,166946,166948,166950],{"class":180,"line":181},[178,166947,161081],{"class":319},[178,166949,330],{"class":699},[178,166951,57168],{"class":319},[178,166953,166954,166956,166958,166960,166962,166964,166966,166968,166970],{"class":180,"line":263},[178,166955,149750],{"class":319},[178,166957,333],{"class":188},[178,166959,53167],{"class":319},[178,166961,151253],{"class":188},[178,166963,14196],{"class":319},[178,166965,152837],{"class":188},[178,166967,53167],{"class":319},[178,166969,2928],{"class":195},[178,166971,6701],{"class":319},[178,166973,166974,166976,166978,166980,166982,166984,166986,166988,166990],{"class":180,"line":274},[178,166975,149750],{"class":319},[178,166977,333],{"class":188},[178,166979,53167],{"class":319},[178,166981,152301],{"class":188},[178,166983,14196],{"class":319},[178,166985,152837],{"class":188},[178,166987,53167],{"class":319},[178,166989,2751],{"class":195},[178,166991,6701],{"class":319},[178,166993,166994,166996,166998,167000,167002,167004,167006,167008,167010],{"class":180,"line":354},[178,166995,149750],{"class":319},[178,166997,333],{"class":188},[178,166999,53167],{"class":319},[178,167001,161096],{"class":188},[178,167003,14196],{"class":319},[178,167005,152837],{"class":188},[178,167007,53167],{"class":319},[178,167009,2346],{"class":195},[178,167011,6701],{"class":319},[178,167013,167014,167016,167018,167020,167022,167024,167026,167028,167030],{"class":180,"line":364},[178,167015,149750],{"class":319},[178,167017,333],{"class":188},[178,167019,53167],{"class":319},[178,167021,164675],{"class":188},[178,167023,14196],{"class":319},[178,167025,152837],{"class":188},[178,167027,53167],{"class":319},[178,167029,2822],{"class":195},[178,167031,6701],{"class":319},[178,167033,167034],{"class":180,"line":740},[178,167035,34978],{"class":319},[178,167037,167038],{"class":180,"line":746},[178,167039,722],{"emptyLinePlaceholder":721},[178,167041,167042,167044,167046],{"class":180,"line":752},[178,167043,158625],{"class":319},[178,167045,330],{"class":699},[178,167047,49065],{"class":195},[178,167049,167050,167053,167055,167058,167060],{"class":180,"line":757},[178,167051,167052],{"class":319},"max_student ",[178,167054,330],{"class":699},[178,167056,167057],{"class":319}," students[",[178,167059,2133],{"class":195},[178,167061,34978],{"class":319},[178,167063,167064,167067,167069],{"class":180,"line":763},[178,167065,167066],{"class":319},"passed ",[178,167068,330],{"class":699},[178,167070,53566],{"class":319},[178,167072,167073],{"class":180,"line":769},[178,167074,722],{"emptyLinePlaceholder":721},[178,167076,167077,167079,167081,167083],{"class":180,"line":774},[178,167078,1474],{"class":699},[178,167080,153502],{"class":319},[178,167082,994],{"class":699},[178,167084,153507],{"class":319},[178,167086,167087,167089,167091,167093,167095],{"class":180,"line":780},[178,167088,160672],{"class":319},[178,167090,11238],{"class":699},[178,167092,153514],{"class":319},[178,167094,152837],{"class":188},[178,167096,34978],{"class":319},[178,167098,167099],{"class":180,"line":786},[178,167100,722],{"emptyLinePlaceholder":721},[178,167102,167103,167105,167107,167109,167111,167113,167116,167118],{"class":180,"line":792},[178,167104,922],{"class":699},[178,167106,153514],{"class":319},[178,167108,152837],{"class":188},[178,167110,6214],{"class":319},[178,167112,2899],{"class":699},[178,167114,167115],{"class":319}," max_student[",[178,167117,152837],{"class":188},[178,167119,167120],{"class":319},"]:\n",[178,167122,167123,167126,167128],{"class":180,"line":798},[178,167124,167125],{"class":319},"        max_student ",[178,167127,330],{"class":699},[178,167129,153530],{"class":319},[178,167131,167132],{"class":180,"line":804},[178,167133,722],{"emptyLinePlaceholder":721},[178,167135,167136,167138,167140,167142,167144,167146,167148],{"class":180,"line":810},[178,167137,922],{"class":699},[178,167139,153514],{"class":319},[178,167141,152837],{"class":188},[178,167143,6214],{"class":319},[178,167145,3505],{"class":699},[178,167147,159202],{"class":195},[178,167149,847],{"class":319},[178,167151,167152],{"class":180,"line":816},[178,167153,167154],{"class":319},"        passed.append(student)\n",[178,167156,167157],{"class":180,"line":822},[178,167158,722],{"emptyLinePlaceholder":721},[178,167160,167161,167163,167165,167167,167169,167171],{"class":180,"line":827},[178,167162,165139],{"class":319},[178,167164,330],{"class":699},[178,167166,165144],{"class":319},[178,167168,2524],{"class":699},[178,167170,9100],{"class":195},[178,167172,166360],{"class":319},[178,167174,167175],{"class":180,"line":832},[178,167176,722],{"emptyLinePlaceholder":721},[178,167178,167179,167181,167183,167185,167187,167189,167191,167193,167195,167197],{"class":180,"line":850},[178,167180,1504],{"class":195},[178,167182,944],{"class":319},[178,167184,2002],{"class":699},[178,167186,165162],{"class":188},[178,167188,2836],{"class":195},[178,167190,165167],{"class":319},[178,167192,158524],{"class":699},[178,167194,2885],{"class":195},[178,167196,2191],{"class":188},[178,167198,863],{"class":319},[178,167200,167201,167203,167205,167207,167210,167212,167215,167217,167219,167221,167223,167225,167227,167229,167231,167233],{"class":180,"line":866},[178,167202,1504],{"class":195},[178,167204,944],{"class":319},[178,167206,2002],{"class":699},[178,167208,167209],{"class":188},"\"最高分学生:",[178,167211,2836],{"class":195},[178,167213,167214],{"class":319},"max_student[",[178,167216,154247],{"class":188},[178,167218,2879],{"class":319},[178,167220,2885],{"class":195},[178,167222,6219],{"class":195},[178,167224,167214],{"class":319},[178,167226,154285],{"class":188},[178,167228,2879],{"class":319},[178,167230,2885],{"class":195},[178,167232,2191],{"class":188},[178,167234,863],{"class":319},[178,167236,167237,167239,167241,167243,167246,167249,167252,167254,167256],{"class":180,"line":877},[178,167238,1504],{"class":195},[178,167240,944],{"class":319},[178,167242,2002],{"class":699},[178,167244,167245],{"class":188},"\"及格人数:",[178,167247,167248],{"class":195},"{len",[178,167250,167251],{"class":319},"(passed)",[178,167253,2885],{"class":195},[178,167255,2191],{"class":188},[178,167257,863],{"class":319},[14,167259,167261],{"id":167260},"_616-易错点","6.16 易错点",[26,167263,167264,167267,167270,167273,167279,167288],{},[29,167265,167266],{},"列表可变，元组和字符串不可变。",[29,167268,167269],{},"切片结束位置不包含。",[29,167271,167272],{},"字典通过 key 取值，不是通过索引。",[29,167274,167275,167276,297],{},"空集合要用 ",[70,167277,167278],{},"set()",[29,167280,105731,167281,167284,167285,297],{},[70,167282,167283],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[70,167286,167287],{},"get()",[29,167289,167290],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167292,167294],{"id":167293},"_617-本章练习","6.17 本章练习",[26,167296,167297,167300,167303,167306,167309],{},[29,167298,167299],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[29,167301,167302],{},"输入一句话，统计每个字符出现次数。",[29,167304,167305],{},"使用集合去除列表中的重复元素。",[29,167307,167308],{},"使用字典保存一个学生的信息，并实现修改成绩。",[29,167310,167311],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[1853,167313,167314],{},"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":160,"searchDepth":263,"depth":263,"links":167316},[167317,167318,167319,167320,167321,167322,167323,167324,167325,167326,167327,167328,167329,167330,167331,167332,167333],{"id":164297,"depth":263,"text":164298},{"id":164414,"depth":263,"text":164415},{"id":164504,"depth":263,"text":164505},{"id":164628,"depth":263,"text":164629},{"id":164991,"depth":263,"text":164992},{"id":165178,"depth":263,"text":165179},{"id":165297,"depth":263,"text":165298},{"id":165439,"depth":263,"text":165440},{"id":165626,"depth":263,"text":165627},{"id":165870,"depth":263,"text":165871},{"id":166080,"depth":263,"text":166081},{"id":166165,"depth":263,"text":166166},{"id":166463,"depth":263,"text":166464},{"id":166745,"depth":263,"text":166746},{"id":166937,"depth":263,"text":166938},{"id":167260,"depth":263,"text":167261},{"id":167293,"depth":263,"text":167294},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164289,"description":25135},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167340,"title":167341,"body":167342,"description":25135,"extension":1880,"meta":169514,"navigation":721,"path":169515,"seo":169516,"stem":169517,"__hash__":169518},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167343,"toc":169489},[167344,167347,167351,167354,167434,167437,167458,167461,167465,167468,167530,167533,167550,167554,167557,167602,167604,167612,167616,167619,167701,167704,167707,167732,167735,167758,167762,167765,167767,167829,167832,167834,167885,167889,167893,167899,168004,168008,168014,168085,168089,168092,168160,168163,168243,168247,168253,168289,168292,168295,168405,168411,168415,168418,168490,168493,168497,168501,168506,168568,168572,168577,168645,168649,168654,168770,168774,168777,168857,168860,168864,168867,168971,168973,168988,168991,168995,169133,169141,169145,169147,169158,169160,169418,169422,169454,169458,169486],[10,167345,167341],{"id":167346},"_7-函数进阶",[14,167348,167350],{"id":167349},"_71-多返回值","7.1 多返回值",[19,167352,167353],{},"Python 函数可以返回多个值，本质上返回的是元组。",[154,167355,167357],{"className":690,"code":167356,"language":692,"meta":160,"style":160},"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",[70,167358,167359,167368,167376,167384,167393,167400,167404,167408,167417,167423],{"__ignoreMap":160},[178,167360,167361,167363,167366],{"class":180,"line":181},[178,167362,835],{"class":699},[178,167364,167365],{"class":184}," get_info",[178,167367,33687],{"class":319},[178,167369,167370,167372,167374],{"class":180,"line":263},[178,167371,153735],{"class":319},[178,167373,330],{"class":699},[178,167375,150718],{"class":188},[178,167377,167378,167380,167382],{"class":180,"line":274},[178,167379,153751],{"class":319},[178,167381,330],{"class":699},[178,167383,147916],{"class":195},[178,167385,167386,167388,167390],{"class":180,"line":354},[178,167387,153766],{"class":319},[178,167389,330],{"class":699},[178,167391,167392],{"class":195}," 95\n",[178,167394,167395,167397],{"class":180,"line":364},[178,167396,5862],{"class":699},[178,167398,167399],{"class":319}," name, age, score\n",[178,167401,167402],{"class":180,"line":740},[178,167403,722],{"emptyLinePlaceholder":721},[178,167405,167406],{"class":180,"line":746},[178,167407,722],{"emptyLinePlaceholder":721},[178,167409,167410,167412,167414],{"class":180,"line":752},[178,167411,162671],{"class":319},[178,167413,330],{"class":699},[178,167415,167416],{"class":319}," get_info()\n",[178,167418,167419,167421],{"class":180,"line":757},[178,167420,1504],{"class":195},[178,167422,78305],{"class":319},[178,167424,167425,167427,167429,167431],{"class":180,"line":763},[178,167426,1504],{"class":195},[178,167428,944],{"class":319},[178,167430,550],{"class":195},[178,167432,167433],{"class":319},"(result))\n",[19,167435,167436],{},"可以直接解包：",[154,167438,167440],{"className":690,"code":167439,"language":692,"meta":160,"style":160},"name, age, score = get_info()\nprint(name, age, score)\n",[70,167441,167442,167451],{"__ignoreMap":160},[178,167443,167444,167447,167449],{"class":180,"line":181},[178,167445,167446],{"class":319},"name, age, score ",[178,167448,330],{"class":699},[178,167450,167416],{"class":319},[178,167452,167453,167455],{"class":180,"line":263},[178,167454,1504],{"class":195},[178,167456,167457],{"class":319},"(name, age, score)\n",[19,167459,167460],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167462,167464],{"id":167463},"_72-位置参数","7.2 位置参数",[19,167466,167467],{},"位置参数按顺序传递。",[154,167469,167471],{"className":690,"code":167470,"language":692,"meta":160,"style":160},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[70,167472,167473,167481,167509,167513,167517],{"__ignoreMap":160},[178,167474,167475,167477,167479],{"class":180,"line":181},[178,167476,835],{"class":699},[178,167478,150737],{"class":184},[178,167480,150740],{"class":319},[178,167482,167483,167485,167487,167489,167491,167493,167495,167497,167499,167501,167503,167505,167507],{"class":180,"line":263},[178,167484,1022],{"class":195},[178,167486,944],{"class":319},[178,167488,2002],{"class":699},[178,167490,150751],{"class":188},[178,167492,2836],{"class":195},[178,167494,81529],{"class":319},[178,167496,2885],{"class":195},[178,167498,150760],{"class":188},[178,167500,2836],{"class":195},[178,167502,71941],{"class":319},[178,167504,2885],{"class":195},[178,167506,150769],{"class":188},[178,167508,863],{"class":319},[178,167510,167511],{"class":180,"line":274},[178,167512,722],{"emptyLinePlaceholder":721},[178,167514,167515],{"class":180,"line":354},[178,167516,722],{"emptyLinePlaceholder":721},[178,167518,167519,167522,167524,167526,167528],{"class":180,"line":364},[178,167520,167521],{"class":319},"introduce(",[178,167523,151253],{"class":188},[178,167525,14196],{"class":319},[178,167527,2590],{"class":195},[178,167529,863],{"class":319},[19,167531,167532],{},"顺序错了就会得到错误含义：",[154,167534,167536],{"className":690,"code":167535,"language":692,"meta":160,"style":160},"introduce(18, \"小明\")\n",[70,167537,167538],{"__ignoreMap":160},[178,167539,167540,167542,167544,167546,167548],{"class":180,"line":181},[178,167541,167521],{"class":319},[178,167543,2590],{"class":195},[178,167545,14196],{"class":319},[178,167547,151253],{"class":188},[178,167549,863],{"class":319},[14,167551,167553],{"id":167552},"_73-关键字参数","7.3 关键字参数",[19,167555,167556],{},"关键字参数按参数名传递。",[154,167558,167560],{"className":690,"code":167559,"language":692,"meta":160,"style":160},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[70,167561,167562,167582],{"__ignoreMap":160},[178,167563,167564,167566,167568,167570,167572,167574,167576,167578,167580],{"class":180,"line":181},[178,167565,167521],{"class":319},[178,167567,81529],{"class":6985},[178,167569,330],{"class":699},[178,167571,151253],{"class":188},[178,167573,14196],{"class":319},[178,167575,71941],{"class":6985},[178,167577,330],{"class":699},[178,167579,2590],{"class":195},[178,167581,863],{"class":319},[178,167583,167584,167586,167588,167590,167592,167594,167596,167598,167600],{"class":180,"line":263},[178,167585,167521],{"class":319},[178,167587,71941],{"class":6985},[178,167589,330],{"class":699},[178,167591,2590],{"class":195},[178,167593,14196],{"class":319},[178,167595,81529],{"class":6985},[178,167597,330],{"class":699},[178,167599,151253],{"class":188},[178,167601,863],{"class":319},[19,167603,119299],{},[26,167605,167606,167609],{},[29,167607,167608],{},"顺序不容易错。",[29,167610,167611],{},"调用时可读性更强。",[14,167613,167615],{"id":167614},"_74-默认参数","7.4 默认参数",[19,167617,167618],{},"默认参数给参数设置默认值。",[154,167620,167622],{"className":690,"code":167621,"language":692,"meta":160,"style":160},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[70,167623,167624,167640,167670,167674,167678,167688],{"__ignoreMap":160},[178,167625,167626,167628,167630,167633,167635,167638],{"class":180,"line":181},[178,167627,835],{"class":699},[178,167629,123458],{"class":184},[178,167631,167632],{"class":319},"(host, port",[178,167634,330],{"class":699},[178,167636,167637],{"class":195},"3306",[178,167639,1005],{"class":319},[178,167641,167642,167644,167646,167648,167651,167653,167655,167657,167659,167661,167664,167666,167668],{"class":180,"line":263},[178,167643,1022],{"class":195},[178,167645,944],{"class":319},[178,167647,2002],{"class":699},[178,167649,167650],{"class":188},"\"连接",[178,167652,2836],{"class":195},[178,167654,29144],{"class":319},[178,167656,2885],{"class":195},[178,167658,2799],{"class":188},[178,167660,2836],{"class":195},[178,167662,167663],{"class":319},"port",[178,167665,2885],{"class":195},[178,167667,2191],{"class":188},[178,167669,863],{"class":319},[178,167671,167672],{"class":180,"line":274},[178,167673,722],{"emptyLinePlaceholder":721},[178,167675,167676],{"class":180,"line":354},[178,167677,722],{"emptyLinePlaceholder":721},[178,167679,167680,167683,167686],{"class":180,"line":364},[178,167681,167682],{"class":319},"connect(",[178,167684,167685],{"class":188},"\"localhost\"",[178,167687,863],{"class":319},[178,167689,167690,167692,167694,167696,167699],{"class":180,"line":740},[178,167691,167682],{"class":319},[178,167693,167685],{"class":188},[178,167695,14196],{"class":319},[178,167697,167698],{"class":195},"6379",[178,167700,863],{"class":319},[19,167702,167703],{},"注意：默认参数必须放在非默认参数后面。",[19,167705,167706],{},"错误：",[154,167708,167710],{"className":690,"code":167709,"language":692,"meta":160,"style":160},"def connect(port=3306, host):\n    pass\n",[70,167711,167712,167728],{"__ignoreMap":160},[178,167713,167714,167716,167718,167721,167723,167725],{"class":180,"line":181},[178,167715,835],{"class":699},[178,167717,123458],{"class":184},[178,167719,167720],{"class":319},"(port",[178,167722,330],{"class":699},[178,167724,167637],{"class":195},[178,167726,167727],{"class":319},", host):\n",[178,167729,167730],{"class":180,"line":263},[178,167731,150902],{"class":699},[19,167733,167734],{},"正确：",[154,167736,167738],{"className":690,"code":167737,"language":692,"meta":160,"style":160},"def connect(host, port=3306):\n    pass\n",[70,167739,167740,167754],{"__ignoreMap":160},[178,167741,167742,167744,167746,167748,167750,167752],{"class":180,"line":181},[178,167743,835],{"class":699},[178,167745,123458],{"class":184},[178,167747,167632],{"class":319},[178,167749,330],{"class":699},[178,167751,167637],{"class":195},[178,167753,1005],{"class":319},[178,167755,167756],{"class":180,"line":263},[178,167757,150902],{"class":699},[14,167759,167761],{"id":167760},"_75-默认参数的坑","7.5 默认参数的坑",[19,167763,167764],{},"不要使用可变对象作为默认参数。",[19,167766,158988],{},[154,167768,167770],{"className":690,"code":167769,"language":692,"meta":160,"style":160},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[70,167771,167772,167787,167792,167799,167803,167807,167818],{"__ignoreMap":160},[178,167773,167774,167776,167779,167782,167784],{"class":180,"line":181},[178,167775,835],{"class":699},[178,167777,167778],{"class":184}," add_item",[178,167780,167781],{"class":319},"(item, items",[178,167783,330],{"class":699},[178,167785,167786],{"class":319},"[]):\n",[178,167788,167789],{"class":180,"line":263},[178,167790,167791],{"class":319},"    items.append(item)\n",[178,167793,167794,167796],{"class":180,"line":274},[178,167795,5862],{"class":699},[178,167797,167798],{"class":319}," items\n",[178,167800,167801],{"class":180,"line":354},[178,167802,722],{"emptyLinePlaceholder":721},[178,167804,167805],{"class":180,"line":364},[178,167806,722],{"emptyLinePlaceholder":721},[178,167808,167809,167811,167814,167816],{"class":180,"line":740},[178,167810,1504],{"class":195},[178,167812,167813],{"class":319},"(add_item(",[178,167815,166690],{"class":188},[178,167817,32239],{"class":319},[178,167819,167820,167822,167824,167827],{"class":180,"line":746},[178,167821,1504],{"class":195},[178,167823,167813],{"class":319},[178,167825,167826],{"class":188},"\"b\"",[178,167828,32239],{"class":319},[19,167830,167831],{},"第二次调用会复用第一次的列表。",[19,167833,157253],{},[154,167835,167837],{"className":690,"code":167836,"language":692,"meta":160,"style":160},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[70,167838,167839,167853,167866,167875,167879],{"__ignoreMap":160},[178,167840,167841,167843,167845,167847,167849,167851],{"class":180,"line":181},[178,167842,835],{"class":699},[178,167844,167778],{"class":184},[178,167846,167781],{"class":319},[178,167848,330],{"class":699},[178,167850,844],{"class":195},[178,167852,1005],{"class":319},[178,167854,167855,167857,167860,167862,167864],{"class":180,"line":263},[178,167856,922],{"class":699},[178,167858,167859],{"class":319}," items ",[178,167861,40659],{"class":699},[178,167863,40665],{"class":195},[178,167865,847],{"class":319},[178,167867,167868,167871,167873],{"class":180,"line":274},[178,167869,167870],{"class":319},"        items ",[178,167872,330],{"class":699},[178,167874,53566],{"class":319},[178,167876,167877],{"class":180,"line":354},[178,167878,167791],{"class":319},[178,167880,167881,167883],{"class":180,"line":364},[178,167882,5862],{"class":699},[178,167884,167798],{"class":319},[14,167886,167888],{"id":167887},"_76-不定长参数","7.6 不定长参数",[387,167890,167892],{"id":167891},"_761-args","7.6.1 *args",[19,167894,167895,167898],{},[70,167896,167897],{},"*args"," 接收任意数量的位置参数，得到元组。",[154,167900,167902],{"className":690,"code":167901,"language":692,"meta":160,"style":160},"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",[70,167903,167904,167917,167925,167936,167945,167951,167955,167959,167978],{"__ignoreMap":160},[178,167905,167906,167908,167910,167912,167914],{"class":180,"line":181},[178,167907,835],{"class":699},[178,167909,6978],{"class":184},[178,167911,944],{"class":319},[178,167913,2395],{"class":699},[178,167915,167916],{"class":319},"args):\n",[178,167918,167919,167921,167923],{"class":180,"line":263},[178,167920,160672],{"class":319},[178,167922,330],{"class":699},[178,167924,49065],{"class":195},[178,167926,167927,167929,167931,167933],{"class":180,"line":274},[178,167928,988],{"class":699},[178,167930,157545],{"class":319},[178,167932,994],{"class":699},[178,167934,167935],{"class":319}," args:\n",[178,167937,167938,167940,167942],{"class":180,"line":354},[178,167939,161347],{"class":319},[178,167941,11238],{"class":699},[178,167943,167944],{"class":319}," num\n",[178,167946,167947,167949],{"class":180,"line":364},[178,167948,5862],{"class":699},[178,167950,163652],{"class":319},[178,167952,167953],{"class":180,"line":740},[178,167954,722],{"emptyLinePlaceholder":721},[178,167956,167957],{"class":180,"line":746},[178,167958,722],{"emptyLinePlaceholder":721},[178,167960,167961,167963,167966,167968,167970,167972,167974,167976],{"class":180,"line":752},[178,167962,1504],{"class":195},[178,167964,167965],{"class":319},"(add(",[178,167967,1665],{"class":195},[178,167969,14196],{"class":319},[178,167971,1669],{"class":195},[178,167973,14196],{"class":319},[178,167975,2021],{"class":195},[178,167977,32239],{"class":319},[178,167979,167980,167982,167984,167986,167988,167990,167992,167994,167996,167998,168000,168002],{"class":180,"line":757},[178,167981,1504],{"class":195},[178,167983,167965],{"class":319},[178,167985,1665],{"class":195},[178,167987,14196],{"class":319},[178,167989,1669],{"class":195},[178,167991,14196],{"class":319},[178,167993,2021],{"class":195},[178,167995,14196],{"class":319},[178,167997,2233],{"class":195},[178,167999,14196],{"class":319},[178,168001,2259],{"class":195},[178,168003,32239],{"class":319},[387,168005,168007],{"id":168006},"_762-kwargs","7.6.2 **kwargs",[19,168009,168010,168013],{},[70,168011,168012],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[154,168015,168017],{"className":690,"code":168016,"language":692,"meta":160,"style":160},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[70,168018,168019,168032,168043,168049,168053,168057],{"__ignoreMap":160},[178,168020,168021,168023,168025,168027,168029],{"class":180,"line":181},[178,168022,835],{"class":699},[178,168024,163310],{"class":184},[178,168026,944],{"class":319},[178,168028,12422],{"class":699},[178,168030,168031],{"class":319},"kwargs):\n",[178,168033,168034,168036,168038,168040],{"class":180,"line":263},[178,168035,988],{"class":699},[178,168037,166150],{"class":319},[178,168039,994],{"class":699},[178,168041,168042],{"class":319}," kwargs.items():\n",[178,168044,168045,168047],{"class":180,"line":274},[178,168046,34183],{"class":195},[178,168048,166162],{"class":319},[178,168050,168051],{"class":180,"line":354},[178,168052,722],{"emptyLinePlaceholder":721},[178,168054,168055],{"class":180,"line":364},[178,168056,722],{"emptyLinePlaceholder":721},[178,168058,168059,168061,168063,168065,168067,168069,168071,168073,168075,168077,168079,168081,168083],{"class":180,"line":740},[178,168060,163375],{"class":319},[178,168062,81529],{"class":6985},[178,168064,330],{"class":699},[178,168066,151253],{"class":188},[178,168068,14196],{"class":319},[178,168070,71941],{"class":6985},[178,168072,330],{"class":699},[178,168074,2590],{"class":195},[178,168076,14196],{"class":319},[178,168078,71992],{"class":6985},[178,168080,330],{"class":699},[178,168082,70989],{"class":188},[178,168084,863],{"class":319},[14,168086,168088],{"id":168087},"_77-参数解包","7.7 参数解包",[19,168090,168091],{},"列表或元组解包为位置参数：",[154,168093,168095],{"className":690,"code":168094,"language":692,"meta":160,"style":160},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[70,168096,168097,168106,168121,168125,168129,168149],{"__ignoreMap":160},[178,168098,168099,168101,168103],{"class":180,"line":181},[178,168100,835],{"class":699},[178,168102,6978],{"class":184},[178,168104,168105],{"class":319},"(a, b, c):\n",[178,168107,168108,168110,168112,168114,168116,168118],{"class":180,"line":263},[178,168109,5862],{"class":699},[178,168111,12630],{"class":319},[178,168113,2421],{"class":699},[178,168115,12643],{"class":319},[178,168117,2421],{"class":699},[178,168119,168120],{"class":319}," c\n",[178,168122,168123],{"class":180,"line":274},[178,168124,722],{"emptyLinePlaceholder":721},[178,168126,168127],{"class":180,"line":354},[178,168128,722],{"emptyLinePlaceholder":721},[178,168130,168131,168133,168135,168137,168139,168141,168143,168145,168147],{"class":180,"line":364},[178,168132,165465],{"class":319},[178,168134,330],{"class":699},[178,168136,53953],{"class":319},[178,168138,1665],{"class":195},[178,168140,14196],{"class":319},[178,168142,1669],{"class":195},[178,168144,14196],{"class":319},[178,168146,2021],{"class":195},[178,168148,34978],{"class":319},[178,168150,168151,168153,168155,168157],{"class":180,"line":740},[178,168152,1504],{"class":195},[178,168154,167965],{"class":319},[178,168156,2395],{"class":699},[178,168158,168159],{"class":319},"nums))\n",[19,168161,168162],{},"字典解包为关键字参数：",[154,168164,168166],{"className":690,"code":168165,"language":692,"meta":160,"style":160},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[70,168167,168168,168176,168202,168206,168210,168234],{"__ignoreMap":160},[178,168169,168170,168172,168174],{"class":180,"line":181},[178,168171,835],{"class":699},[178,168173,150737],{"class":184},[178,168175,150740],{"class":319},[178,168177,168178,168180,168182,168184,168186,168188,168190,168192,168194,168196,168198,168200],{"class":180,"line":263},[178,168179,1022],{"class":195},[178,168181,944],{"class":319},[178,168183,2002],{"class":699},[178,168185,2191],{"class":188},[178,168187,2836],{"class":195},[178,168189,81529],{"class":319},[178,168191,2885],{"class":195},[178,168193,6219],{"class":195},[178,168195,71941],{"class":319},[178,168197,2885],{"class":195},[178,168199,2191],{"class":188},[178,168201,863],{"class":319},[178,168203,168204],{"class":180,"line":274},[178,168205,722],{"emptyLinePlaceholder":721},[178,168207,168208],{"class":180,"line":354},[178,168209,722],{"emptyLinePlaceholder":721},[178,168211,168212,168214,168216,168218,168220,168222,168224,168226,168228,168230,168232],{"class":180,"line":364},[178,168213,117679],{"class":319},[178,168215,330],{"class":699},[178,168217,6219],{"class":319},[178,168219,333],{"class":188},[178,168221,53167],{"class":319},[178,168223,151253],{"class":188},[178,168225,14196],{"class":319},[178,168227,70844],{"class":188},[178,168229,53167],{"class":319},[178,168231,2590],{"class":195},[178,168233,3371],{"class":319},[178,168235,168236,168238,168240],{"class":180,"line":740},[178,168237,167521],{"class":319},[178,168239,12422],{"class":699},[178,168241,168242],{"class":319},"info)\n",[14,168244,168246],{"id":168245},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,168248,168249,168252],{},[70,168250,168251],{},"lambda"," 用于定义简单匿名函数。",[154,168254,168256],{"className":690,"code":168255,"language":692,"meta":160,"style":160},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[70,168257,168258,168275],{"__ignoreMap":160},[178,168259,168260,168263,168265,168268,168271,168273],{"class":180,"line":181},[178,168261,168262],{"class":319},"add ",[178,168264,330],{"class":699},[178,168266,168267],{"class":699}," lambda",[178,168269,168270],{"class":319}," a, b: a ",[178,168272,2421],{"class":699},[178,168274,152469],{"class":319},[178,168276,168277,168279,168281,168283,168285,168287],{"class":180,"line":263},[178,168278,1504],{"class":195},[178,168280,167965],{"class":319},[178,168282,1665],{"class":195},[178,168284,14196],{"class":319},[178,168286,1669],{"class":195},[178,168288,32239],{"class":319},[19,168290,168291],{},"常和排序、过滤等函数一起使用。",[19,168293,168294],{},"按分数排序：",[154,168296,168298],{"className":690,"code":168297,"language":692,"meta":160,"style":160},"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",[70,168299,168300,168308,168328,168348,168368,168372,168376,168399],{"__ignoreMap":160},[178,168301,168302,168304,168306],{"class":180,"line":181},[178,168303,161081],{"class":319},[178,168305,330],{"class":699},[178,168307,57168],{"class":319},[178,168309,168310,168312,168314,168316,168318,168320,168322,168324,168326],{"class":180,"line":263},[178,168311,149750],{"class":319},[178,168313,333],{"class":188},[178,168315,53167],{"class":319},[178,168317,151253],{"class":188},[178,168319,14196],{"class":319},[178,168321,152837],{"class":188},[178,168323,53167],{"class":319},[178,168325,2928],{"class":195},[178,168327,6701],{"class":319},[178,168329,168330,168332,168334,168336,168338,168340,168342,168344,168346],{"class":180,"line":274},[178,168331,149750],{"class":319},[178,168333,333],{"class":188},[178,168335,53167],{"class":319},[178,168337,152301],{"class":188},[178,168339,14196],{"class":319},[178,168341,152837],{"class":188},[178,168343,53167],{"class":319},[178,168345,2751],{"class":195},[178,168347,6701],{"class":319},[178,168349,168350,168352,168354,168356,168358,168360,168362,168364,168366],{"class":180,"line":354},[178,168351,149750],{"class":319},[178,168353,333],{"class":188},[178,168355,53167],{"class":319},[178,168357,161096],{"class":188},[178,168359,14196],{"class":319},[178,168361,152837],{"class":188},[178,168363,53167],{"class":319},[178,168365,2346],{"class":195},[178,168367,6701],{"class":319},[178,168369,168370],{"class":180,"line":364},[178,168371,34978],{"class":319},[178,168373,168374],{"class":180,"line":740},[178,168375,722],{"emptyLinePlaceholder":721},[178,168377,168378,168381,168383,168385,168387,168389,168391,168393,168395,168397],{"class":180,"line":746},[178,168379,168380],{"class":319},"students.sort(",[178,168382,155311],{"class":6985},[178,168384,155314],{"class":699},[178,168386,155317],{"class":319},[178,168388,152837],{"class":188},[178,168390,113567],{"class":319},[178,168392,164893],{"class":6985},[178,168394,330],{"class":699},[178,168396,33212],{"class":195},[178,168398,863],{"class":319},[178,168400,168401,168403],{"class":180,"line":752},[178,168402,1504],{"class":195},[178,168404,166360],{"class":319},[19,168406,168407,168408,168410],{},"如果逻辑复杂，不要硬写 ",[70,168409,168251],{},"，定义普通函数更清晰。",[14,168412,168414],{"id":168413},"_79-函数作为参数","7.9 函数作为参数",[19,168416,168417],{},"函数可以作为参数传给另一个函数。",[154,168419,168421],{"className":690,"code":168420,"language":692,"meta":160,"style":160},"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",[70,168422,168423,168431,168441,168445,168449,168459,168466,168470,168474],{"__ignoreMap":160},[178,168424,168425,168427,168429],{"class":180,"line":181},[178,168426,835],{"class":699},[178,168428,6978],{"class":184},[178,168430,152458],{"class":319},[178,168432,168433,168435,168437,168439],{"class":180,"line":263},[178,168434,5862],{"class":699},[178,168436,12630],{"class":319},[178,168438,2421],{"class":699},[178,168440,152469],{"class":319},[178,168442,168443],{"class":180,"line":274},[178,168444,722],{"emptyLinePlaceholder":721},[178,168446,168447],{"class":180,"line":354},[178,168448,722],{"emptyLinePlaceholder":721},[178,168450,168451,168453,168456],{"class":180,"line":364},[178,168452,835],{"class":699},[178,168454,168455],{"class":184}," calculate",[178,168457,168458],{"class":319},"(a, b, func):\n",[178,168460,168461,168463],{"class":180,"line":740},[178,168462,5862],{"class":699},[178,168464,168465],{"class":319}," func(a, b)\n",[178,168467,168468],{"class":180,"line":746},[178,168469,722],{"emptyLinePlaceholder":721},[178,168471,168472],{"class":180,"line":752},[178,168473,722],{"emptyLinePlaceholder":721},[178,168475,168476,168478,168481,168483,168485,168487],{"class":180,"line":757},[178,168477,1504],{"class":195},[178,168479,168480],{"class":319},"(calculate(",[178,168482,2386],{"class":195},[178,168484,14196],{"class":319},[178,168486,2640],{"class":195},[178,168488,168489],{"class":319},", add))\n",[19,168491,168492],{},"这种思想在排序、回调、框架中经常出现。",[14,168494,168496],{"id":168495},"_710-mapfiltersorted","7.10 map、filter、sorted",[387,168498,168500],{"id":168499},"_7101-map","7.10.1 map",[19,168502,168503,168505],{},[70,168504,75764],{}," 对每个元素执行函数。",[154,168507,168509],{"className":690,"code":168508,"language":692,"meta":160,"style":160},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[70,168510,168511,168535,168558],{"__ignoreMap":160},[178,168512,168513,168515,168517,168519,168521,168523,168525,168527,168529,168531,168533],{"class":180,"line":181},[178,168514,165465],{"class":319},[178,168516,330],{"class":699},[178,168518,53953],{"class":319},[178,168520,1665],{"class":195},[178,168522,14196],{"class":319},[178,168524,1669],{"class":195},[178,168526,14196],{"class":319},[178,168528,2021],{"class":195},[178,168530,14196],{"class":319},[178,168532,2233],{"class":195},[178,168534,34978],{"class":319},[178,168536,168537,168539,168541,168544,168546,168548,168551,168553,168555],{"class":180,"line":263},[178,168538,162671],{"class":319},[178,168540,330],{"class":699},[178,168542,168543],{"class":195}," map",[178,168545,944],{"class":319},[178,168547,168251],{"class":699},[178,168549,168550],{"class":319}," x: x ",[178,168552,2395],{"class":699},[178,168554,16514],{"class":195},[178,168556,168557],{"class":319},", nums)\n",[178,168559,168560,168562,168564,168566],{"class":180,"line":274},[178,168561,1504],{"class":195},[178,168563,944],{"class":319},[178,168565,155435],{"class":195},[178,168567,167433],{"class":319},[387,168569,168571],{"id":168570},"_7102-filter","7.10.2 filter",[19,168573,168574,168576],{},[70,168575,81770],{}," 保留满足条件的元素。",[154,168578,168580],{"className":690,"code":168579,"language":692,"meta":160,"style":160},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[70,168581,168582,168610,168635],{"__ignoreMap":160},[178,168583,168584,168586,168588,168590,168592,168594,168596,168598,168600,168602,168604,168606,168608],{"class":180,"line":181},[178,168585,165465],{"class":319},[178,168587,330],{"class":699},[178,168589,53953],{"class":319},[178,168591,1665],{"class":195},[178,168593,14196],{"class":319},[178,168595,1669],{"class":195},[178,168597,14196],{"class":319},[178,168599,2021],{"class":195},[178,168601,14196],{"class":319},[178,168603,2233],{"class":195},[178,168605,14196],{"class":319},[178,168607,2259],{"class":195},[178,168609,34978],{"class":319},[178,168611,168612,168614,168616,168619,168621,168623,168625,168627,168629,168631,168633],{"class":180,"line":263},[178,168613,162671],{"class":319},[178,168615,330],{"class":699},[178,168617,168618],{"class":195}," filter",[178,168620,944],{"class":319},[178,168622,168251],{"class":699},[178,168624,168550],{"class":319},[178,168626,2268],{"class":699},[178,168628,16514],{"class":195},[178,168630,1091],{"class":699},[178,168632,930],{"class":195},[178,168634,168557],{"class":319},[178,168636,168637,168639,168641,168643],{"class":180,"line":274},[178,168638,1504],{"class":195},[178,168640,944],{"class":319},[178,168642,155435],{"class":195},[178,168644,167433],{"class":319},[387,168646,168648],{"id":168647},"_7103-sorted","7.10.3 sorted",[19,168650,168651,168653],{},[70,168652,166601],{}," 返回排序后的新列表。",[154,168655,168657],{"className":690,"code":168656,"language":692,"meta":160,"style":160},"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",[70,168658,168659,168667,168687,168707,168727,168731,168735,168764],{"__ignoreMap":160},[178,168660,168661,168663,168665],{"class":180,"line":181},[178,168662,161081],{"class":319},[178,168664,330],{"class":699},[178,168666,57168],{"class":319},[178,168668,168669,168671,168673,168675,168677,168679,168681,168683,168685],{"class":180,"line":263},[178,168670,149750],{"class":319},[178,168672,333],{"class":188},[178,168674,53167],{"class":319},[178,168676,151253],{"class":188},[178,168678,14196],{"class":319},[178,168680,152837],{"class":188},[178,168682,53167],{"class":319},[178,168684,2928],{"class":195},[178,168686,6701],{"class":319},[178,168688,168689,168691,168693,168695,168697,168699,168701,168703,168705],{"class":180,"line":274},[178,168690,149750],{"class":319},[178,168692,333],{"class":188},[178,168694,53167],{"class":319},[178,168696,152301],{"class":188},[178,168698,14196],{"class":319},[178,168700,152837],{"class":188},[178,168702,53167],{"class":319},[178,168704,2751],{"class":195},[178,168706,6701],{"class":319},[178,168708,168709,168711,168713,168715,168717,168719,168721,168723,168725],{"class":180,"line":354},[178,168710,149750],{"class":319},[178,168712,333],{"class":188},[178,168714,53167],{"class":319},[178,168716,161096],{"class":188},[178,168718,14196],{"class":319},[178,168720,152837],{"class":188},[178,168722,53167],{"class":319},[178,168724,2346],{"class":195},[178,168726,6701],{"class":319},[178,168728,168729],{"class":180,"line":364},[178,168730,34978],{"class":319},[178,168732,168733],{"class":180,"line":740},[178,168734,722],{"emptyLinePlaceholder":721},[178,168736,168737,168739,168741,168743,168746,168748,168750,168752,168754,168756,168758,168760,168762],{"class":180,"line":746},[178,168738,162671],{"class":319},[178,168740,330],{"class":699},[178,168742,164969],{"class":195},[178,168744,168745],{"class":319},"(students, ",[178,168747,155311],{"class":6985},[178,168749,155314],{"class":699},[178,168751,155317],{"class":319},[178,168753,152837],{"class":188},[178,168755,113567],{"class":319},[178,168757,164893],{"class":6985},[178,168759,330],{"class":699},[178,168761,33212],{"class":195},[178,168763,863],{"class":319},[178,168765,168766,168768],{"class":180,"line":752},[178,168767,1504],{"class":195},[178,168769,78305],{"class":319},[14,168771,168773],{"id":168772},"_711-闭包入门","7.11 闭包入门",[19,168775,168776],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[154,168778,168780],{"className":690,"code":168779,"language":692,"meta":160,"style":160},"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",[70,168781,168782,168792,168802,168813,168817,168824,168828,168832,168846],{"__ignoreMap":160},[178,168783,168784,168786,168789],{"class":180,"line":181},[178,168785,835],{"class":699},[178,168787,168788],{"class":184}," outer",[178,168790,168791],{"class":319},"(base):\n",[178,168793,168794,168796,168799],{"class":180,"line":263},[178,168795,32542],{"class":699},[178,168797,168798],{"class":184}," inner",[178,168800,168801],{"class":319},"(num):\n",[178,168803,168804,168806,168809,168811],{"class":180,"line":274},[178,168805,16511],{"class":699},[178,168807,168808],{"class":319}," base ",[178,168810,2421],{"class":699},[178,168812,167944],{"class":319},[178,168814,168815],{"class":180,"line":354},[178,168816,722],{"emptyLinePlaceholder":721},[178,168818,168819,168821],{"class":180,"line":364},[178,168820,5862],{"class":699},[178,168822,168823],{"class":319}," inner\n",[178,168825,168826],{"class":180,"line":740},[178,168827,722],{"emptyLinePlaceholder":721},[178,168829,168830],{"class":180,"line":746},[178,168831,722],{"emptyLinePlaceholder":721},[178,168833,168834,168837,168839,168842,168844],{"class":180,"line":752},[178,168835,168836],{"class":319},"add_10 ",[178,168838,330],{"class":699},[178,168840,168841],{"class":319}," outer(",[178,168843,2386],{"class":195},[178,168845,863],{"class":319},[178,168847,168848,168850,168853,168855],{"class":180,"line":757},[178,168849,1504],{"class":195},[178,168851,168852],{"class":319},"(add_10(",[178,168854,2259],{"class":195},[178,168856,32239],{"class":319},[19,168858,168859],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,168861,168863],{"id":168862},"_712-装饰器入门","7.12 装饰器入门",[19,168865,168866],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[154,168868,168870],{"className":690,"code":168869,"language":692,"meta":160,"style":160},"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",[70,168871,168872,168881,168890,168901,168906,168917,168921,168928,168932,168936,168941,168949,168959,168963,168967],{"__ignoreMap":160},[178,168873,168874,168876,168878],{"class":180,"line":181},[178,168875,835],{"class":699},[178,168877,88906],{"class":184},[178,168879,168880],{"class":319},"(func):\n",[178,168882,168883,168885,168888],{"class":180,"line":263},[178,168884,32542],{"class":699},[178,168886,168887],{"class":184}," wrapper",[178,168889,33687],{"class":319},[178,168891,168892,168894,168896,168899],{"class":180,"line":274},[178,168893,34183],{"class":195},[178,168895,944],{"class":319},[178,168897,168898],{"class":188},"\"函数开始执行\"",[178,168900,863],{"class":319},[178,168902,168903],{"class":180,"line":354},[178,168904,168905],{"class":319},"        func()\n",[178,168907,168908,168910,168912,168915],{"class":180,"line":364},[178,168909,34183],{"class":195},[178,168911,944],{"class":319},[178,168913,168914],{"class":188},"\"函数执行结束\"",[178,168916,863],{"class":319},[178,168918,168919],{"class":180,"line":740},[178,168920,722],{"emptyLinePlaceholder":721},[178,168922,168923,168925],{"class":180,"line":746},[178,168924,5862],{"class":699},[178,168926,168927],{"class":319}," wrapper\n",[178,168929,168930],{"class":180,"line":752},[178,168931,722],{"emptyLinePlaceholder":721},[178,168933,168934],{"class":180,"line":757},[178,168935,722],{"emptyLinePlaceholder":721},[178,168937,168938],{"class":180,"line":763},[178,168939,168940],{"class":184},"@log\n",[178,168942,168943,168945,168947],{"class":180,"line":769},[178,168944,835],{"class":699},[178,168946,162361],{"class":184},[178,168948,33687],{"class":319},[178,168950,168951,168953,168955,168957],{"class":180,"line":774},[178,168952,1022],{"class":195},[178,168954,944],{"class":319},[178,168956,7613],{"class":188},[178,168958,863],{"class":319},[178,168960,168961],{"class":180,"line":780},[178,168962,722],{"emptyLinePlaceholder":721},[178,168964,168965],{"class":180,"line":786},[178,168966,722],{"emptyLinePlaceholder":721},[178,168968,168969],{"class":180,"line":792},[178,168970,162396],{"class":319},[19,168972,159639],{},[154,168974,168976],{"className":690,"code":168975,"language":692,"meta":160,"style":160},"say_hello = log(say_hello)\n",[70,168977,168978],{"__ignoreMap":160},[178,168979,168980,168983,168985],{"class":180,"line":181},[178,168981,168982],{"class":319},"say_hello ",[178,168984,330],{"class":699},[178,168986,168987],{"class":319}," log(say_hello)\n",[19,168989,168990],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,168992,168994],{"id":168993},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[154,168996,168998],{"className":690,"code":168997,"language":692,"meta":160,"style":160},"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",[70,168999,169000,169008,169025,169035,169054,169064,169071,169075,169081,169085,169089,169093,169101,169111,169115,169119],{"__ignoreMap":160},[178,169001,169002,169004,169006],{"class":180,"line":181},[178,169003,835],{"class":699},[178,169005,88906],{"class":184},[178,169007,168880],{"class":319},[178,169009,169010,169012,169014,169016,169018,169021,169023],{"class":180,"line":263},[178,169011,32542],{"class":699},[178,169013,168887],{"class":184},[178,169015,944],{"class":319},[178,169017,2395],{"class":699},[178,169019,169020],{"class":319},"args, ",[178,169022,12422],{"class":699},[178,169024,168031],{"class":319},[178,169026,169027,169029,169031,169033],{"class":180,"line":274},[178,169028,34183],{"class":195},[178,169030,944],{"class":319},[178,169032,168898],{"class":188},[178,169034,863],{"class":319},[178,169036,169037,169040,169042,169045,169047,169049,169051],{"class":180,"line":354},[178,169038,169039],{"class":319},"        result ",[178,169041,330],{"class":699},[178,169043,169044],{"class":319}," func(",[178,169046,2395],{"class":699},[178,169048,169020],{"class":319},[178,169050,12422],{"class":699},[178,169052,169053],{"class":319},"kwargs)\n",[178,169055,169056,169058,169060,169062],{"class":180,"line":364},[178,169057,34183],{"class":195},[178,169059,944],{"class":319},[178,169061,168914],{"class":188},[178,169063,863],{"class":319},[178,169065,169066,169068],{"class":180,"line":740},[178,169067,16511],{"class":699},[178,169069,169070],{"class":319}," result\n",[178,169072,169073],{"class":180,"line":746},[178,169074,722],{"emptyLinePlaceholder":721},[178,169076,169077,169079],{"class":180,"line":752},[178,169078,5862],{"class":699},[178,169080,168927],{"class":319},[178,169082,169083],{"class":180,"line":757},[178,169084,722],{"emptyLinePlaceholder":721},[178,169086,169087],{"class":180,"line":763},[178,169088,722],{"emptyLinePlaceholder":721},[178,169090,169091],{"class":180,"line":769},[178,169092,168940],{"class":184},[178,169094,169095,169097,169099],{"class":180,"line":774},[178,169096,835],{"class":699},[178,169098,6978],{"class":184},[178,169100,152458],{"class":319},[178,169102,169103,169105,169107,169109],{"class":180,"line":780},[178,169104,5862],{"class":699},[178,169106,12630],{"class":319},[178,169108,2421],{"class":699},[178,169110,152469],{"class":319},[178,169112,169113],{"class":180,"line":786},[178,169114,722],{"emptyLinePlaceholder":721},[178,169116,169117],{"class":180,"line":792},[178,169118,722],{"emptyLinePlaceholder":721},[178,169120,169121,169123,169125,169127,169129,169131],{"class":180,"line":798},[178,169122,1504],{"class":195},[178,169124,167965],{"class":319},[178,169126,2386],{"class":195},[178,169128,14196],{"class":319},[178,169130,2640],{"class":195},[178,169132,32239],{"class":319},[19,169134,169135,169136,404,169138,169140],{},"这个写法使用 ",[70,169137,167897],{},[70,169139,168012],{}," 接收原函数的所有参数。",[14,169142,169144],{"id":169143},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,169146,124657],{},[26,169148,169149,169152,169155],{},[29,169150,169151],{},"给定一组学生数据。",[29,169153,169154],{},"封装函数，根据传入规则筛选学生。",[29,169156,169157],{},"筛选及格、优秀、未成年学生。",[19,169159,11796],{},[154,169161,169163],{"className":690,"code":169162,"language":692,"meta":160,"style":160},"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",[70,169164,169165,169173,169201,169229,169257,169261,169265,169269,169279,169287,169297,169304,169309,169315,169319,169323,169347,169370,169393,169397,169404,169411],{"__ignoreMap":160},[178,169166,169167,169169,169171],{"class":180,"line":181},[178,169168,161081],{"class":319},[178,169170,330],{"class":699},[178,169172,57168],{"class":319},[178,169174,169175,169177,169179,169181,169183,169185,169187,169189,169191,169193,169195,169197,169199],{"class":180,"line":263},[178,169176,149750],{"class":319},[178,169178,333],{"class":188},[178,169180,53167],{"class":319},[178,169182,151253],{"class":188},[178,169184,14196],{"class":319},[178,169186,70844],{"class":188},[178,169188,53167],{"class":319},[178,169190,2590],{"class":195},[178,169192,14196],{"class":319},[178,169194,152837],{"class":188},[178,169196,53167],{"class":319},[178,169198,2928],{"class":195},[178,169200,6701],{"class":319},[178,169202,169203,169205,169207,169209,169211,169213,169215,169217,169219,169221,169223,169225,169227],{"class":180,"line":274},[178,169204,149750],{"class":319},[178,169206,333],{"class":188},[178,169208,53167],{"class":319},[178,169210,152301],{"class":188},[178,169212,14196],{"class":319},[178,169214,70844],{"class":188},[178,169216,53167],{"class":319},[178,169218,2565],{"class":195},[178,169220,14196],{"class":319},[178,169222,152837],{"class":188},[178,169224,53167],{"class":319},[178,169226,2751],{"class":195},[178,169228,6701],{"class":319},[178,169230,169231,169233,169235,169237,169239,169241,169243,169245,169247,169249,169251,169253,169255],{"class":180,"line":354},[178,169232,149750],{"class":319},[178,169234,333],{"class":188},[178,169236,53167],{"class":319},[178,169238,161096],{"class":188},[178,169240,14196],{"class":319},[178,169242,70844],{"class":188},[178,169244,53167],{"class":319},[178,169246,2615],{"class":195},[178,169248,14196],{"class":319},[178,169250,152837],{"class":188},[178,169252,53167],{"class":319},[178,169254,2822],{"class":195},[178,169256,6701],{"class":319},[178,169258,169259],{"class":180,"line":364},[178,169260,34978],{"class":319},[178,169262,169263],{"class":180,"line":740},[178,169264,722],{"emptyLinePlaceholder":721},[178,169266,169267],{"class":180,"line":746},[178,169268,722],{"emptyLinePlaceholder":721},[178,169270,169271,169273,169276],{"class":180,"line":752},[178,169272,835],{"class":699},[178,169274,169275],{"class":184}," filter_students",[178,169277,169278],{"class":319},"(students, condition):\n",[178,169280,169281,169283,169285],{"class":180,"line":757},[178,169282,162588],{"class":319},[178,169284,330],{"class":699},[178,169286,53566],{"class":319},[178,169288,169289,169291,169293,169295],{"class":180,"line":763},[178,169290,988],{"class":699},[178,169292,153502],{"class":319},[178,169294,994],{"class":699},[178,169296,153507],{"class":319},[178,169298,169299,169301],{"class":180,"line":769},[178,169300,4280],{"class":699},[178,169302,169303],{"class":319}," condition(student):\n",[178,169305,169306],{"class":180,"line":774},[178,169307,169308],{"class":319},"            result.append(student)\n",[178,169310,169311,169313],{"class":180,"line":780},[178,169312,5862],{"class":699},[178,169314,169070],{"class":319},[178,169316,169317],{"class":180,"line":786},[178,169318,722],{"emptyLinePlaceholder":721},[178,169320,169321],{"class":180,"line":792},[178,169322,722],{"emptyLinePlaceholder":721},[178,169324,169325,169327,169329,169332,169334,169337,169339,169341,169343,169345],{"class":180,"line":798},[178,169326,167066],{"class":319},[178,169328,330],{"class":699},[178,169330,169331],{"class":319}," filter_students(students, ",[178,169333,168251],{"class":699},[178,169335,169336],{"class":319}," s: s[",[178,169338,152837],{"class":188},[178,169340,6214],{"class":319},[178,169342,3505],{"class":699},[178,169344,159202],{"class":195},[178,169346,863],{"class":319},[178,169348,169349,169352,169354,169356,169358,169360,169362,169364,169366,169368],{"class":180,"line":804},[178,169350,169351],{"class":319},"excellent ",[178,169353,330],{"class":699},[178,169355,169331],{"class":319},[178,169357,168251],{"class":699},[178,169359,169336],{"class":319},[178,169361,152837],{"class":188},[178,169363,6214],{"class":319},[178,169365,3505],{"class":699},[178,169367,159153],{"class":195},[178,169369,863],{"class":319},[178,169371,169372,169375,169377,169379,169381,169383,169385,169387,169389,169391],{"class":180,"line":810},[178,169373,169374],{"class":319},"under_age ",[178,169376,330],{"class":699},[178,169378,169331],{"class":319},[178,169380,168251],{"class":699},[178,169382,169336],{"class":319},[178,169384,70844],{"class":188},[178,169386,6214],{"class":319},[178,169388,320],{"class":699},[178,169390,157650],{"class":195},[178,169392,863],{"class":319},[178,169394,169395],{"class":180,"line":816},[178,169396,722],{"emptyLinePlaceholder":721},[178,169398,169399,169401],{"class":180,"line":822},[178,169400,1504],{"class":195},[178,169402,169403],{"class":319},"(passed)\n",[178,169405,169406,169408],{"class":180,"line":827},[178,169407,1504],{"class":195},[178,169409,169410],{"class":319},"(excellent)\n",[178,169412,169413,169415],{"class":180,"line":832},[178,169414,1504],{"class":195},[178,169416,169417],{"class":319},"(under_age)\n",[14,169419,169421],{"id":169420},"_715-易错点","7.15 易错点",[26,169423,169424,169427,169435,169440,169451],{},[29,169425,169426],{},"默认参数不要写可变对象。",[29,169428,169429,169431,169432,169434],{},[70,169430,167897],{}," 是元组，",[70,169433,168012],{}," 是字典。",[29,169436,169437,169439],{},[70,169438,168251],{}," 只适合简单表达式。",[29,169441,169442,404,169444,169446,169447,169450],{},[70,169443,75764],{},[70,169445,81770],{}," 的结果是迭代器，常用 ",[70,169448,169449],{},"list()"," 转换查看。",[29,169452,169453],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169455,169457],{"id":169456},"_716-本章练习","7.16 本章练习",[26,169459,169460,169467,169473,169478,169483],{},[29,169461,169462,169463,169466],{},"写函数 ",[70,169464,169465],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[29,169468,169462,169469,169472],{},[70,169470,169471],{},"print_user(**kwargs)","，输出用户所有字段。",[29,169474,105731,169475,169477],{},[70,169476,168251],{}," 对学生列表按年龄排序。",[29,169479,105731,169480,169482],{},[70,169481,81770],{}," 找出成绩不及格的学生。",[29,169484,169485],{},"写一个装饰器，统计函数执行前后的提示信息。",[1853,169487,169488],{},"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":160,"searchDepth":263,"depth":263,"links":169490},[169491,169492,169493,169494,169495,169496,169500,169501,169502,169503,169508,169509,169510,169511,169512,169513],{"id":167349,"depth":263,"text":167350},{"id":167463,"depth":263,"text":167464},{"id":167552,"depth":263,"text":167553},{"id":167614,"depth":263,"text":167615},{"id":167760,"depth":263,"text":167761},{"id":167887,"depth":263,"text":167888,"children":169497},[169498,169499],{"id":167891,"depth":274,"text":167892},{"id":168006,"depth":274,"text":168007},{"id":168087,"depth":263,"text":168088},{"id":168245,"depth":263,"text":168246},{"id":168413,"depth":263,"text":168414},{"id":168495,"depth":263,"text":168496,"children":169504},[169505,169506,169507],{"id":168499,"depth":274,"text":168500},{"id":168570,"depth":274,"text":168571},{"id":168647,"depth":274,"text":168648},{"id":168772,"depth":263,"text":168773},{"id":168862,"depth":263,"text":168863},{"id":168993,"depth":263,"text":168994},{"id":169143,"depth":263,"text":169144},{"id":169420,"depth":263,"text":169421},{"id":169456,"depth":263,"text":169457},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167341,"description":25135},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169520,"title":169521,"body":169522,"description":25135,"extension":1880,"meta":172041,"navigation":721,"path":172042,"seo":172043,"stem":172044,"__hash__":172045},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169523,"toc":172016},[169524,169527,169531,169534,169537,169568,169572,169576,169579,169606,169610,169613,169664,169667,169682,169685,169720,169724,169726,169750,169753,169813,169817,169821,169824,169881,169884,169904,169908,169911,169974,169978,169981,170037,170044,170068,170072,170075,170138,170142,170147,170198,170201,170205,170210,170277,170280,170362,170366,170371,170422,170425,170429,170432,170435,170443,170446,170492,170495,170541,170545,170551,170595,170598,170644,170647,170687,170690,170751,170755,170758,170848,170851,170993,170996,171063,171067,171070,171073,171214,171217,171295,171298,171474,171478,171480,171491,171493,171692,171696,171940,171944,171978,171982,172013],[10,169525,169521],{"id":169526},"_8-文件操作",[14,169528,169530],{"id":169529},"_81-文件操作的意义","8.1 文件操作的意义",[19,169532,169533],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,169535,169536],{},"常见文件类型：",[26,169538,169539,169545,169551,169557,169563],{},[29,169540,169541,169544],{},[70,169542,169543],{},".txt","：普通文本。",[29,169546,169547,169550],{},[70,169548,169549],{},".csv","：表格文本。",[29,169552,169553,169556],{},[70,169554,169555],{},".json","：结构化数据。",[29,169558,169559,169562],{},[70,169560,169561],{},".log","：日志文件。",[29,169564,169565,169567],{},[70,169566,147717],{},"：Python 源代码。",[14,169569,169571],{"id":169570},"_82-路径","8.2 路径",[387,169573,169575],{"id":169574},"_821-相对路径","8.2.1 相对路径",[19,169577,169578],{},"相对当前运行目录：",[154,169580,169582],{"className":690,"code":169581,"language":692,"meta":160,"style":160},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[70,169583,169584],{"__ignoreMap":160},[178,169585,169586,169588,169590,169592,169594,169596,169598,169600,169602,169604],{"class":180,"line":181},[178,169587,88630],{"class":195},[178,169589,944],{"class":319},[178,169591,148161],{"class":188},[178,169593,14196],{"class":319},[178,169595,148166],{"class":188},[178,169597,14196],{"class":319},[178,169599,148171],{"class":6985},[178,169601,330],{"class":699},[178,169603,148176],{"class":188},[178,169605,863],{"class":319},[387,169607,169609],{"id":169608},"_822-绝对路径","8.2.2 绝对路径",[19,169611,169612],{},"从根目录或盘符开始：",[154,169614,169616],{"className":690,"code":169615,"language":692,"meta":160,"style":160},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[70,169617,169618,169641],{"__ignoreMap":160},[178,169619,169620,169622,169624,169627,169629,169631,169633,169635,169637,169639],{"class":180,"line":181},[178,169621,88630],{"class":195},[178,169623,944],{"class":319},[178,169625,169626],{"class":188},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[178,169628,14196],{"class":319},[178,169630,148166],{"class":188},[178,169632,14196],{"class":319},[178,169634,148171],{"class":6985},[178,169636,330],{"class":699},[178,169638,148176],{"class":188},[178,169640,863],{"class":319},[178,169642,169643,169645,169647,169650,169652,169654,169656,169658,169660,169662],{"class":180,"line":263},[178,169644,88630],{"class":195},[178,169646,944],{"class":319},[178,169648,169649],{"class":188},"\"D:\u002Fdata\u002Fdata.txt\"",[178,169651,14196],{"class":319},[178,169653,148166],{"class":188},[178,169655,14196],{"class":319},[178,169657,148171],{"class":6985},[178,169659,330],{"class":699},[178,169661,148176],{"class":188},[178,169663,863],{"class":319},[19,169665,169666],{},"Windows 路径建议写成：",[154,169668,169670],{"className":690,"code":169669,"language":692,"meta":160,"style":160},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[70,169671,169672],{"__ignoreMap":160},[178,169673,169674,169677,169679],{"class":180,"line":181},[178,169675,169676],{"class":319},"path ",[178,169678,330],{"class":699},[178,169680,169681],{"class":188}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,169683,169684],{},"或原始字符串：",[154,169686,169688],{"className":690,"code":169687,"language":692,"meta":160,"style":160},"path = r\"D:\\data\\data.txt\"\n",[70,169689,169690],{"__ignoreMap":160},[178,169691,169692,169694,169696,169698,169700,169703,169706,169709,169711,169713,169715,169718],{"class":180,"line":181},[178,169693,169676],{"class":319},[178,169695,330],{"class":699},[178,169697,18879],{"class":699},[178,169699,2191],{"class":188},[178,169701,169702],{"class":49709},"D:",[178,169704,169705],{"class":195},"\\d",[178,169707,169708],{"class":49709},"ata",[178,169710,169705],{"class":195},[178,169712,169708],{"class":49709},[178,169714,2498],{"class":195},[178,169716,169717],{"class":49709},"txt",[178,169719,26885],{"class":188},[14,169721,169723],{"id":169722},"_83-open函数","8.3 open函数",[19,169725,6952],{},[154,169727,169729],{"className":690,"code":169728,"language":692,"meta":160,"style":160},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[70,169730,169731],{"__ignoreMap":160},[178,169732,169733,169735,169737,169739,169742,169744,169746,169748],{"class":180,"line":181},[178,169734,47086],{"class":6985},[178,169736,734],{"class":699},[178,169738,148156],{"class":195},[178,169740,169741],{"class":319},"(文件路径, 打开模式, ",[178,169743,148171],{"class":6985},[178,169745,330],{"class":699},[178,169747,148176],{"class":188},[178,169749,863],{"class":319},[19,169751,169752],{},"常见模式：",[45,169754,169755,169764],{},[48,169756,169757],{},[51,169758,169759,169762],{},[54,169760,169761],{},"模式",[54,169763,27621],{},[62,169765,169766,169775,169784,169793,169803],{},[51,169767,169768,169772],{},[67,169769,169770],{},[70,169771,2610],{},[67,169773,169774],{},"只读，文件不存在会报错",[51,169776,169777,169781],{},[67,169778,169779],{},[70,169780,2735],{},[67,169782,169783],{},"只写，文件不存在会创建，存在会清空",[51,169785,169786,169790],{},[67,169787,169788],{},[70,169789,2178],{},[67,169791,169792],{},"追加，文件不存在会创建",[51,169794,169795,169800],{},[67,169796,169797],{},[70,169798,169799],{},"rb",[67,169801,169802],{},"二进制只读",[51,169804,169805,169810],{},[67,169806,169807],{},[70,169808,169809],{},"wb",[67,169811,169812],{},"二进制只写",[14,169814,169816],{"id":169815},"_84-读取文件","8.4 读取文件",[387,169818,169820],{"id":169819},"_841-read","8.4.1 read",[19,169822,169823],{},"一次读取全部内容：",[154,169825,169827],{"className":690,"code":169826,"language":692,"meta":160,"style":160},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[70,169828,169829,169855,169867,169874],{"__ignoreMap":160},[178,169830,169831,169833,169835,169837,169839,169841,169843,169845,169847,169849,169851,169853],{"class":180,"line":181},[178,169832,47086],{"class":6985},[178,169834,734],{"class":699},[178,169836,148156],{"class":195},[178,169838,944],{"class":319},[178,169840,148161],{"class":188},[178,169842,14196],{"class":319},[178,169844,148166],{"class":188},[178,169846,14196],{"class":319},[178,169848,148171],{"class":6985},[178,169850,330],{"class":699},[178,169852,148176],{"class":188},[178,169854,863],{"class":319},[178,169856,169857,169860,169862,169864],{"class":180,"line":263},[178,169858,169859],{"class":319},"content ",[178,169861,330],{"class":699},[178,169863,149518],{"class":6985},[178,169865,169866],{"class":319},".read()\n",[178,169868,169869,169871],{"class":180,"line":274},[178,169870,1504],{"class":195},[178,169872,169873],{"class":319},"(content)\n",[178,169875,169876,169878],{"class":180,"line":354},[178,169877,47086],{"class":6985},[178,169879,169880],{"class":319},".close()\n",[19,169882,169883],{},"可以指定读取字符数：",[154,169885,169887],{"className":690,"code":169886,"language":692,"meta":160,"style":160},"content = file.read(10)\n",[70,169888,169889],{"__ignoreMap":160},[178,169890,169891,169893,169895,169897,169900,169902],{"class":180,"line":181},[178,169892,169859],{"class":319},[178,169894,330],{"class":699},[178,169896,149518],{"class":6985},[178,169898,169899],{"class":319},".read(",[178,169901,2386],{"class":195},[178,169903,863],{"class":319},[387,169905,169907],{"id":169906},"_842-readline","8.4.2 readline",[19,169909,169910],{},"一次读取一行：",[154,169912,169914],{"className":690,"code":169913,"language":692,"meta":160,"style":160},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[70,169915,169916,169942,169946,169957,169964,169968],{"__ignoreMap":160},[178,169917,169918,169920,169922,169924,169926,169928,169930,169932,169934,169936,169938,169940],{"class":180,"line":181},[178,169919,47086],{"class":6985},[178,169921,734],{"class":699},[178,169923,148156],{"class":195},[178,169925,944],{"class":319},[178,169927,148161],{"class":188},[178,169929,14196],{"class":319},[178,169931,148166],{"class":188},[178,169933,14196],{"class":319},[178,169935,148171],{"class":6985},[178,169937,330],{"class":699},[178,169939,148176],{"class":188},[178,169941,863],{"class":319},[178,169943,169944],{"class":180,"line":263},[178,169945,722],{"emptyLinePlaceholder":721},[178,169947,169948,169950,169952,169954],{"class":180,"line":274},[178,169949,148617],{"class":319},[178,169951,330],{"class":699},[178,169953,149518],{"class":6985},[178,169955,169956],{"class":319},".readline()\n",[178,169958,169959,169961],{"class":180,"line":354},[178,169960,1504],{"class":195},[178,169962,169963],{"class":319},"(line)\n",[178,169965,169966],{"class":180,"line":364},[178,169967,722],{"emptyLinePlaceholder":721},[178,169969,169970,169972],{"class":180,"line":740},[178,169971,47086],{"class":6985},[178,169973,169880],{"class":319},[387,169975,169977],{"id":169976},"_843-readlines","8.4.3 readlines",[19,169979,169980],{},"读取所有行，返回列表：",[154,169982,169984],{"className":690,"code":169983,"language":692,"meta":160,"style":160},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[70,169985,169986,170012,170024,170031],{"__ignoreMap":160},[178,169987,169988,169990,169992,169994,169996,169998,170000,170002,170004,170006,170008,170010],{"class":180,"line":181},[178,169989,47086],{"class":6985},[178,169991,734],{"class":699},[178,169993,148156],{"class":195},[178,169995,944],{"class":319},[178,169997,148161],{"class":188},[178,169999,14196],{"class":319},[178,170001,148166],{"class":188},[178,170003,14196],{"class":319},[178,170005,148171],{"class":6985},[178,170007,330],{"class":699},[178,170009,148176],{"class":188},[178,170011,863],{"class":319},[178,170013,170014,170017,170019,170021],{"class":180,"line":263},[178,170015,170016],{"class":319},"lines ",[178,170018,330],{"class":699},[178,170020,149518],{"class":6985},[178,170022,170023],{"class":319},".readlines()\n",[178,170025,170026,170028],{"class":180,"line":274},[178,170027,1504],{"class":195},[178,170029,170030],{"class":319},"(lines)\n",[178,170032,170033,170035],{"class":180,"line":354},[178,170034,47086],{"class":6985},[178,170036,169880],{"class":319},[19,170038,170039,170040,170043],{},"每一行通常带有换行符，可以用 ",[70,170041,170042],{},"strip()"," 去掉：",[154,170045,170047],{"className":690,"code":170046,"language":692,"meta":160,"style":160},"for line in lines:\n    print(line.strip())\n",[70,170048,170049,170061],{"__ignoreMap":160},[178,170050,170051,170053,170056,170058],{"class":180,"line":181},[178,170052,1474],{"class":699},[178,170054,170055],{"class":319}," line ",[178,170057,994],{"class":699},[178,170059,170060],{"class":319}," lines:\n",[178,170062,170063,170065],{"class":180,"line":263},[178,170064,1022],{"class":195},[178,170066,170067],{"class":319},"(line.strip())\n",[387,170069,170071],{"id":170070},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,170073,170074],{},"推荐读取大文件时使用：",[154,170076,170078],{"className":690,"code":170077,"language":692,"meta":160,"style":160},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[70,170079,170080,170106,170110,170122,170128,170132],{"__ignoreMap":160},[178,170081,170082,170084,170086,170088,170090,170092,170094,170096,170098,170100,170102,170104],{"class":180,"line":181},[178,170083,47086],{"class":6985},[178,170085,734],{"class":699},[178,170087,148156],{"class":195},[178,170089,944],{"class":319},[178,170091,148161],{"class":188},[178,170093,14196],{"class":319},[178,170095,148166],{"class":188},[178,170097,14196],{"class":319},[178,170099,148171],{"class":6985},[178,170101,330],{"class":699},[178,170103,148176],{"class":188},[178,170105,863],{"class":319},[178,170107,170108],{"class":180,"line":263},[178,170109,722],{"emptyLinePlaceholder":721},[178,170111,170112,170114,170116,170118,170120],{"class":180,"line":274},[178,170113,1474],{"class":699},[178,170115,170055],{"class":319},[178,170117,994],{"class":699},[178,170119,149518],{"class":6985},[178,170121,847],{"class":319},[178,170123,170124,170126],{"class":180,"line":354},[178,170125,1022],{"class":195},[178,170127,170067],{"class":319},[178,170129,170130],{"class":180,"line":364},[178,170131,722],{"emptyLinePlaceholder":721},[178,170133,170134,170136],{"class":180,"line":740},[178,170135,47086],{"class":6985},[178,170137,169880],{"class":319},[14,170139,170141],{"id":170140},"_85-with语句","8.5 with语句",[19,170143,170144,170146],{},[70,170145,109198],{}," 会自动关闭文件，推荐使用。",[154,170148,170150],{"className":690,"code":170149,"language":692,"meta":160,"style":160},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[70,170151,170152,170182,170192],{"__ignoreMap":160},[178,170153,170154,170156,170158,170160,170162,170164,170166,170168,170170,170172,170174,170176,170178,170180],{"class":180,"line":181},[178,170155,109198],{"class":699},[178,170157,148156],{"class":195},[178,170159,944],{"class":319},[178,170161,148161],{"class":188},[178,170163,14196],{"class":319},[178,170165,148166],{"class":188},[178,170167,14196],{"class":319},[178,170169,148171],{"class":6985},[178,170171,330],{"class":699},[178,170173,148176],{"class":188},[178,170175,15474],{"class":319},[178,170177,713],{"class":699},[178,170179,149518],{"class":6985},[178,170181,847],{"class":319},[178,170183,170184,170186,170188,170190],{"class":180,"line":263},[178,170185,148188],{"class":319},[178,170187,330],{"class":699},[178,170189,149518],{"class":6985},[178,170191,169866],{"class":319},[178,170193,170194,170196],{"class":180,"line":274},[178,170195,1022],{"class":195},[178,170197,169873],{"class":319},[19,170199,170200],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170202,170204],{"id":170203},"_86-写入文件","8.6 写入文件",[19,170206,170207,170209],{},[70,170208,2735],{}," 模式会清空原文件。",[154,170211,170213],{"className":690,"code":170212,"language":692,"meta":160,"style":160},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[70,170214,170215,170245,170262],{"__ignoreMap":160},[178,170216,170217,170219,170221,170223,170225,170227,170229,170231,170233,170235,170237,170239,170241,170243],{"class":180,"line":181},[178,170218,109198],{"class":699},[178,170220,148156],{"class":195},[178,170222,944],{"class":319},[178,170224,148161],{"class":188},[178,170226,14196],{"class":319},[178,170228,153341],{"class":188},[178,170230,14196],{"class":319},[178,170232,148171],{"class":6985},[178,170234,330],{"class":699},[178,170236,148176],{"class":188},[178,170238,15474],{"class":319},[178,170240,713],{"class":699},[178,170242,149518],{"class":6985},[178,170244,847],{"class":319},[178,170246,170247,170250,170253,170256,170258,170260],{"class":180,"line":263},[178,170248,170249],{"class":6985},"    file",[178,170251,170252],{"class":319},".write(",[178,170254,170255],{"class":188},"\"hello",[178,170257,157890],{"class":195},[178,170259,2191],{"class":188},[178,170261,863],{"class":319},[178,170263,170264,170266,170268,170271,170273,170275],{"class":180,"line":274},[178,170265,170249],{"class":6985},[178,170267,170252],{"class":319},[178,170269,170270],{"class":188},"\"python",[178,170272,157890],{"class":195},[178,170274,2191],{"class":188},[178,170276,863],{"class":319},[19,170278,170279],{},"写入多行：",[154,170281,170283],{"className":690,"code":170282,"language":692,"meta":160,"style":160},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[70,170284,170285,170320,170324,170355],{"__ignoreMap":160},[178,170286,170287,170289,170291,170293,170296,170298,170300,170302,170305,170307,170309,170311,170314,170316,170318],{"class":180,"line":181},[178,170288,170016],{"class":319},[178,170290,330],{"class":699},[178,170292,53953],{"class":319},[178,170294,170295],{"class":188},"\"小明,18",[178,170297,157890],{"class":195},[178,170299,2191],{"class":188},[178,170301,14196],{"class":319},[178,170303,170304],{"class":188},"\"小红,17",[178,170306,157890],{"class":195},[178,170308,2191],{"class":188},[178,170310,14196],{"class":319},[178,170312,170313],{"class":188},"\"小刚,19",[178,170315,157890],{"class":195},[178,170317,2191],{"class":188},[178,170319,34978],{"class":319},[178,170321,170322],{"class":180,"line":263},[178,170323,722],{"emptyLinePlaceholder":721},[178,170325,170326,170328,170330,170332,170335,170337,170339,170341,170343,170345,170347,170349,170351,170353],{"class":180,"line":274},[178,170327,109198],{"class":699},[178,170329,148156],{"class":195},[178,170331,944],{"class":319},[178,170333,170334],{"class":188},"\"students.txt\"",[178,170336,14196],{"class":319},[178,170338,153341],{"class":188},[178,170340,14196],{"class":319},[178,170342,148171],{"class":6985},[178,170344,330],{"class":699},[178,170346,148176],{"class":188},[178,170348,15474],{"class":319},[178,170350,713],{"class":699},[178,170352,149518],{"class":6985},[178,170354,847],{"class":319},[178,170356,170357,170359],{"class":180,"line":354},[178,170358,170249],{"class":6985},[178,170360,170361],{"class":319},".writelines(lines)\n",[14,170363,170365],{"id":170364},"_87-追加文件","8.7 追加文件",[19,170367,170368,170370],{},[70,170369,2178],{}," 模式不会清空原内容，而是在末尾追加。",[154,170372,170374],{"className":690,"code":170373,"language":692,"meta":160,"style":160},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[70,170375,170376,170407],{"__ignoreMap":160},[178,170377,170378,170380,170382,170384,170387,170389,170391,170393,170395,170397,170399,170401,170403,170405],{"class":180,"line":181},[178,170379,109198],{"class":699},[178,170381,148156],{"class":195},[178,170383,944],{"class":319},[178,170385,170386],{"class":188},"\"log.txt\"",[178,170388,14196],{"class":319},[178,170390,166690],{"class":188},[178,170392,14196],{"class":319},[178,170394,148171],{"class":6985},[178,170396,330],{"class":699},[178,170398,148176],{"class":188},[178,170400,15474],{"class":319},[178,170402,713],{"class":699},[178,170404,149518],{"class":6985},[178,170406,847],{"class":319},[178,170408,170409,170411,170413,170416,170418,170420],{"class":180,"line":263},[178,170410,170249],{"class":6985},[178,170412,170252],{"class":319},[178,170414,170415],{"class":188},"\"程序启动",[178,170417,157890],{"class":195},[178,170419,2191],{"class":188},[178,170421,863],{"class":319},[19,170423,170424],{},"日志类文件常用追加模式。",[14,170426,170428],{"id":170427},"_88-文件编码","8.8 文件编码",[19,170430,170431],{},"编码决定文字如何保存为字节。",[19,170433,170434],{},"常见编码：",[26,170436,170437,170440],{},[29,170438,170439],{},"UTF-8：推荐。",[29,170441,170442],{},"GBK：部分 Windows 中文文件常见。",[19,170444,170445],{},"读取文件乱码时，可以尝试：",[154,170447,170449],{"className":690,"code":170448,"language":692,"meta":160,"style":160},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[70,170450,170451,170482],{"__ignoreMap":160},[178,170452,170453,170455,170457,170459,170461,170463,170465,170467,170469,170471,170474,170476,170478,170480],{"class":180,"line":181},[178,170454,109198],{"class":699},[178,170456,148156],{"class":195},[178,170458,944],{"class":319},[178,170460,148161],{"class":188},[178,170462,14196],{"class":319},[178,170464,148166],{"class":188},[178,170466,14196],{"class":319},[178,170468,148171],{"class":6985},[178,170470,330],{"class":699},[178,170472,170473],{"class":188},"\"gbk\"",[178,170475,15474],{"class":319},[178,170477,713],{"class":699},[178,170479,149518],{"class":6985},[178,170481,847],{"class":319},[178,170483,170484,170486,170488,170490],{"class":180,"line":263},[178,170485,148188],{"class":319},[178,170487,330],{"class":699},[178,170489,149518],{"class":6985},[178,170491,169866],{"class":319},[19,170493,170494],{},"写文件时建议统一 UTF-8：",[154,170496,170498],{"className":690,"code":170497,"language":692,"meta":160,"style":160},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[70,170499,170500,170530],{"__ignoreMap":160},[178,170501,170502,170504,170506,170508,170510,170512,170514,170516,170518,170520,170522,170524,170526,170528],{"class":180,"line":181},[178,170503,109198],{"class":699},[178,170505,148156],{"class":195},[178,170507,944],{"class":319},[178,170509,148161],{"class":188},[178,170511,14196],{"class":319},[178,170513,153341],{"class":188},[178,170515,14196],{"class":319},[178,170517,148171],{"class":6985},[178,170519,330],{"class":699},[178,170521,148176],{"class":188},[178,170523,15474],{"class":319},[178,170525,713],{"class":699},[178,170527,149518],{"class":6985},[178,170529,847],{"class":319},[178,170531,170532,170534,170536,170539],{"class":180,"line":263},[178,170533,170249],{"class":6985},[178,170535,170252],{"class":319},[178,170537,170538],{"class":188},"\"中文内容\"",[178,170540,863],{"class":319},[14,170542,170544],{"id":170543},"_89-pathlib","8.9 pathlib",[19,170546,170547,170550],{},[70,170548,170549],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[154,170552,170554],{"className":690,"code":170553,"language":692,"meta":160,"style":160},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[70,170555,170556,170566,170570,170588],{"__ignoreMap":160},[178,170557,170558,170560,170562,170564],{"class":180,"line":181},[178,170559,32479],{"class":699},[178,170561,109676],{"class":319},[178,170563,700],{"class":699},[178,170565,109681],{"class":319},[178,170567,170568],{"class":180,"line":263},[178,170569,722],{"emptyLinePlaceholder":721},[178,170571,170572,170574,170576,170578,170581,170583,170585],{"class":180,"line":274},[178,170573,169676],{"class":319},[178,170575,330],{"class":699},[178,170577,109910],{"class":319},[178,170579,170580],{"class":188},"\"data\"",[178,170582,15474],{"class":319},[178,170584,2524],{"class":699},[178,170586,170587],{"class":188}," \"students.txt\"\n",[178,170589,170590,170592],{"class":180,"line":354},[178,170591,1504],{"class":195},[178,170593,170594],{"class":319},"(path)\n",[19,170596,170597],{},"创建目录：",[154,170599,170601],{"className":690,"code":170600,"language":692,"meta":160,"style":160},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[70,170602,170603,170613,170617,170630],{"__ignoreMap":160},[178,170604,170605,170607,170609,170611],{"class":180,"line":181},[178,170606,32479],{"class":699},[178,170608,109676],{"class":319},[178,170610,700],{"class":699},[178,170612,109681],{"class":319},[178,170614,170615],{"class":180,"line":263},[178,170616,722],{"emptyLinePlaceholder":721},[178,170618,170619,170622,170624,170626,170628],{"class":180,"line":274},[178,170620,170621],{"class":319},"data_dir ",[178,170623,330],{"class":699},[178,170625,109910],{"class":319},[178,170627,170580],{"class":188},[178,170629,863],{"class":319},[178,170631,170632,170635,170638,170640,170642],{"class":180,"line":354},[178,170633,170634],{"class":319},"data_dir.mkdir(",[178,170636,170637],{"class":6985},"exist_ok",[178,170639,330],{"class":699},[178,170641,33212],{"class":195},[178,170643,863],{"class":319},[19,170645,170646],{},"判断文件是否存在：",[154,170648,170650],{"className":690,"code":170649,"language":692,"meta":160,"style":160},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[70,170651,170652,170665,170669,170676],{"__ignoreMap":160},[178,170653,170654,170656,170658,170660,170663],{"class":180,"line":181},[178,170655,169676],{"class":319},[178,170657,330],{"class":699},[178,170659,109910],{"class":319},[178,170661,170662],{"class":188},"\"data\u002Fstudents.txt\"",[178,170664,863],{"class":319},[178,170666,170667],{"class":180,"line":263},[178,170668,722],{"emptyLinePlaceholder":721},[178,170670,170671,170673],{"class":180,"line":274},[178,170672,1085],{"class":699},[178,170674,170675],{"class":319}," path.exists():\n",[178,170677,170678,170680,170682,170685],{"class":180,"line":354},[178,170679,1022],{"class":195},[178,170681,944],{"class":319},[178,170683,170684],{"class":188},"\"文件存在\"",[178,170686,863],{"class":319},[19,170688,170689],{},"读写文本：",[154,170691,170693],{"className":690,"code":170692,"language":692,"meta":160,"style":160},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[70,170694,170695,170707,170711,170728,170745],{"__ignoreMap":160},[178,170696,170697,170699,170701,170703,170705],{"class":180,"line":181},[178,170698,169676],{"class":319},[178,170700,330],{"class":699},[178,170702,109910],{"class":319},[178,170704,148161],{"class":188},[178,170706,863],{"class":319},[178,170708,170709],{"class":180,"line":263},[178,170710,722],{"emptyLinePlaceholder":721},[178,170712,170713,170716,170718,170720,170722,170724,170726],{"class":180,"line":274},[178,170714,170715],{"class":319},"path.write_text(",[178,170717,147241],{"class":188},[178,170719,14196],{"class":319},[178,170721,148171],{"class":6985},[178,170723,330],{"class":699},[178,170725,148176],{"class":188},[178,170727,863],{"class":319},[178,170729,170730,170732,170734,170737,170739,170741,170743],{"class":180,"line":354},[178,170731,169859],{"class":319},[178,170733,330],{"class":699},[178,170735,170736],{"class":319}," path.read_text(",[178,170738,148171],{"class":6985},[178,170740,330],{"class":699},[178,170742,148176],{"class":188},[178,170744,863],{"class":319},[178,170746,170747,170749],{"class":180,"line":364},[178,170748,1504],{"class":195},[178,170750,169873],{"class":319},[14,170752,170754],{"id":170753},"_810-json文件","8.10 JSON文件",[19,170756,170757],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[154,170759,170761],{"className":690,"code":170760,"language":692,"meta":160,"style":160},"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",[70,170762,170763,170769,170773,170781,170791,170801,170809,170813,170817,170842],{"__ignoreMap":160},[178,170764,170765,170767],{"class":180,"line":181},[178,170766,700],{"class":699},[178,170768,148456],{"class":319},[178,170770,170771],{"class":180,"line":263},[178,170772,722],{"emptyLinePlaceholder":721},[178,170774,170775,170777,170779],{"class":180,"line":274},[178,170776,150846],{"class":319},[178,170778,330],{"class":699},[178,170780,17330],{"class":319},[178,170782,170783,170785,170787,170789],{"class":180,"line":354},[178,170784,148385],{"class":188},[178,170786,53167],{"class":319},[178,170788,151253],{"class":188},[178,170790,33202],{"class":319},[178,170792,170793,170795,170797,170799],{"class":180,"line":364},[178,170794,165902],{"class":188},[178,170796,53167],{"class":319},[178,170798,2590],{"class":195},[178,170800,33202],{"class":319},[178,170802,170803,170805,170807],{"class":180,"line":740},[178,170804,165913],{"class":188},[178,170806,53167],{"class":319},[178,170808,165918],{"class":195},[178,170810,170811],{"class":180,"line":746},[178,170812,3371],{"class":319},[178,170814,170815],{"class":180,"line":752},[178,170816,722],{"emptyLinePlaceholder":721},[178,170818,170819,170821,170823,170826,170828,170830,170832,170834,170836,170838,170840],{"class":180,"line":757},[178,170820,157809],{"class":319},[178,170822,330],{"class":699},[178,170824,170825],{"class":319}," json.dumps(student, ",[178,170827,148502],{"class":6985},[178,170829,330],{"class":699},[178,170831,35719],{"class":195},[178,170833,14196],{"class":319},[178,170835,153377],{"class":6985},[178,170837,330],{"class":699},[178,170839,1669],{"class":195},[178,170841,863],{"class":319},[178,170843,170844,170846],{"class":180,"line":763},[178,170845,1504],{"class":195},[178,170847,165436],{"class":319},[19,170849,170850],{},"写入 JSON 文件：",[154,170852,170854],{"className":690,"code":170853,"language":692,"meta":160,"style":160},"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",[70,170855,170856,170862,170866,170874,170902,170930,170934,170938,170968],{"__ignoreMap":160},[178,170857,170858,170860],{"class":180,"line":181},[178,170859,700],{"class":699},[178,170861,148456],{"class":319},[178,170863,170864],{"class":180,"line":263},[178,170865,722],{"emptyLinePlaceholder":721},[178,170867,170868,170870,170872],{"class":180,"line":274},[178,170869,161081],{"class":319},[178,170871,330],{"class":699},[178,170873,57168],{"class":319},[178,170875,170876,170878,170880,170882,170884,170886,170888,170890,170892,170894,170896,170898,170900],{"class":180,"line":354},[178,170877,149750],{"class":319},[178,170879,333],{"class":188},[178,170881,53167],{"class":319},[178,170883,151253],{"class":188},[178,170885,14196],{"class":319},[178,170887,70844],{"class":188},[178,170889,53167],{"class":319},[178,170891,2590],{"class":195},[178,170893,14196],{"class":319},[178,170895,152837],{"class":188},[178,170897,53167],{"class":319},[178,170899,2928],{"class":195},[178,170901,6701],{"class":319},[178,170903,170904,170906,170908,170910,170912,170914,170916,170918,170920,170922,170924,170926,170928],{"class":180,"line":364},[178,170905,149750],{"class":319},[178,170907,333],{"class":188},[178,170909,53167],{"class":319},[178,170911,152301],{"class":188},[178,170913,14196],{"class":319},[178,170915,70844],{"class":188},[178,170917,53167],{"class":319},[178,170919,2565],{"class":195},[178,170921,14196],{"class":319},[178,170923,152837],{"class":188},[178,170925,53167],{"class":319},[178,170927,2751],{"class":195},[178,170929,6701],{"class":319},[178,170931,170932],{"class":180,"line":740},[178,170933,34978],{"class":319},[178,170935,170936],{"class":180,"line":746},[178,170937,722],{"emptyLinePlaceholder":721},[178,170939,170940,170942,170944,170946,170948,170950,170952,170954,170956,170958,170960,170962,170964,170966],{"class":180,"line":752},[178,170941,109198],{"class":699},[178,170943,148156],{"class":195},[178,170945,944],{"class":319},[178,170947,153196],{"class":188},[178,170949,14196],{"class":319},[178,170951,153341],{"class":188},[178,170953,14196],{"class":319},[178,170955,148171],{"class":6985},[178,170957,330],{"class":699},[178,170959,148176],{"class":188},[178,170961,15474],{"class":319},[178,170963,713],{"class":699},[178,170965,149518],{"class":6985},[178,170967,847],{"class":319},[178,170969,170970,170973,170975,170977,170979,170981,170983,170985,170987,170989,170991],{"class":180,"line":757},[178,170971,170972],{"class":319},"    json.dump(students, ",[178,170974,47086],{"class":6985},[178,170976,14196],{"class":319},[178,170978,148502],{"class":6985},[178,170980,330],{"class":699},[178,170982,35719],{"class":195},[178,170984,14196],{"class":319},[178,170986,153377],{"class":6985},[178,170988,330],{"class":699},[178,170990,1669],{"class":195},[178,170992,863],{"class":319},[19,170994,170995],{},"读取 JSON 文件：",[154,170997,170999],{"className":690,"code":170998,"language":692,"meta":160,"style":160},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[70,171000,171001,171007,171011,171041,171053,171057],{"__ignoreMap":160},[178,171002,171003,171005],{"class":180,"line":181},[178,171004,700],{"class":699},[178,171006,148456],{"class":319},[178,171008,171009],{"class":180,"line":263},[178,171010,722],{"emptyLinePlaceholder":721},[178,171012,171013,171015,171017,171019,171021,171023,171025,171027,171029,171031,171033,171035,171037,171039],{"class":180,"line":274},[178,171014,109198],{"class":699},[178,171016,148156],{"class":195},[178,171018,944],{"class":319},[178,171020,153196],{"class":188},[178,171022,14196],{"class":319},[178,171024,148166],{"class":188},[178,171026,14196],{"class":319},[178,171028,148171],{"class":6985},[178,171030,330],{"class":699},[178,171032,148176],{"class":188},[178,171034,15474],{"class":319},[178,171036,713],{"class":699},[178,171038,149518],{"class":6985},[178,171040,847],{"class":319},[178,171042,171043,171045,171047,171049,171051],{"class":180,"line":354},[178,171044,154402],{"class":319},[178,171046,330],{"class":699},[178,171048,149529],{"class":319},[178,171050,47086],{"class":6985},[178,171052,863],{"class":319},[178,171054,171055],{"class":180,"line":364},[178,171056,722],{"emptyLinePlaceholder":721},[178,171058,171059,171061],{"class":180,"line":740},[178,171060,1504],{"class":195},[178,171062,166360],{"class":319},[14,171064,171066],{"id":171065},"_811-csv文件","8.11 CSV文件",[19,171068,171069],{},"CSV 是逗号分隔值，常用于表格数据。",[19,171071,171072],{},"写入 CSV：",[154,171074,171076],{"className":690,"code":171075,"language":692,"meta":160,"style":160},"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",[70,171077,171078,171085,171089,171097,171115,171131,171147,171151,171155,171195,171209],{"__ignoreMap":160},[178,171079,171080,171082],{"class":180,"line":181},[178,171081,700],{"class":699},[178,171083,171084],{"class":319}," csv\n",[178,171086,171087],{"class":180,"line":263},[178,171088,722],{"emptyLinePlaceholder":721},[178,171090,171091,171093,171095],{"class":180,"line":274},[178,171092,161081],{"class":319},[178,171094,330],{"class":699},[178,171096,57168],{"class":319},[178,171098,171099,171102,171104,171106,171108,171110,171113],{"class":180,"line":354},[178,171100,171101],{"class":319},"    [",[178,171103,74819],{"class":188},[178,171105,14196],{"class":319},[178,171107,74852],{"class":188},[178,171109,14196],{"class":319},[178,171111,171112],{"class":188},"\"成绩\"",[178,171114,89551],{"class":319},[178,171116,171117,171119,171121,171123,171125,171127,171129],{"class":180,"line":364},[178,171118,171101],{"class":319},[178,171120,151253],{"class":188},[178,171122,14196],{"class":319},[178,171124,2590],{"class":195},[178,171126,14196],{"class":319},[178,171128,2928],{"class":195},[178,171130,89551],{"class":319},[178,171132,171133,171135,171137,171139,171141,171143,171145],{"class":180,"line":740},[178,171134,171101],{"class":319},[178,171136,152301],{"class":188},[178,171138,14196],{"class":319},[178,171140,2565],{"class":195},[178,171142,14196],{"class":319},[178,171144,2751],{"class":195},[178,171146,89551],{"class":319},[178,171148,171149],{"class":180,"line":746},[178,171150,34978],{"class":319},[178,171152,171153],{"class":180,"line":752},[178,171154,722],{"emptyLinePlaceholder":721},[178,171156,171157,171159,171161,171163,171166,171168,171170,171172,171174,171176,171178,171180,171183,171185,171187,171189,171191,171193],{"class":180,"line":757},[178,171158,109198],{"class":699},[178,171160,148156],{"class":195},[178,171162,944],{"class":319},[178,171164,171165],{"class":188},"\"students.csv\"",[178,171167,14196],{"class":319},[178,171169,153341],{"class":188},[178,171171,14196],{"class":319},[178,171173,148171],{"class":6985},[178,171175,330],{"class":699},[178,171177,148176],{"class":188},[178,171179,14196],{"class":319},[178,171181,171182],{"class":6985},"newline",[178,171184,330],{"class":699},[178,171186,9421],{"class":188},[178,171188,15474],{"class":319},[178,171190,713],{"class":699},[178,171192,149518],{"class":6985},[178,171194,847],{"class":319},[178,171196,171197,171200,171202,171205,171207],{"class":180,"line":763},[178,171198,171199],{"class":319},"    writer ",[178,171201,330],{"class":699},[178,171203,171204],{"class":319}," csv.writer(",[178,171206,47086],{"class":6985},[178,171208,863],{"class":319},[178,171210,171211],{"class":180,"line":769},[178,171212,171213],{"class":319},"    writer.writerows(students)\n",[19,171215,171216],{},"读取 CSV：",[154,171218,171220],{"className":690,"code":171219,"language":692,"meta":160,"style":160},"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",[70,171221,171222,171228,171232,171262,171276,171288],{"__ignoreMap":160},[178,171223,171224,171226],{"class":180,"line":181},[178,171225,700],{"class":699},[178,171227,171084],{"class":319},[178,171229,171230],{"class":180,"line":263},[178,171231,722],{"emptyLinePlaceholder":721},[178,171233,171234,171236,171238,171240,171242,171244,171246,171248,171250,171252,171254,171256,171258,171260],{"class":180,"line":274},[178,171235,109198],{"class":699},[178,171237,148156],{"class":195},[178,171239,944],{"class":319},[178,171241,171165],{"class":188},[178,171243,14196],{"class":319},[178,171245,148166],{"class":188},[178,171247,14196],{"class":319},[178,171249,148171],{"class":6985},[178,171251,330],{"class":699},[178,171253,148176],{"class":188},[178,171255,15474],{"class":319},[178,171257,713],{"class":699},[178,171259,149518],{"class":6985},[178,171261,847],{"class":319},[178,171263,171264,171267,171269,171272,171274],{"class":180,"line":354},[178,171265,171266],{"class":319},"    reader ",[178,171268,330],{"class":699},[178,171270,171271],{"class":319}," csv.reader(",[178,171273,47086],{"class":6985},[178,171275,863],{"class":319},[178,171277,171278,171280,171283,171285],{"class":180,"line":364},[178,171279,988],{"class":699},[178,171281,171282],{"class":319}," row ",[178,171284,994],{"class":699},[178,171286,171287],{"class":319}," reader:\n",[178,171289,171290,171292],{"class":180,"line":740},[178,171291,34183],{"class":195},[178,171293,171294],{"class":319},"(row)\n",[19,171296,171297],{},"使用字典写入：",[154,171299,171301],{"className":690,"code":171300,"language":692,"meta":160,"style":160},"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",[70,171302,171303,171309,171313,171321,171349,171377,171381,171385,171423,171444,171465,171470],{"__ignoreMap":160},[178,171304,171305,171307],{"class":180,"line":181},[178,171306,700],{"class":699},[178,171308,171084],{"class":319},[178,171310,171311],{"class":180,"line":263},[178,171312,722],{"emptyLinePlaceholder":721},[178,171314,171315,171317,171319],{"class":180,"line":274},[178,171316,161081],{"class":319},[178,171318,330],{"class":699},[178,171320,57168],{"class":319},[178,171322,171323,171325,171327,171329,171331,171333,171335,171337,171339,171341,171343,171345,171347],{"class":180,"line":354},[178,171324,149750],{"class":319},[178,171326,333],{"class":188},[178,171328,53167],{"class":319},[178,171330,151253],{"class":188},[178,171332,14196],{"class":319},[178,171334,70844],{"class":188},[178,171336,53167],{"class":319},[178,171338,2590],{"class":195},[178,171340,14196],{"class":319},[178,171342,152837],{"class":188},[178,171344,53167],{"class":319},[178,171346,2928],{"class":195},[178,171348,6701],{"class":319},[178,171350,171351,171353,171355,171357,171359,171361,171363,171365,171367,171369,171371,171373,171375],{"class":180,"line":364},[178,171352,149750],{"class":319},[178,171354,333],{"class":188},[178,171356,53167],{"class":319},[178,171358,152301],{"class":188},[178,171360,14196],{"class":319},[178,171362,70844],{"class":188},[178,171364,53167],{"class":319},[178,171366,2565],{"class":195},[178,171368,14196],{"class":319},[178,171370,152837],{"class":188},[178,171372,53167],{"class":319},[178,171374,2751],{"class":195},[178,171376,6701],{"class":319},[178,171378,171379],{"class":180,"line":740},[178,171380,34978],{"class":319},[178,171382,171383],{"class":180,"line":746},[178,171384,722],{"emptyLinePlaceholder":721},[178,171386,171387,171389,171391,171393,171395,171397,171399,171401,171403,171405,171407,171409,171411,171413,171415,171417,171419,171421],{"class":180,"line":752},[178,171388,109198],{"class":699},[178,171390,148156],{"class":195},[178,171392,944],{"class":319},[178,171394,171165],{"class":188},[178,171396,14196],{"class":319},[178,171398,153341],{"class":188},[178,171400,14196],{"class":319},[178,171402,148171],{"class":6985},[178,171404,330],{"class":699},[178,171406,148176],{"class":188},[178,171408,14196],{"class":319},[178,171410,171182],{"class":6985},[178,171412,330],{"class":699},[178,171414,9421],{"class":188},[178,171416,15474],{"class":319},[178,171418,713],{"class":699},[178,171420,149518],{"class":6985},[178,171422,847],{"class":319},[178,171424,171425,171428,171430,171432,171434,171436,171438,171440,171442],{"class":180,"line":757},[178,171426,171427],{"class":319},"    fieldnames ",[178,171429,330],{"class":699},[178,171431,53953],{"class":319},[178,171433,333],{"class":188},[178,171435,14196],{"class":319},[178,171437,70844],{"class":188},[178,171439,14196],{"class":319},[178,171441,152837],{"class":188},[178,171443,34978],{"class":319},[178,171445,171446,171448,171450,171453,171455,171457,171460,171462],{"class":180,"line":763},[178,171447,171199],{"class":319},[178,171449,330],{"class":699},[178,171451,171452],{"class":319}," csv.DictWriter(",[178,171454,47086],{"class":6985},[178,171456,14196],{"class":319},[178,171458,171459],{"class":6985},"fieldnames",[178,171461,330],{"class":699},[178,171463,171464],{"class":319},"fieldnames)\n",[178,171466,171467],{"class":180,"line":769},[178,171468,171469],{"class":319},"    writer.writeheader()\n",[178,171471,171472],{"class":180,"line":774},[178,171473,171213],{"class":319},[14,171475,171477],{"id":171476},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,171479,124657],{},[26,171481,171482,171485,171488],{},[29,171483,171484],{},"读取文本文件。",[29,171486,171487],{},"统计每个单词出现次数。",[29,171489,171490],{},"输出出现次数最多的前 10 个单词。",[19,171492,11796],{},[154,171494,171496],{"className":690,"code":171495,"language":692,"meta":160,"style":160},"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",[70,171497,171498,171508,171512,171525,171541,171545,171555,171564,171568,171580,171600,171609,171613,171631,171635,171665,171669,171685],{"__ignoreMap":160},[178,171499,171500,171502,171504,171506],{"class":180,"line":181},[178,171501,32479],{"class":699},[178,171503,109676],{"class":319},[178,171505,700],{"class":699},[178,171507,109681],{"class":319},[178,171509,171510],{"class":180,"line":263},[178,171511,722],{"emptyLinePlaceholder":721},[178,171513,171514,171516,171518,171520,171523],{"class":180,"line":274},[178,171515,169676],{"class":319},[178,171517,330],{"class":699},[178,171519,109910],{"class":319},[178,171521,171522],{"class":188},"\"article.txt\"",[178,171524,863],{"class":319},[178,171526,171527,171529,171531,171533,171535,171537,171539],{"class":180,"line":354},[178,171528,169859],{"class":319},[178,171530,330],{"class":699},[178,171532,170736],{"class":319},[178,171534,148171],{"class":6985},[178,171536,330],{"class":699},[178,171538,148176],{"class":188},[178,171540,863],{"class":319},[178,171542,171543],{"class":180,"line":364},[178,171544,722],{"emptyLinePlaceholder":721},[178,171546,171547,171550,171552],{"class":180,"line":740},[178,171548,171549],{"class":319},"words ",[178,171551,330],{"class":699},[178,171553,171554],{"class":319}," content.lower().split()\n",[178,171556,171557,171560,171562],{"class":180,"line":746},[178,171558,171559],{"class":319},"counter ",[178,171561,330],{"class":699},[178,171563,89583],{"class":319},[178,171565,171566],{"class":180,"line":752},[178,171567,722],{"emptyLinePlaceholder":721},[178,171569,171570,171572,171575,171577],{"class":180,"line":757},[178,171571,1474],{"class":699},[178,171573,171574],{"class":319}," word ",[178,171576,994],{"class":699},[178,171578,171579],{"class":319}," words:\n",[178,171581,171582,171585,171587,171590,171593,171595,171598],{"class":180,"line":763},[178,171583,171584],{"class":319},"    word ",[178,171586,330],{"class":699},[178,171588,171589],{"class":319}," word.strip(",[178,171591,171592],{"class":188},"\".,!?;:",[178,171594,157860],{"class":195},[178,171596,171597],{"class":188},"'()[]\"",[178,171599,863],{"class":319},[178,171601,171602,171604,171606],{"class":180,"line":769},[178,171603,922],{"class":699},[178,171605,40662],{"class":699},[178,171607,171608],{"class":319}," word:\n",[178,171610,171611],{"class":180,"line":774},[178,171612,149877],{"class":699},[178,171614,171615,171618,171620,171623,171625,171627,171629],{"class":180,"line":780},[178,171616,171617],{"class":319},"    counter[word] ",[178,171619,330],{"class":699},[178,171621,171622],{"class":319}," counter.get(word, ",[178,171624,2133],{"class":195},[178,171626,15474],{"class":319},[178,171628,2421],{"class":699},[178,171630,57420],{"class":195},[178,171632,171633],{"class":180,"line":786},[178,171634,722],{"emptyLinePlaceholder":721},[178,171636,171637,171640,171642,171644,171647,171649,171651,171653,171655,171657,171659,171661,171663],{"class":180,"line":792},[178,171638,171639],{"class":319},"items ",[178,171641,330],{"class":699},[178,171643,164969],{"class":195},[178,171645,171646],{"class":319},"(counter.items(), ",[178,171648,155311],{"class":6985},[178,171650,155314],{"class":699},[178,171652,155317],{"class":319},[178,171654,1665],{"class":195},[178,171656,113567],{"class":319},[178,171658,164893],{"class":6985},[178,171660,330],{"class":699},[178,171662,33212],{"class":195},[178,171664,863],{"class":319},[178,171666,171667],{"class":180,"line":798},[178,171668,722],{"emptyLinePlaceholder":721},[178,171670,171671,171673,171676,171678,171681,171683],{"class":180,"line":804},[178,171672,1474],{"class":699},[178,171674,171675],{"class":319}," word, count ",[178,171677,994],{"class":699},[178,171679,171680],{"class":319}," items[:",[178,171682,2386],{"class":195},[178,171684,167120],{"class":319},[178,171686,171687,171689],{"class":180,"line":810},[178,171688,1022],{"class":195},[178,171690,171691],{"class":319},"(word, count)\n",[14,171693,171695],{"id":171694},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[154,171697,171699],{"className":690,"code":171698,"language":692,"meta":160,"style":160},"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",[70,171700,171701,171707,171717,171721,171733,171737,171741,171749,171759,171765,171769,171799,171809,171813,171817,171825,171855,171879,171883,171887,171895,171924,171929],{"__ignoreMap":160},[178,171702,171703,171705],{"class":180,"line":181},[178,171704,700],{"class":699},[178,171706,148456],{"class":319},[178,171708,171709,171711,171713,171715],{"class":180,"line":263},[178,171710,32479],{"class":699},[178,171712,109676],{"class":319},[178,171714,700],{"class":699},[178,171716,109681],{"class":319},[178,171718,171719],{"class":180,"line":274},[178,171720,722],{"emptyLinePlaceholder":721},[178,171722,171723,171725,171727,171729,171731],{"class":180,"line":354},[178,171724,153189],{"class":195},[178,171726,734],{"class":699},[178,171728,109910],{"class":319},[178,171730,153196],{"class":188},[178,171732,863],{"class":319},[178,171734,171735],{"class":180,"line":364},[178,171736,722],{"emptyLinePlaceholder":721},[178,171738,171739],{"class":180,"line":740},[178,171740,722],{"emptyLinePlaceholder":721},[178,171742,171743,171745,171747],{"class":180,"line":746},[178,171744,835],{"class":699},[178,171746,153213],{"class":184},[178,171748,33687],{"class":319},[178,171750,171751,171753,171755,171757],{"class":180,"line":752},[178,171752,922],{"class":699},[178,171754,40662],{"class":699},[178,171756,153224],{"class":195},[178,171758,153227],{"class":319},[178,171760,171761,171763],{"class":180,"line":757},[178,171762,16511],{"class":699},[178,171764,53566],{"class":319},[178,171766,171767],{"class":180,"line":763},[178,171768,722],{"emptyLinePlaceholder":721},[178,171770,171771,171773,171775,171777,171779,171781,171783,171785,171787,171789,171791,171793,171795,171797],{"class":180,"line":769},[178,171772,35910],{"class":699},[178,171774,148156],{"class":195},[178,171776,944],{"class":319},[178,171778,153189],{"class":195},[178,171780,14196],{"class":319},[178,171782,148166],{"class":188},[178,171784,14196],{"class":319},[178,171786,148171],{"class":6985},[178,171788,330],{"class":699},[178,171790,148176],{"class":188},[178,171792,15474],{"class":319},[178,171794,713],{"class":699},[178,171796,149518],{"class":6985},[178,171798,847],{"class":319},[178,171800,171801,171803,171805,171807],{"class":180,"line":774},[178,171802,16511],{"class":699},[178,171804,149529],{"class":319},[178,171806,47086],{"class":6985},[178,171808,863],{"class":319},[178,171810,171811],{"class":180,"line":780},[178,171812,722],{"emptyLinePlaceholder":721},[178,171814,171815],{"class":180,"line":786},[178,171816,722],{"emptyLinePlaceholder":721},[178,171818,171819,171821,171823],{"class":180,"line":792},[178,171820,835],{"class":699},[178,171822,153323],{"class":184},[178,171824,153326],{"class":319},[178,171826,171827,171829,171831,171833,171835,171837,171839,171841,171843,171845,171847,171849,171851,171853],{"class":180,"line":798},[178,171828,35910],{"class":699},[178,171830,148156],{"class":195},[178,171832,944],{"class":319},[178,171834,153189],{"class":195},[178,171836,14196],{"class":319},[178,171838,153341],{"class":188},[178,171840,14196],{"class":319},[178,171842,148171],{"class":6985},[178,171844,330],{"class":699},[178,171846,148176],{"class":188},[178,171848,15474],{"class":319},[178,171850,713],{"class":699},[178,171852,149518],{"class":6985},[178,171854,847],{"class":319},[178,171856,171857,171859,171861,171863,171865,171867,171869,171871,171873,171875,171877],{"class":180,"line":804},[178,171858,153362],{"class":319},[178,171860,47086],{"class":6985},[178,171862,14196],{"class":319},[178,171864,148502],{"class":6985},[178,171866,330],{"class":699},[178,171868,35719],{"class":195},[178,171870,14196],{"class":319},[178,171872,153377],{"class":6985},[178,171874,330],{"class":699},[178,171876,1669],{"class":195},[178,171878,863],{"class":319},[178,171880,171881],{"class":180,"line":810},[178,171882,722],{"emptyLinePlaceholder":721},[178,171884,171885],{"class":180,"line":816},[178,171886,722],{"emptyLinePlaceholder":721},[178,171888,171889,171891,171893],{"class":180,"line":822},[178,171890,161081],{"class":319},[178,171892,330],{"class":699},[178,171894,154407],{"class":319},[178,171896,171897,171900,171902,171904,171906,171908,171910,171912,171914,171916,171918,171920,171922],{"class":180,"line":827},[178,171898,171899],{"class":319},"students.append({",[178,171901,333],{"class":188},[178,171903,53167],{"class":319},[178,171905,151253],{"class":188},[178,171907,14196],{"class":319},[178,171909,70844],{"class":188},[178,171911,53167],{"class":319},[178,171913,2590],{"class":195},[178,171915,14196],{"class":319},[178,171917,152837],{"class":188},[178,171919,53167],{"class":319},[178,171921,2928],{"class":195},[178,171923,166517],{"class":319},[178,171925,171926],{"class":180,"line":832},[178,171927,171928],{"class":319},"save_students(students)\n",[178,171930,171931,171933,171935,171938],{"class":180,"line":850},[178,171932,1504],{"class":195},[178,171934,944],{"class":319},[178,171936,171937],{"class":188},"\"保存成功\"",[178,171939,863],{"class":319},[14,171941,171943],{"id":171942},"_814-易错点","8.14 易错点",[26,171945,171946,171950,171956,171961,171968,171975],{},[29,171947,171948,170209],{},[70,171949,2735],{},[29,171951,171952,171953,297],{},"读写中文要指定 ",[70,171954,171955],{},"encoding=\"utf-8\"",[29,171957,171958,171959,297],{},"打开文件后要关闭，推荐使用 ",[70,171960,109198],{},[29,171962,171963,171964,171967],{},"读取大文件不要直接 ",[70,171965,171966],{},"read()"," 全部内容。",[29,171969,171970,171971,171974],{},"Windows 写 CSV 时建议加 ",[70,171972,171973],{},"newline=\"\"","，避免空行。",[29,171976,171977],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,171979,171981],{"id":171980},"_815-本章练习","8.15 本章练习",[26,171983,171984,171991,171996,171999,172002],{},[29,171985,171986,171987,171990],{},"写入一个 ",[70,171988,171989],{},"students.txt","，每行保存一个学生姓名。",[29,171992,105720,171993,171995],{},[70,171994,171989],{}," 并输出所有学生。",[29,171997,171998],{},"把学生列表保存为 JSON 文件。",[29,172000,172001],{},"从 JSON 文件读取学生数据，计算平均分。",[29,172003,172004,172005,172008,172009,172012],{},"写一个日志函数 ",[70,172006,172007],{},"write_log(message)","，每次调用向 ",[70,172010,172011],{},"app.log"," 追加一行。",[1853,172014,172015],{},"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":160,"searchDepth":263,"depth":263,"links":172017},[172018,172019,172023,172024,172030,172031,172032,172033,172034,172035,172036,172037,172038,172039,172040],{"id":169529,"depth":263,"text":169530},{"id":169570,"depth":263,"text":169571,"children":172020},[172021,172022],{"id":169574,"depth":274,"text":169575},{"id":169608,"depth":274,"text":169609},{"id":169722,"depth":263,"text":169723},{"id":169815,"depth":263,"text":169816,"children":172025},[172026,172027,172028,172029],{"id":169819,"depth":274,"text":169820},{"id":169906,"depth":274,"text":169907},{"id":169976,"depth":274,"text":169977},{"id":170070,"depth":274,"text":170071},{"id":170140,"depth":263,"text":170141},{"id":170203,"depth":263,"text":170204},{"id":170364,"depth":263,"text":170365},{"id":170427,"depth":263,"text":170428},{"id":170543,"depth":263,"text":170544},{"id":170753,"depth":263,"text":170754},{"id":171065,"depth":263,"text":171066},{"id":171476,"depth":263,"text":171477},{"id":171694,"depth":263,"text":171695},{"id":171942,"depth":263,"text":171943},{"id":171980,"depth":263,"text":171981},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169521,"description":25135},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172047,"title":172048,"body":172049,"description":25135,"extension":1880,"meta":174235,"navigation":721,"path":174236,"seo":174237,"stem":174238,"__hash__":174239},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172050,"toc":174202},[172051,172054,172058,172061,172064,172156,172158,172177,172182,172186,172189,172192,172221,172228,172231,172235,172238,172267,172269,172321,172327,172380,172384,172482,172485,172552,172556,172613,172615,172621,172625,172630,172636,172727,172732,172736,172739,172817,172820,172858,172862,172980,172983,172987,172990,173035,173038,173042,173047,173053,173103,173106,173137,173141,173145,173175,173179,173214,173218,173253,173293,173297,173313,173316,173320,173324,173403,173407,173448,173452,173507,173511,173545,173549,173579,173588,173595,173601,173658,173661,173669,173672,173676,173683,173686,173692,173695,173712,173717,173721,173727,173740,173743,173780,173783,173794,173797,173811,173814,173828,173832,173839,173872,173875,173877,173883,173886,173890,173892,173898,173903,174076,174080,174143,174147,174171,174175,174199],[10,172052,172048],{"id":172053},"_9-异常模块与包",[14,172055,172057],{"id":172056},"_91-什么是异常","9.1 什么是异常",[19,172059,172060],{},"异常是程序运行过程中出现的错误。",[19,172062,172063],{},"常见异常：",[45,172065,172066,172075],{},[48,172067,172068],{},[51,172069,172070,172073],{},[54,172071,172072],{},"异常",[54,172074,27621],{},[62,172076,172077,172087,172097,172106,172116,172126,172136,172146],{},[51,172078,172079,172084],{},[67,172080,172081],{},[70,172082,172083],{},"NameError",[67,172085,172086],{},"使用了未定义变量",[51,172088,172089,172094],{},[67,172090,172091],{},[70,172092,172093],{},"TypeError",[67,172095,172096],{},"类型不匹配",[51,172098,172099,172103],{},[67,172100,172101],{},[70,172102,156199],{},[67,172104,172105],{},"值不合法",[51,172107,172108,172113],{},[67,172109,172110],{},[70,172111,172112],{},"IndexError",[67,172114,172115],{},"列表索引越界",[51,172117,172118,172123],{},[67,172119,172120],{},[70,172121,172122],{},"KeyError",[67,172124,172125],{},"字典 key 不存在",[51,172127,172128,172133],{},[67,172129,172130],{},[70,172131,172132],{},"FileNotFoundError",[67,172134,172135],{},"文件不存在",[51,172137,172138,172143],{},[67,172139,172140],{},[70,172141,172142],{},"ZeroDivisionError",[67,172144,172145],{},"除数为 0",[51,172147,172148,172153],{},[67,172149,172150],{},[70,172151,172152],{},"ImportError",[67,172154,172155],{},"导入失败",[19,172157,16893],{},[154,172159,172161],{"className":690,"code":172160,"language":692,"meta":160,"style":160},"num = int(\"abc\")\n",[70,172162,172163],{"__ignoreMap":160},[178,172164,172165,172167,172169,172171,172173,172175],{"class":180,"line":181},[178,172166,157152],{"class":319},[178,172168,330],{"class":699},[178,172170,4166],{"class":195},[178,172172,944],{"class":319},[178,172174,157245],{"class":188},[178,172176,863],{"class":319},[19,172178,172179,172180,297],{},"会触发 ",[70,172181,156199],{},[14,172183,172185],{"id":172184},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,172187,172188],{},"如果不处理异常，程序会直接终止。",[19,172190,172191],{},"例如用户输入年龄：",[154,172193,172195],{"className":690,"code":172194,"language":692,"meta":160,"style":160},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[70,172196,172197,172215],{"__ignoreMap":160},[178,172198,172199,172201,172203,172205,172207,172209,172211,172213],{"class":180,"line":181},[178,172200,147911],{"class":319},[178,172202,330],{"class":699},[178,172204,4166],{"class":195},[178,172206,944],{"class":319},[178,172208,55543],{"class":195},[178,172210,944],{"class":319},[178,172212,153759],{"class":188},[178,172214,32239],{"class":319},[178,172216,172217,172219],{"class":180,"line":263},[178,172218,1504],{"class":195},[178,172220,157126],{"class":319},[19,172222,172223,172224,172227],{},"用户输入 ",[70,172225,172226],{},"abc","，程序就会报错退出。",[19,172229,172230],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172232,172234],{"id":172233},"_93-try-except","9.3 try except",[19,172236,172237],{},"基础语法：",[154,172239,172241],{"className":690,"code":172240,"language":692,"meta":160,"style":160},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[70,172242,172243,172250,172255,172262],{"__ignoreMap":160},[178,172244,172245,172248],{"class":180,"line":181},[178,172246,172247],{"class":699},"try",[178,172249,847],{"class":319},[178,172251,172252],{"class":180,"line":263},[178,172253,172254],{"class":319},"    可能出错的代码\n",[178,172256,172257,172260],{"class":180,"line":274},[178,172258,172259],{"class":699},"except",[178,172261,847],{"class":319},[178,172263,172264],{"class":180,"line":354},[178,172265,172266],{"class":319},"    出错后的处理代码\n",[19,172268,16893],{},[154,172270,172272],{"className":690,"code":172271,"language":692,"meta":160,"style":160},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[70,172273,172274,172280,172298,172304,172310],{"__ignoreMap":160},[178,172275,172276,172278],{"class":180,"line":181},[178,172277,172247],{"class":699},[178,172279,847],{"class":319},[178,172281,172282,172284,172286,172288,172290,172292,172294,172296],{"class":180,"line":263},[178,172283,153751],{"class":319},[178,172285,330],{"class":699},[178,172287,4166],{"class":195},[178,172289,944],{"class":319},[178,172291,55543],{"class":195},[178,172293,944],{"class":319},[178,172295,153759],{"class":188},[178,172297,32239],{"class":319},[178,172299,172300,172302],{"class":180,"line":274},[178,172301,1022],{"class":195},[178,172303,157126],{"class":319},[178,172305,172306,172308],{"class":180,"line":354},[178,172307,172259],{"class":699},[178,172309,847],{"class":319},[178,172311,172312,172314,172316,172319],{"class":180,"line":364},[178,172313,1022],{"class":195},[178,172315,944],{"class":319},[178,172317,172318],{"class":188},"\"年龄必须是数字\"",[178,172320,863],{"class":319},[19,172322,172323,172324,172326],{},"不建议裸写 ",[70,172325,172259],{},"，最好指定异常类型。",[154,172328,172330],{"className":690,"code":172329,"language":692,"meta":160,"style":160},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[70,172331,172332,172338,172356,172362,172370],{"__ignoreMap":160},[178,172333,172334,172336],{"class":180,"line":181},[178,172335,172247],{"class":699},[178,172337,847],{"class":319},[178,172339,172340,172342,172344,172346,172348,172350,172352,172354],{"class":180,"line":263},[178,172341,153751],{"class":319},[178,172343,330],{"class":699},[178,172345,4166],{"class":195},[178,172347,944],{"class":319},[178,172349,55543],{"class":195},[178,172351,944],{"class":319},[178,172353,153759],{"class":188},[178,172355,32239],{"class":319},[178,172357,172358,172360],{"class":180,"line":274},[178,172359,1022],{"class":195},[178,172361,157126],{"class":319},[178,172363,172364,172366,172368],{"class":180,"line":354},[178,172365,172259],{"class":699},[178,172367,153591],{"class":195},[178,172369,847],{"class":319},[178,172371,172372,172374,172376,172378],{"class":180,"line":364},[178,172373,1022],{"class":195},[178,172375,944],{"class":319},[178,172377,172318],{"class":188},[178,172379,863],{"class":319},[14,172381,172383],{"id":172382},"_94-捕获多个异常","9.4 捕获多个异常",[154,172385,172387],{"className":690,"code":172386,"language":692,"meta":160,"style":160},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[70,172388,172389,172395,172416,172436,172443,172451,172462,172471],{"__ignoreMap":160},[178,172390,172391,172393],{"class":180,"line":181},[178,172392,172247],{"class":699},[178,172394,847],{"class":319},[178,172396,172397,172400,172402,172404,172406,172408,172410,172412,172414],{"class":180,"line":263},[178,172398,172399],{"class":319},"    nums ",[178,172401,330],{"class":699},[178,172403,53953],{"class":319},[178,172405,1665],{"class":195},[178,172407,14196],{"class":319},[178,172409,1669],{"class":195},[178,172411,14196],{"class":319},[178,172413,2021],{"class":195},[178,172415,34978],{"class":319},[178,172417,172418,172421,172423,172425,172427,172429,172431,172434],{"class":180,"line":274},[178,172419,172420],{"class":319},"    index ",[178,172422,330],{"class":699},[178,172424,4166],{"class":195},[178,172426,944],{"class":319},[178,172428,55543],{"class":195},[178,172430,944],{"class":319},[178,172432,172433],{"class":188},"\"请输入索引:\"",[178,172435,32239],{"class":319},[178,172437,172438,172440],{"class":180,"line":354},[178,172439,1022],{"class":195},[178,172441,172442],{"class":319},"(nums[index])\n",[178,172444,172445,172447,172449],{"class":180,"line":364},[178,172446,172259],{"class":699},[178,172448,153591],{"class":195},[178,172450,847],{"class":319},[178,172452,172453,172455,172457,172460],{"class":180,"line":740},[178,172454,1022],{"class":195},[178,172456,944],{"class":319},[178,172458,172459],{"class":188},"\"索引必须是整数\"",[178,172461,863],{"class":319},[178,172463,172464,172466,172469],{"class":180,"line":746},[178,172465,172259],{"class":699},[178,172467,172468],{"class":195}," IndexError",[178,172470,847],{"class":319},[178,172472,172473,172475,172477,172480],{"class":180,"line":752},[178,172474,1022],{"class":195},[178,172476,944],{"class":319},[178,172478,172479],{"class":188},"\"索引越界\"",[178,172481,863],{"class":319},[19,172483,172484],{},"多个异常使用相同处理逻辑：",[154,172486,172488],{"className":690,"code":172487,"language":692,"meta":160,"style":160},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[70,172489,172490,172496,172514,172527,172541],{"__ignoreMap":160},[178,172491,172492,172494],{"class":180,"line":181},[178,172493,172247],{"class":699},[178,172495,847],{"class":319},[178,172497,172498,172500,172502,172504,172506,172508,172510,172512],{"class":180,"line":263},[178,172499,47325],{"class":319},[178,172501,330],{"class":699},[178,172503,4166],{"class":195},[178,172505,944],{"class":319},[178,172507,55543],{"class":195},[178,172509,944],{"class":319},[178,172511,157161],{"class":188},[178,172513,32239],{"class":319},[178,172515,172516,172518,172520,172522,172524],{"class":180,"line":274},[178,172517,1022],{"class":195},[178,172519,944],{"class":319},[178,172521,2386],{"class":195},[178,172523,157411],{"class":699},[178,172525,172526],{"class":319}," num)\n",[178,172528,172529,172531,172533,172535,172537,172539],{"class":180,"line":354},[178,172530,172259],{"class":699},[178,172532,3457],{"class":319},[178,172534,156199],{"class":195},[178,172536,14196],{"class":319},[178,172538,172142],{"class":195},[178,172540,1005],{"class":319},[178,172542,172543,172545,172547,172550],{"class":180,"line":364},[178,172544,1022],{"class":195},[178,172546,944],{"class":319},[178,172548,172549],{"class":188},"\"输入不合法\"",[178,172551,863],{"class":319},[14,172553,172555],{"id":172554},"_95-获取异常信息","9.5 获取异常信息",[154,172557,172559],{"className":690,"code":172558,"language":692,"meta":160,"style":160},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[70,172560,172561,172567,172581,172592],{"__ignoreMap":160},[178,172562,172563,172565],{"class":180,"line":181},[178,172564,172247],{"class":699},[178,172566,847],{"class":319},[178,172568,172569,172571,172573,172575,172577,172579],{"class":180,"line":263},[178,172570,47325],{"class":319},[178,172572,330],{"class":699},[178,172574,4166],{"class":195},[178,172576,944],{"class":319},[178,172578,157245],{"class":188},[178,172580,863],{"class":319},[178,172582,172583,172585,172587,172589],{"class":180,"line":274},[178,172584,172259],{"class":699},[178,172586,153591],{"class":195},[178,172588,66324],{"class":699},[178,172590,172591],{"class":319}," e:\n",[178,172593,172594,172596,172598,172600,172603,172605,172607,172609,172611],{"class":180,"line":354},[178,172595,1022],{"class":195},[178,172597,944],{"class":319},[178,172599,2002],{"class":699},[178,172601,172602],{"class":188},"\"出错了:",[178,172604,2836],{"class":195},[178,172606,2024],{"class":319},[178,172608,2885],{"class":195},[178,172610,2191],{"class":188},[178,172612,863],{"class":319},[19,172614,147822],{},[154,172616,172619],{"className":172617,"code":172618,"language":159,"meta":160},[157],"出错了:invalid literal for int() with base 10: 'abc'\n",[70,172620,172618],{"__ignoreMap":160},[14,172622,172624],{"id":172623},"_96-else和finally","9.6 else和finally",[19,172626,172627,172629],{},[70,172628,3496],{},"：没有异常时执行。",[19,172631,172632,172635],{},[70,172633,172634],{},"finally","：无论是否异常都会执行。",[154,172637,172639],{"className":690,"code":172638,"language":692,"meta":160,"style":160},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[70,172640,172641,172647,172665,172673,172683,172689,172710,172716],{"__ignoreMap":160},[178,172642,172643,172645],{"class":180,"line":181},[178,172644,172247],{"class":699},[178,172646,847],{"class":319},[178,172648,172649,172651,172653,172655,172657,172659,172661,172663],{"class":180,"line":263},[178,172650,47325],{"class":319},[178,172652,330],{"class":699},[178,172654,4166],{"class":195},[178,172656,944],{"class":319},[178,172658,55543],{"class":195},[178,172660,944],{"class":319},[178,172662,157161],{"class":188},[178,172664,32239],{"class":319},[178,172666,172667,172669,172671],{"class":180,"line":274},[178,172668,172259],{"class":699},[178,172670,153591],{"class":195},[178,172672,847],{"class":319},[178,172674,172675,172677,172679,172681],{"class":180,"line":354},[178,172676,1022],{"class":195},[178,172678,944],{"class":319},[178,172680,154579],{"class":188},[178,172682,863],{"class":319},[178,172684,172685,172687],{"class":180,"line":364},[178,172686,3496],{"class":699},[178,172688,847],{"class":319},[178,172690,172691,172693,172695,172697,172700,172702,172704,172706,172708],{"class":180,"line":740},[178,172692,1022],{"class":195},[178,172694,944],{"class":319},[178,172696,2002],{"class":699},[178,172698,172699],{"class":188},"\"输入正确:",[178,172701,2836],{"class":195},[178,172703,3464],{"class":319},[178,172705,2885],{"class":195},[178,172707,2191],{"class":188},[178,172709,863],{"class":319},[178,172711,172712,172714],{"class":180,"line":746},[178,172713,172634],{"class":699},[178,172715,847],{"class":319},[178,172717,172718,172720,172722,172725],{"class":180,"line":752},[178,172719,1022],{"class":195},[178,172721,944],{"class":319},[178,172723,172724],{"class":188},"\"程序结束\"",[178,172726,863],{"class":319},[19,172728,172729,172731],{},[70,172730,172634],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172733,172735],{"id":172734},"_97-抛出异常","9.7 抛出异常",[19,172737,172738],{},"程序可以主动抛出异常。",[154,172740,172742],{"className":690,"code":172741,"language":692,"meta":160,"style":160},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[70,172743,172744,172753,172765,172778,172798,172802,172806],{"__ignoreMap":160},[178,172745,172746,172748,172751],{"class":180,"line":181},[178,172747,835],{"class":699},[178,172749,172750],{"class":184}," set_age",[178,172752,162780],{"class":319},[178,172754,172755,172757,172759,172761,172763],{"class":180,"line":263},[178,172756,922],{"class":699},[178,172758,17465],{"class":319},[178,172760,320],{"class":699},[178,172762,930],{"class":195},[178,172764,847],{"class":319},[178,172766,172767,172769,172771,172773,172776],{"class":180,"line":274},[178,172768,938],{"class":699},[178,172770,153591],{"class":195},[178,172772,944],{"class":319},[178,172774,172775],{"class":188},"\"年龄不能为负数\"",[178,172777,863],{"class":319},[178,172779,172780,172782,172784,172786,172788,172790,172792,172794,172796],{"class":180,"line":354},[178,172781,1022],{"class":195},[178,172783,944],{"class":319},[178,172785,2002],{"class":699},[178,172787,163348],{"class":188},[178,172789,2836],{"class":195},[178,172791,71941],{"class":319},[178,172793,2885],{"class":195},[178,172795,2191],{"class":188},[178,172797,863],{"class":319},[178,172799,172800],{"class":180,"line":364},[178,172801,722],{"emptyLinePlaceholder":721},[178,172803,172804],{"class":180,"line":740},[178,172805,722],{"emptyLinePlaceholder":721},[178,172807,172808,172811,172813,172815],{"class":180,"line":746},[178,172809,172810],{"class":319},"set_age(",[178,172812,2472],{"class":699},[178,172814,1665],{"class":195},[178,172816,863],{"class":319},[19,172818,172819],{},"调用者可以捕获：",[154,172821,172823],{"className":690,"code":172822,"language":692,"meta":160,"style":160},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[70,172824,172825,172831,172842,172852],{"__ignoreMap":160},[178,172826,172827,172829],{"class":180,"line":181},[178,172828,172247],{"class":699},[178,172830,847],{"class":319},[178,172832,172833,172836,172838,172840],{"class":180,"line":263},[178,172834,172835],{"class":319},"    set_age(",[178,172837,2472],{"class":699},[178,172839,1665],{"class":195},[178,172841,863],{"class":319},[178,172843,172844,172846,172848,172850],{"class":180,"line":274},[178,172845,172259],{"class":699},[178,172847,153591],{"class":195},[178,172849,66324],{"class":699},[178,172851,172591],{"class":319},[178,172853,172854,172856],{"class":180,"line":354},[178,172855,1022],{"class":195},[178,172857,68719],{"class":319},[14,172859,172861],{"id":172860},"_98-自定义异常","9.8 自定义异常",[154,172863,172865],{"className":690,"code":172864,"language":692,"meta":160,"style":160},"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",[70,172866,172867,172881,172885,172889,172893,172901,172911,172922,172932,172936,172940,172946,172963,172974],{"__ignoreMap":160},[178,172868,172869,172871,172874,172876,172879],{"class":180,"line":181},[178,172870,16453],{"class":699},[178,172872,172873],{"class":184}," BalanceNotEnoughError",[178,172875,944],{"class":319},[178,172877,172878],{"class":195},"Exception",[178,172880,1005],{"class":319},[178,172882,172883],{"class":180,"line":263},[178,172884,150902],{"class":699},[178,172886,172887],{"class":180,"line":274},[178,172888,722],{"emptyLinePlaceholder":721},[178,172890,172891],{"class":180,"line":354},[178,172892,722],{"emptyLinePlaceholder":721},[178,172894,172895,172897,172899],{"class":180,"line":364},[178,172896,835],{"class":699},[178,172898,151551],{"class":184},[178,172900,164177],{"class":319},[178,172902,172903,172905,172907,172909],{"class":180,"line":740},[178,172904,922],{"class":699},[178,172906,151507],{"class":319},[178,172908,2899],{"class":699},[178,172910,163954],{"class":319},[178,172912,172913,172915,172918,172920],{"class":180,"line":746},[178,172914,938],{"class":699},[178,172916,172917],{"class":319}," BalanceNotEnoughError(",[178,172919,151602],{"class":188},[178,172921,863],{"class":319},[178,172923,172924,172926,172928,172930],{"class":180,"line":752},[178,172925,5862],{"class":699},[178,172927,164184],{"class":319},[178,172929,2472],{"class":699},[178,172931,151540],{"class":319},[178,172933,172934],{"class":180,"line":757},[178,172935,722],{"emptyLinePlaceholder":721},[178,172937,172938],{"class":180,"line":763},[178,172939,722],{"emptyLinePlaceholder":721},[178,172941,172942,172944],{"class":180,"line":769},[178,172943,172247],{"class":699},[178,172945,847],{"class":319},[178,172947,172948,172950,172952,172955,172957,172959,172961],{"class":180,"line":774},[178,172949,163855],{"class":319},[178,172951,330],{"class":699},[178,172953,172954],{"class":319}," withdraw(",[178,172956,2251],{"class":195},[178,172958,14196],{"class":319},[178,172960,1002],{"class":195},[178,172962,863],{"class":319},[178,172964,172965,172967,172970,172972],{"class":180,"line":780},[178,172966,172259],{"class":699},[178,172968,172969],{"class":319}," BalanceNotEnoughError ",[178,172971,713],{"class":699},[178,172973,172591],{"class":319},[178,172975,172976,172978],{"class":180,"line":786},[178,172977,1022],{"class":195},[178,172979,68719],{"class":319},[19,172981,172982],{},"入门阶段大多数情况使用内置异常即可。",[14,172984,172986],{"id":172985},"_99-traceback","9.9 traceback",[19,172988,172989],{},"调试时可以输出完整异常堆栈。",[154,172991,172993],{"className":690,"code":172992,"language":692,"meta":160,"style":160},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[70,172994,172995,173002,173006,173012,173022,173030],{"__ignoreMap":160},[178,172996,172997,172999],{"class":180,"line":181},[178,172998,700],{"class":699},[178,173000,173001],{"class":319}," traceback\n",[178,173003,173004],{"class":180,"line":263},[178,173005,722],{"emptyLinePlaceholder":721},[178,173007,173008,173010],{"class":180,"line":274},[178,173009,172247],{"class":699},[178,173011,847],{"class":319},[178,173013,173014,173016,173018,173020],{"class":180,"line":354},[178,173015,3769],{"class":195},[178,173017,944],{"class":319},[178,173019,157245],{"class":188},[178,173021,863],{"class":319},[178,173023,173024,173026,173028],{"class":180,"line":364},[178,173025,172259],{"class":699},[178,173027,153591],{"class":195},[178,173029,847],{"class":319},[178,173031,173032],{"class":180,"line":740},[178,173033,173034],{"class":319},"    traceback.print_exc()\n",[19,173036,173037],{},"日志系统中常把异常堆栈记录到文件。",[14,173039,173041],{"id":173040},"_910-什么是模块","9.10 什么是模块",[19,173043,173044,173045,127348],{},"模块就是一个 ",[70,173046,147717],{},[19,173048,173049,173050,26372],{},"例如创建 ",[70,173051,173052],{},"my_math.py",[154,173054,173056],{"className":690,"code":173055,"language":692,"meta":160,"style":160},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[70,173057,173058,173066,173076,173080,173084,173093],{"__ignoreMap":160},[178,173059,173060,173062,173064],{"class":180,"line":181},[178,173061,835],{"class":699},[178,173063,6978],{"class":184},[178,173065,152458],{"class":319},[178,173067,173068,173070,173072,173074],{"class":180,"line":263},[178,173069,5862],{"class":699},[178,173071,12630],{"class":319},[178,173073,2421],{"class":699},[178,173075,152469],{"class":319},[178,173077,173078],{"class":180,"line":274},[178,173079,722],{"emptyLinePlaceholder":721},[178,173081,173082],{"class":180,"line":354},[178,173083,722],{"emptyLinePlaceholder":721},[178,173085,173086,173088,173091],{"class":180,"line":364},[178,173087,835],{"class":699},[178,173089,173090],{"class":184}," sub",[178,173092,152458],{"class":319},[178,173094,173095,173097,173099,173101],{"class":180,"line":740},[178,173096,5862],{"class":699},[178,173098,12630],{"class":319},[178,173100,2472],{"class":699},[178,173102,152469],{"class":319},[19,173104,173105],{},"在另一个文件中导入：",[154,173107,173109],{"className":690,"code":173108,"language":692,"meta":160,"style":160},"import my_math\n\nprint(my_math.add(1, 2))\n",[70,173110,173111,173118,173122],{"__ignoreMap":160},[178,173112,173113,173115],{"class":180,"line":181},[178,173114,700],{"class":699},[178,173116,173117],{"class":319}," my_math\n",[178,173119,173120],{"class":180,"line":263},[178,173121,722],{"emptyLinePlaceholder":721},[178,173123,173124,173126,173129,173131,173133,173135],{"class":180,"line":274},[178,173125,1504],{"class":195},[178,173127,173128],{"class":319},"(my_math.add(",[178,173130,1665],{"class":195},[178,173132,14196],{"class":319},[178,173134,1669],{"class":195},[178,173136,32239],{"class":319},[14,173138,173140],{"id":173139},"_911-import导入","9.11 import导入",[387,173142,173144],{"id":173143},"_9111-导入模块","9.11.1 导入模块",[154,173146,173148],{"className":690,"code":173147,"language":692,"meta":160,"style":160},"import random\n\nprint(random.randint(1, 10))\n",[70,173149,173150,173156,173160],{"__ignoreMap":160},[178,173151,173152,173154],{"class":180,"line":181},[178,173153,700],{"class":699},[178,173155,47060],{"class":319},[178,173157,173158],{"class":180,"line":263},[178,173159,722],{"emptyLinePlaceholder":721},[178,173161,173162,173164,173167,173169,173171,173173],{"class":180,"line":274},[178,173163,1504],{"class":195},[178,173165,173166],{"class":319},"(random.randint(",[178,173168,1665],{"class":195},[178,173170,14196],{"class":319},[178,173172,2386],{"class":195},[178,173174,32239],{"class":319},[387,173176,173178],{"id":173177},"_9112-导入指定内容","9.11.2 导入指定内容",[154,173180,173182],{"className":690,"code":173181,"language":692,"meta":160,"style":160},"from random import randint\n\nprint(randint(1, 10))\n",[70,173183,173184,173195,173199],{"__ignoreMap":160},[178,173185,173186,173188,173190,173192],{"class":180,"line":181},[178,173187,32479],{"class":699},[178,173189,59517],{"class":319},[178,173191,700],{"class":699},[178,173193,173194],{"class":319}," randint\n",[178,173196,173197],{"class":180,"line":263},[178,173198,722],{"emptyLinePlaceholder":721},[178,173200,173201,173203,173206,173208,173210,173212],{"class":180,"line":274},[178,173202,1504],{"class":195},[178,173204,173205],{"class":319},"(randint(",[178,173207,1665],{"class":195},[178,173209,14196],{"class":319},[178,173211,2386],{"class":195},[178,173213,32239],{"class":319},[387,173215,173217],{"id":173216},"_9113-起别名","9.11.3 起别名",[154,173219,173221],{"className":690,"code":173220,"language":692,"meta":160,"style":160},"import random as rd\n\nprint(rd.randint(1, 10))\n",[70,173222,173223,173234,173238],{"__ignoreMap":160},[178,173224,173225,173227,173229,173231],{"class":180,"line":181},[178,173226,700],{"class":699},[178,173228,59517],{"class":319},[178,173230,713],{"class":699},[178,173232,173233],{"class":319}," rd\n",[178,173235,173236],{"class":180,"line":263},[178,173237,722],{"emptyLinePlaceholder":721},[178,173239,173240,173242,173245,173247,173249,173251],{"class":180,"line":274},[178,173241,1504],{"class":195},[178,173243,173244],{"class":319},"(rd.randint(",[178,173246,1665],{"class":195},[178,173248,14196],{"class":319},[178,173250,2386],{"class":195},[178,173252,32239],{"class":319},[154,173254,173256],{"className":690,"code":173255,"language":692,"meta":160,"style":160},"from random import randint as rint\n\nprint(rint(1, 10))\n",[70,173257,173258,173274,173278],{"__ignoreMap":160},[178,173259,173260,173262,173264,173266,173269,173271],{"class":180,"line":181},[178,173261,32479],{"class":699},[178,173263,59517],{"class":319},[178,173265,700],{"class":699},[178,173267,173268],{"class":319}," randint ",[178,173270,713],{"class":699},[178,173272,173273],{"class":319}," rint\n",[178,173275,173276],{"class":180,"line":263},[178,173277,722],{"emptyLinePlaceholder":721},[178,173279,173280,173282,173285,173287,173289,173291],{"class":180,"line":274},[178,173281,1504],{"class":195},[178,173283,173284],{"class":319},"(rint(",[178,173286,1665],{"class":195},[178,173288,14196],{"class":319},[178,173290,2386],{"class":195},[178,173292,32239],{"class":319},[387,173294,173296],{"id":173295},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[154,173298,173300],{"className":690,"code":173299,"language":692,"meta":160,"style":160},"from random import *\n",[70,173301,173302],{"__ignoreMap":160},[178,173303,173304,173306,173308,173310],{"class":180,"line":181},[178,173305,32479],{"class":699},[178,173307,59517],{"class":319},[178,173309,700],{"class":699},[178,173311,173312],{"class":699}," *\n",[19,173314,173315],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173317,173319],{"id":173318},"_912-常用内置模块","9.12 常用内置模块",[387,173321,173323],{"id":173322},"_9121-random","9.12.1 random",[154,173325,173327],{"className":690,"code":173326,"language":692,"meta":160,"style":160},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[70,173328,173329,173335,173339,173353,173372],{"__ignoreMap":160},[178,173330,173331,173333],{"class":180,"line":181},[178,173332,700],{"class":699},[178,173334,47060],{"class":319},[178,173336,173337],{"class":180,"line":263},[178,173338,722],{"emptyLinePlaceholder":721},[178,173340,173341,173343,173345,173347,173349,173351],{"class":180,"line":274},[178,173342,1504],{"class":195},[178,173344,173166],{"class":319},[178,173346,1665],{"class":195},[178,173348,14196],{"class":319},[178,173350,2386],{"class":195},[178,173352,32239],{"class":319},[178,173354,173355,173357,173360,173362,173364,173366,173368,173370],{"class":180,"line":354},[178,173356,1504],{"class":195},[178,173358,173359],{"class":319},"(random.choice([",[178,173361,151253],{"class":188},[178,173363,14196],{"class":319},[178,173365,152301],{"class":188},[178,173367,14196],{"class":319},[178,173369,161096],{"class":188},[178,173371,34875],{"class":319},[178,173373,173374,173376,173379,173381,173383,173385,173387,173389,173391,173393,173395,173397,173399,173401],{"class":180,"line":364},[178,173375,1504],{"class":195},[178,173377,173378],{"class":319},"(random.sample([",[178,173380,1665],{"class":195},[178,173382,14196],{"class":319},[178,173384,1669],{"class":195},[178,173386,14196],{"class":319},[178,173388,2021],{"class":195},[178,173390,14196],{"class":319},[178,173392,2233],{"class":195},[178,173394,14196],{"class":319},[178,173396,2259],{"class":195},[178,173398,113567],{"class":319},[178,173400,1669],{"class":195},[178,173402,32239],{"class":319},[387,173404,173406],{"id":173405},"_9122-time","9.12.2 time",[154,173408,173410],{"className":690,"code":173409,"language":692,"meta":160,"style":160},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[70,173411,173412,173418,173422,173429,173437],{"__ignoreMap":160},[178,173413,173414,173416],{"class":180,"line":181},[178,173415,700],{"class":699},[178,173417,33564],{"class":319},[178,173419,173420],{"class":180,"line":263},[178,173421,722],{"emptyLinePlaceholder":721},[178,173423,173424,173426],{"class":180,"line":274},[178,173425,1504],{"class":195},[178,173427,173428],{"class":319},"(time.time())\n",[178,173430,173431,173433,173435],{"class":180,"line":354},[178,173432,96786],{"class":319},[178,173434,1665],{"class":195},[178,173436,863],{"class":319},[178,173438,173439,173441,173443,173446],{"class":180,"line":364},[178,173440,1504],{"class":195},[178,173442,944],{"class":319},[178,173444,173445],{"class":188},"\"1秒后执行\"",[178,173447,863],{"class":319},[387,173449,173451],{"id":173450},"_9123-datetime","9.12.3 datetime",[154,173453,173455],{"className":690,"code":173454,"language":692,"meta":160,"style":160},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[70,173456,173457,173469,173473,173483,173490],{"__ignoreMap":160},[178,173458,173459,173461,173464,173466],{"class":180,"line":181},[178,173460,32479],{"class":699},[178,173462,173463],{"class":319}," datetime ",[178,173465,700],{"class":699},[178,173467,173468],{"class":319}," datetime\n",[178,173470,173471],{"class":180,"line":263},[178,173472,722],{"emptyLinePlaceholder":721},[178,173474,173475,173478,173480],{"class":180,"line":274},[178,173476,173477],{"class":319},"now ",[178,173479,330],{"class":699},[178,173481,173482],{"class":319}," datetime.now()\n",[178,173484,173485,173487],{"class":180,"line":354},[178,173486,1504],{"class":195},[178,173488,173489],{"class":319},"(now)\n",[178,173491,173492,173494,173497,173500,173502,173505],{"class":180,"line":364},[178,173493,1504],{"class":195},[178,173495,173496],{"class":319},"(now.strftime(",[178,173498,173499],{"class":188},"\"%Y-%m-",[178,173501,158056],{"class":195},[178,173503,173504],{"class":188}," %H:%M:%S\"",[178,173506,32239],{"class":319},[387,173508,173510],{"id":173509},"_9124-os","9.12.4 os",[154,173512,173514],{"className":690,"code":173513,"language":692,"meta":160,"style":160},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[70,173515,173516,173522,173526,173533],{"__ignoreMap":160},[178,173517,173518,173520],{"class":180,"line":181},[178,173519,700],{"class":699},[178,173521,47037],{"class":319},[178,173523,173524],{"class":180,"line":263},[178,173525,722],{"emptyLinePlaceholder":721},[178,173527,173528,173530],{"class":180,"line":274},[178,173529,1504],{"class":195},[178,173531,173532],{"class":319},"(os.getcwd())\n",[178,173534,173535,173537,173540,173543],{"class":180,"line":354},[178,173536,1504],{"class":195},[178,173538,173539],{"class":319},"(os.listdir(",[178,173541,173542],{"class":188},"\".\"",[178,173544,32239],{"class":319},[387,173546,173548],{"id":173547},"_9125-sys","9.12.5 sys",[154,173550,173552],{"className":690,"code":173551,"language":692,"meta":160,"style":160},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[70,173553,173554,173561,173565,173572],{"__ignoreMap":160},[178,173555,173556,173558],{"class":180,"line":181},[178,173557,700],{"class":699},[178,173559,173560],{"class":319}," sys\n",[178,173562,173563],{"class":180,"line":263},[178,173564,722],{"emptyLinePlaceholder":721},[178,173566,173567,173569],{"class":180,"line":274},[178,173568,1504],{"class":195},[178,173570,173571],{"class":319},"(sys.version)\n",[178,173573,173574,173576],{"class":180,"line":354},[178,173575,1504],{"class":195},[178,173577,173578],{"class":319},"(sys.path)\n",[14,173580,173582,173583,173585,173586,2191],{"id":173581},"_913-if-name-main","9.13 if ",[2093,173584,81529],{}," == \"",[2093,173587,103708],{},[19,173589,173590,173591,173594],{},"模块被直接运行和被导入时，",[70,173592,173593],{},"__name__"," 的值不同。",[19,173596,173597,173598,26372],{},"创建 ",[70,173599,173600],{},"my_module.py",[154,173602,173604],{"className":690,"code":173603,"language":692,"meta":160,"style":160},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[70,173605,173606,173614,173624,173628,173632,173644],{"__ignoreMap":160},[178,173607,173608,173610,173612],{"class":180,"line":181},[178,173609,835],{"class":699},[178,173611,6978],{"class":184},[178,173613,152458],{"class":319},[178,173615,173616,173618,173620,173622],{"class":180,"line":263},[178,173617,5862],{"class":699},[178,173619,12630],{"class":319},[178,173621,2421],{"class":699},[178,173623,152469],{"class":319},[178,173625,173626],{"class":180,"line":274},[178,173627,722],{"emptyLinePlaceholder":721},[178,173629,173630],{"class":180,"line":354},[178,173631,722],{"emptyLinePlaceholder":721},[178,173633,173634,173636,173638,173640,173642],{"class":180,"line":364},[178,173635,1085],{"class":699},[178,173637,1088],{"class":195},[178,173639,1091],{"class":699},[178,173641,1094],{"class":188},[178,173643,847],{"class":319},[178,173645,173646,173648,173650,173652,173654,173656],{"class":180,"line":740},[178,173647,1022],{"class":195},[178,173649,167965],{"class":319},[178,173651,1665],{"class":195},[178,173653,14196],{"class":319},[178,173655,1669],{"class":195},[178,173657,32239],{"class":319},[19,173659,173660],{},"作用：",[26,173662,173663,173666],{},[29,173664,173665],{},"直接运行该文件时，执行测试代码。",[29,173667,173668],{},"被其他文件导入时，不执行测试代码。",[19,173670,173671],{},"这是写模块时很常用的习惯。",[14,173673,173675],{"id":173674},"_914-包","9.14 包",[19,173677,173678,173679,173682],{},"包是包含 ",[70,173680,173681],{},"__init__.py"," 的目录，用于组织多个模块。",[19,173684,173685],{},"目录结构：",[154,173687,173690],{"className":173688,"code":173689,"language":159,"meta":160},[157],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[70,173691,173689],{"__ignoreMap":160},[19,173693,173694],{},"导入：",[154,173696,173698],{"className":690,"code":173697,"language":692,"meta":160,"style":160},"from utils.file_utils import read_file\n",[70,173699,173700],{"__ignoreMap":160},[178,173701,173702,173704,173707,173709],{"class":180,"line":181},[178,173703,32479],{"class":699},[178,173705,173706],{"class":319}," utils.file_utils ",[178,173708,700],{"class":699},[178,173710,173711],{"class":319}," read_file\n",[19,173713,173714,173716],{},[70,173715,173681],{}," 可以为空，也可以写包初始化逻辑。",[14,173718,173720],{"id":173719},"_915-第三方包","9.15 第三方包",[19,173722,173723,173724,173726],{},"第三方包通过 ",[70,173725,221],{}," 安装。",[154,173728,173730],{"className":172,"code":173729,"language":174,"meta":160,"style":160},"pip install requests\n",[70,173731,173732],{"__ignoreMap":160},[178,173733,173734,173736,173738],{"class":180,"line":181},[178,173735,221],{"class":184},[178,173737,192],{"class":188},[178,173739,147463],{"class":188},[19,173741,173742],{},"使用：",[154,173744,173746],{"className":690,"code":173745,"language":692,"meta":160,"style":160},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[70,173747,173748,173754,173758,173773],{"__ignoreMap":160},[178,173749,173750,173752],{"class":180,"line":181},[178,173751,700],{"class":699},[178,173753,147463],{"class":319},[178,173755,173756],{"class":180,"line":263},[178,173757,722],{"emptyLinePlaceholder":721},[178,173759,173760,173763,173765,173768,173771],{"class":180,"line":274},[178,173761,173762],{"class":319},"response ",[178,173764,330],{"class":699},[178,173766,173767],{"class":319}," requests.get(",[178,173769,173770],{"class":188},"\"https:\u002F\u002Fwww.example.com\"",[178,173772,863],{"class":319},[178,173774,173775,173777],{"class":180,"line":354},[178,173776,1504],{"class":195},[178,173778,173779],{"class":319},"(response.status_code)\n",[19,173781,173782],{},"查看已安装包：",[154,173784,173786],{"className":172,"code":173785,"language":174,"meta":160,"style":160},"pip list\n",[70,173787,173788],{"__ignoreMap":160},[178,173789,173790,173792],{"class":180,"line":181},[178,173791,221],{"class":184},[178,173793,120320],{"class":188},[19,173795,173796],{},"导出项目依赖：",[154,173798,173799],{"className":172,"code":147658,"language":174,"meta":160,"style":160},[70,173800,173801],{"__ignoreMap":160},[178,173802,173803,173805,173807,173809],{"class":180,"line":181},[178,173804,221],{"class":184},[178,173806,147667],{"class":188},[178,173808,27973],{"class":699},[178,173810,147672],{"class":188},[19,173812,173813],{},"安装项目依赖：",[154,173815,173816],{"className":172,"code":147678,"language":174,"meta":160,"style":160},[70,173817,173818],{"__ignoreMap":160},[178,173819,173820,173822,173824,173826],{"class":180,"line":181},[178,173821,221],{"class":184},[178,173823,192],{"class":188},[178,173825,121004],{"class":195},[178,173827,147672],{"class":188},[14,173829,173831],{"id":173830},"_916-模块搜索路径","9.16 模块搜索路径",[19,173833,173834,173835,173838],{},"Python 导入模块时会在 ",[70,173836,173837],{},"sys.path"," 中查找。",[154,173840,173842],{"className":690,"code":173841,"language":692,"meta":160,"style":160},"import sys\n\nfor path in sys.path:\n    print(path)\n",[70,173843,173844,173850,173854,173866],{"__ignoreMap":160},[178,173845,173846,173848],{"class":180,"line":181},[178,173847,700],{"class":699},[178,173849,173560],{"class":319},[178,173851,173852],{"class":180,"line":263},[178,173853,722],{"emptyLinePlaceholder":721},[178,173855,173856,173858,173861,173863],{"class":180,"line":274},[178,173857,1474],{"class":699},[178,173859,173860],{"class":319}," path ",[178,173862,994],{"class":699},[178,173864,173865],{"class":319}," sys.path:\n",[178,173867,173868,173870],{"class":180,"line":354},[178,173869,1022],{"class":195},[178,173871,170594],{"class":319},[19,173873,173874],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,173876,158988],{},[154,173878,173881],{"className":173879,"code":173880,"language":159,"meta":160},[157],"random.py\njson.py\ntime.py\n",[70,173882,173880],{"__ignoreMap":160},[19,173884,173885],{},"这些文件名可能导致导入异常。",[14,173887,173889],{"id":173888},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,173891,173685],{},[154,173893,173896],{"className":173894,"code":173895,"language":159,"meta":160},[157],"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",[70,173897,173895],{"__ignoreMap":160},[19,173899,173900,26372],{},[70,173901,173902],{},"utils\u002Ffile_utils.py",[154,173904,173906],{"className":690,"code":173905,"language":692,"meta":160,"style":160},"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",[70,173907,173908,173914,173924,173928,173932,173942,173952,173960,173966,173970,173997,174007,174011,174015,174025,174051],{"__ignoreMap":160},[178,173909,173910,173912],{"class":180,"line":181},[178,173911,700],{"class":699},[178,173913,148456],{"class":319},[178,173915,173916,173918,173920,173922],{"class":180,"line":263},[178,173917,32479],{"class":699},[178,173919,109676],{"class":319},[178,173921,700],{"class":699},[178,173923,109681],{"class":319},[178,173925,173926],{"class":180,"line":274},[178,173927,722],{"emptyLinePlaceholder":721},[178,173929,173930],{"class":180,"line":354},[178,173931,722],{"emptyLinePlaceholder":721},[178,173933,173934,173936,173939],{"class":180,"line":364},[178,173935,835],{"class":699},[178,173937,173938],{"class":184}," read_json",[178,173940,173941],{"class":319},"(path):\n",[178,173943,173944,173947,173949],{"class":180,"line":740},[178,173945,173946],{"class":319},"    path ",[178,173948,330],{"class":699},[178,173950,173951],{"class":319}," Path(path)\n",[178,173953,173954,173956,173958],{"class":180,"line":746},[178,173955,922],{"class":699},[178,173957,40662],{"class":699},[178,173959,170675],{"class":319},[178,173961,173962,173964],{"class":180,"line":752},[178,173963,16511],{"class":699},[178,173965,53566],{"class":319},[178,173967,173968],{"class":180,"line":757},[178,173969,722],{"emptyLinePlaceholder":721},[178,173971,173972,173974,173976,173979,173981,173983,173985,173987,173989,173991,173993,173995],{"class":180,"line":763},[178,173973,35910],{"class":699},[178,173975,148156],{"class":195},[178,173977,173978],{"class":319},"(path, ",[178,173980,148166],{"class":188},[178,173982,14196],{"class":319},[178,173984,148171],{"class":6985},[178,173986,330],{"class":699},[178,173988,148176],{"class":188},[178,173990,15474],{"class":319},[178,173992,713],{"class":699},[178,173994,149518],{"class":6985},[178,173996,847],{"class":319},[178,173998,173999,174001,174003,174005],{"class":180,"line":769},[178,174000,16511],{"class":699},[178,174002,149529],{"class":319},[178,174004,47086],{"class":6985},[178,174006,863],{"class":319},[178,174008,174009],{"class":180,"line":774},[178,174010,722],{"emptyLinePlaceholder":721},[178,174012,174013],{"class":180,"line":780},[178,174014,722],{"emptyLinePlaceholder":721},[178,174016,174017,174019,174022],{"class":180,"line":786},[178,174018,835],{"class":699},[178,174020,174021],{"class":184}," write_json",[178,174023,174024],{"class":319},"(path, data):\n",[178,174026,174027,174029,174031,174033,174035,174037,174039,174041,174043,174045,174047,174049],{"class":180,"line":792},[178,174028,35910],{"class":699},[178,174030,148156],{"class":195},[178,174032,173978],{"class":319},[178,174034,153341],{"class":188},[178,174036,14196],{"class":319},[178,174038,148171],{"class":6985},[178,174040,330],{"class":699},[178,174042,148176],{"class":188},[178,174044,15474],{"class":319},[178,174046,713],{"class":699},[178,174048,149518],{"class":6985},[178,174050,847],{"class":319},[178,174052,174053,174056,174058,174060,174062,174064,174066,174068,174070,174072,174074],{"class":180,"line":798},[178,174054,174055],{"class":319},"        json.dump(data, ",[178,174057,47086],{"class":6985},[178,174059,14196],{"class":319},[178,174061,148502],{"class":6985},[178,174063,330],{"class":699},[178,174065,35719],{"class":195},[178,174067,14196],{"class":319},[178,174069,153377],{"class":6985},[178,174071,330],{"class":699},[178,174073,1669],{"class":195},[178,174075,863],{"class":319},[19,174077,174078,26372],{},[70,174079,155972],{},[154,174081,174083],{"className":690,"code":174082,"language":692,"meta":160,"style":160},"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",[70,174084,174085,174096,174100,174113,174133],{"__ignoreMap":160},[178,174086,174087,174089,174091,174093],{"class":180,"line":181},[178,174088,32479],{"class":699},[178,174090,173706],{"class":319},[178,174092,700],{"class":699},[178,174094,174095],{"class":319}," read_json, write_json\n",[178,174097,174098],{"class":180,"line":263},[178,174099,722],{"emptyLinePlaceholder":721},[178,174101,174102,174104,174106,174109,174111],{"class":180,"line":274},[178,174103,161081],{"class":319},[178,174105,330],{"class":699},[178,174107,174108],{"class":319}," read_json(",[178,174110,153196],{"class":188},[178,174112,863],{"class":319},[178,174114,174115,174117,174119,174121,174123,174125,174127,174129,174131],{"class":180,"line":354},[178,174116,171899],{"class":319},[178,174118,333],{"class":188},[178,174120,53167],{"class":319},[178,174122,151253],{"class":188},[178,174124,14196],{"class":319},[178,174126,152837],{"class":188},[178,174128,53167],{"class":319},[178,174130,2928],{"class":195},[178,174132,166517],{"class":319},[178,174134,174135,174138,174140],{"class":180,"line":364},[178,174136,174137],{"class":319},"write_json(",[178,174139,153196],{"class":188},[178,174141,174142],{"class":319},", students)\n",[14,174144,174146],{"id":174145},"_918-易错点","9.18 易错点",[26,174148,174149,174152,174157,174162,174165,174168],{},[29,174150,174151],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[29,174153,174154,174155,297],{},"能指定异常类型就不要裸写 ",[70,174156,172259],{},[29,174158,174159,174161],{},[70,174160,172634],{}," 无论是否出错都会执行。",[29,174163,174164],{},"模块文件名不要和标准库重名。",[29,174166,174167],{},"导入自己写的模块时，要注意运行目录。",[29,174169,174170],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174172,174174],{"id":174173},"_919-本章练习","9.19 本章练习",[26,174176,174177,174180,174183,174189,174196],{},[29,174178,174179],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[29,174181,174182],{},"写函数读取文件，如果文件不存在则返回空字符串。",[29,174184,173597,174185,174188],{},[70,174186,174187],{},"math_utils.py","，实现加减乘除函数并导入使用。",[29,174190,174191,174192,174195],{},"创建一个 ",[70,174193,174194],{},"utils"," 包，把 JSON 读写函数放进去。",[29,174197,174198],{},"写一个程序，捕获除零异常和输入格式异常。",[1853,174200,174201],{},"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":160,"searchDepth":263,"depth":263,"links":174203},[174204,174205,174206,174207,174208,174209,174210,174211,174212,174213,174214,174220,174227,174229,174230,174231,174232,174233,174234],{"id":172056,"depth":263,"text":172057},{"id":172184,"depth":263,"text":172185},{"id":172233,"depth":263,"text":172234},{"id":172382,"depth":263,"text":172383},{"id":172554,"depth":263,"text":172555},{"id":172623,"depth":263,"text":172624},{"id":172734,"depth":263,"text":172735},{"id":172860,"depth":263,"text":172861},{"id":172985,"depth":263,"text":172986},{"id":173040,"depth":263,"text":173041},{"id":173139,"depth":263,"text":173140,"children":174215},[174216,174217,174218,174219],{"id":173143,"depth":274,"text":173144},{"id":173177,"depth":274,"text":173178},{"id":173216,"depth":274,"text":173217},{"id":173295,"depth":274,"text":173296},{"id":173318,"depth":263,"text":173319,"children":174221},[174222,174223,174224,174225,174226],{"id":173322,"depth":274,"text":173323},{"id":173405,"depth":274,"text":173406},{"id":173450,"depth":274,"text":173451},{"id":173509,"depth":274,"text":173510},{"id":173547,"depth":274,"text":173548},{"id":173581,"depth":263,"text":174228},"9.13 if name == \"main\"",{"id":173674,"depth":263,"text":173675},{"id":173719,"depth":263,"text":173720},{"id":173830,"depth":263,"text":173831},{"id":173888,"depth":263,"text":173889},{"id":174145,"depth":263,"text":174146},{"id":174173,"depth":263,"text":174174},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172048,"description":25135},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174241,"title":174242,"body":174243,"description":174406,"extension":1880,"meta":174407,"navigation":721,"path":174408,"seo":174409,"stem":174410,"__hash__":174411},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174244,"toc":174401},[174245,174248,174251,174254,174265,174267,174341,174344,174347,174350,174353,174356,174359,174362,174365,174368,174371],[10,174246,174242],{"id":174247},"python教程",[19,174249,174250],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,174252,174253],{},"建议学习环境：",[26,174255,174256,174259,174262],{},[29,174257,174258],{},"Python 版本：Python 3.10 及以上。",[29,174260,174261],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[29,174263,174264],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174266,118443],{"id":118443},[26,174268,174269,174275,174281,174287,174293,174299,174305,174311,174317,174323,174329,174335],{},[29,174270,174271],{},[2178,174272,174274],{"href":174273},".\u002Fch1-Python","Python环境与第一个程序",[29,174276,174277],{},[2178,174278,174280],{"href":174279},".\u002Fch2","基础语法、变量与字符串",[29,174282,174283],{},[2178,174284,174286],{"href":174285},".\u002Fch3","判断语句",[29,174288,174289],{},[2178,174290,174292],{"href":174291},".\u002Fch4","循环语句",[29,174294,174295],{},[2178,174296,174298],{"href":174297},".\u002Fch5","函数基础",[29,174300,174301],{},[2178,174302,174304],{"href":174303},".\u002Fch6","数据容器",[29,174306,174307],{},[2178,174308,174310],{"href":174309},".\u002Fch7","函数进阶",[29,174312,174313],{},[2178,174314,174316],{"href":174315},".\u002Fch8","文件操作",[29,174318,174319],{},[2178,174320,174322],{"href":174321},".\u002Fch9","异常、模块与包",[29,174324,174325],{},[2178,174326,174328],{"href":174327},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[29,174330,174331],{},[2178,174332,174334],{"href":174333},".\u002Fch11","面向对象基础",[29,174336,174337],{},[2178,174338,174340],{"href":174339},".\u002Fch12","综合案例与复习路线",[14,174342,174343],{"id":174343},"学习路线",[19,174345,174346],{},"第一阶段：能运行程序。",[19,174348,174349],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,174351,174352],{},"第二阶段：能组织数据。",[19,174354,174355],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,174357,174358],{},"第三阶段：能封装逻辑。",[19,174360,174361],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,174363,174364],{},"第四阶段：能做小项目。",[19,174366,174367],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174369,174370],{"id":174370},"参考资料",[26,174372,174373,174380,174387,174394],{},[29,174374,174375,174376],{},"黑马程序员 Python 入门教程推荐：",[2178,174377,174378],{"href":174378,"rel":174379},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[25619],[29,174381,174382,174383],{},"Python 官方中文教程：",[2178,174384,174385],{"href":174385,"rel":174386},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[25619],[29,174388,174389,174390],{},"Python 标准库文档：",[2178,174391,174392],{"href":174392,"rel":174393},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[25619],[29,174395,174396,174397],{},"pyecharts 文档：",[2178,174398,174399],{"href":174399,"rel":174400},"https:\u002F\u002Fpyecharts.org\u002F",[25619],{"title":160,"searchDepth":263,"depth":263,"links":174402},[174403,174404,174405],{"id":118443,"depth":263,"text":118443},{"id":174343,"depth":263,"text":174343},{"id":174370,"depth":263,"text":174370},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25137},"\u002Fwiki\u002F2024-10-10-python",{"title":174242,"description":174406},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331469652]